Files
ThothII/harness/tests/test_cli_surface.py
T
Codex 82e2c91f42
Publish documentation / publish (push) Successful in 1m27s
feat: implement memory and evidence administration with guided repairs
Add PostgreSQL-backed memory, editable evidence with source review and activation, and human-approved archive repairs across the harness, API, and UI. Include migrations, deployment support, regression coverage, and validation documentation.

Refresh permissions from validated session roles so existing administrator logins can access newly deployed archive management features.
2026-09-10 10:31:34 +02:00

51 lines
1.8 KiB
Python

"""The public Python CLI exposes exactly the approved workflow surface."""
from __future__ import annotations
import json
from pathlib import Path
from typer.main import get_command
from typer.testing import CliRunner
from tht.cli import app
_FIXTURE = Path(__file__).parent / "fixtures" / "approved_cli_surface.json"
def _leaf_paths(command, prefix: tuple[str, ...] = ()) -> set[str]:
"""Return the terminal paths offered by the real Typer/Click command tree."""
children = getattr(command, "commands", {})
if not children:
return {" ".join(prefix)} if prefix else set()
paths: set[str] = set()
for name, child in children.items():
if getattr(child, "hidden", False):
continue
paths.update(_leaf_paths(child, prefix + (name,)))
return paths
def _approved_surface() -> dict[str, list[str]]:
return json.loads(_FIXTURE.read_text(encoding="utf-8"))
def test_typer_tree_matches_the_approved_command_surface():
"""Catches a missing live command or an accidentally re-registered erased command."""
approved = _approved_surface()
expected = set(approved["maintained"]) | set(approved["enhanced"])
assert len(approved["maintained"]) == 61
assert len(approved["enhanced"]) == 21
assert len(approved["erased"]) == 14
assert not (expected & set(approved["erased"]))
assert _leaf_paths(get_command(app)) == expected
def test_erased_commands_are_rejected_with_the_standard_typer_error():
"""Catches a regression that restores a retired command under an existing group."""
runner = CliRunner()
for path in _approved_surface()["erased"]:
result = runner.invoke(app, [*path.split(), "--help"])
assert result.exit_code != 0, path
assert "no such command" in result.output.casefold(), path