Files
ThothII/harness/tests/test_session_mutations.py
T

126 lines
3.8 KiB
Python

"""Tests for session manifest mutations (rename, group, archive, delete)."""
import pytest
from typer.testing import CliRunner
from tht.cli.session_cmd import session_app
from tht.config import DatabaseConfig
from tht.session.store import (
SessionError,
create_session,
delete_session,
load_session,
set_archived,
set_group,
set_name,
)
def _db():
return DatabaseConfig(
database="testdb", user="u", password="p",
schema="public",
)
def test_manifest_defaults(tmp_path):
m = create_session("domanda", _db(), tmp_path)
assert m.archived is False
assert m.group is None
assert m.name is None
def test_set_name(tmp_path):
m = create_session("domanda", _db(), tmp_path)
set_name(m.id, "Pazienti 2024", tmp_path)
assert load_session(m.id, tmp_path).name == "Pazienti 2024"
def test_set_name_empty_clears(tmp_path):
m = create_session("domanda", _db(), tmp_path)
set_name(m.id, "x", tmp_path)
set_name(m.id, "", tmp_path)
assert load_session(m.id, tmp_path).name is None
def test_set_group_and_clear(tmp_path):
m = create_session("domanda", _db(), tmp_path)
set_group(m.id, "Aritmologia", tmp_path)
assert load_session(m.id, tmp_path).group == "Aritmologia"
set_group(m.id, "", tmp_path)
assert load_session(m.id, tmp_path).group is None
def test_set_archived(tmp_path):
m = create_session("domanda", _db(), tmp_path)
set_archived(m.id, True, tmp_path)
assert load_session(m.id, tmp_path).archived is True
set_archived(m.id, False, tmp_path)
assert load_session(m.id, tmp_path).archived is False
def test_delete_session(tmp_path):
m = create_session("domanda", _db(), tmp_path)
delete_session(m.id, tmp_path)
assert not (tmp_path / m.id).exists()
with pytest.raises(SessionError):
load_session(m.id, tmp_path)
def test_delete_missing_raises(tmp_path):
with pytest.raises(SessionError):
delete_session("nope", tmp_path)
def _patch_cfg(monkeypatch, tmp_path):
from tht.cli import session_cmd
class FakePaths:
sessions = tmp_path
class FakeCfg:
paths = FakePaths()
database = _db()
monkeypatch.setattr(session_cmd, "_load_config_or_exit", lambda _: FakeCfg())
def test_cli_set_name(tmp_path, monkeypatch):
m = create_session("q", _db(), tmp_path)
_patch_cfg(monkeypatch, tmp_path)
res = CliRunner().invoke(session_app, ["set-name", m.id, "--name", "Mio nome"])
assert res.exit_code == 0, res.output
assert load_session(m.id, tmp_path).name == "Mio nome"
def test_cli_set_group(tmp_path, monkeypatch):
m = create_session("q", _db(), tmp_path)
_patch_cfg(monkeypatch, tmp_path)
res = CliRunner().invoke(session_app, ["set-group", m.id, "--group", "G1"])
assert res.exit_code == 0, res.output
assert load_session(m.id, tmp_path).group == "G1"
def test_cli_archive_unarchive(tmp_path, monkeypatch):
m = create_session("q", _db(), tmp_path)
_patch_cfg(monkeypatch, tmp_path)
assert CliRunner().invoke(session_app, ["archive", m.id]).exit_code == 0
assert load_session(m.id, tmp_path).archived is True
assert CliRunner().invoke(session_app, ["unarchive", m.id]).exit_code == 0
assert load_session(m.id, tmp_path).archived is False
def test_cli_delete(tmp_path, monkeypatch):
m = create_session("q", _db(), tmp_path)
_patch_cfg(monkeypatch, tmp_path)
res = CliRunner().invoke(session_app, ["delete", m.id])
assert res.exit_code == 0, res.output
assert not (tmp_path / m.id).exists()
def test_cli_list_includes_new_fields(tmp_path, monkeypatch):
from tht.cli.session_cmd import _list_sessions
create_session("q", _db(), tmp_path)
rows = _list_sessions(tmp_path)
assert {"name", "group", "archived"}.issubset(rows[0].keys())