126 lines
3.8 KiB
Python
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", # noqa: S106
|
|
**{"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())
|