core/tests/test_workbench_demos.py
2026-06-12 23:25:24 -07:00

58 lines
1.8 KiB
Python

from __future__ import annotations
from pathlib import Path
from workbench.api import WorkbenchApi
from workbench import readers
def _demo_out_dirs() -> dict[str, bool]:
root = Path("demos")
return {
path.as_posix(): path.exists()
for path in sorted(root.glob("*/out"))
}
def test_list_demos_projects_closed_registry() -> None:
demos = readers.list_demos()
ids = {demo.demo_id for demo in demos}
assert "proof_carrying_promotion" in ids
assert "deductive_entailment_authority" in ids
assert all(demo.read_only is True for demo in demos)
assert all(demo.scenario_count == len(demo.scenarios) for demo in demos)
assert all(s.what_this_proves for demo in demos for s in demo.scenarios)
def test_run_demo_compares_against_committed_expected_artifacts() -> None:
result = readers.run_demo("deductive_entailment_authority")
assert result.demo_id == "deductive_entailment_authority"
assert result.all_passed is True
assert result.what_this_proves
assert any(s.proposer_wrong for s in result.scenarios)
assert all(s.response for s in result.scenarios)
def test_demo_api_refuses_unknown_or_unsafe_ids() -> None:
api = WorkbenchApi()
unknown = api.handle("POST", "/demos/not_registered/run", b"")
unsafe = api.handle("POST", "/demos/../proof_carrying_promotion/run", b"")
assert unknown.status == 404
assert unknown.payload["error"]["code"] == "not_found"
assert unsafe.status == 400
assert unsafe.payload["error"]["code"] == "bad_request"
def test_demo_run_endpoint_does_not_write_demo_out_dirs() -> None:
before = _demo_out_dirs()
api = WorkbenchApi()
response = api.handle("POST", "/demos/proof_carrying_promotion/run", b"")
assert response.status == 200
assert response.payload["data"]["all_passed"] is True
assert _demo_out_dirs() == before