from info_tech_canon.service import ( artifact_graph, generate_agent_briefs, generate_indexes, generate_tree, inspect_canon, list_models, list_standards, profile_graph, profile_validate, validate_canon, ) from info_tech_canon.service import DEFAULT_INFOSPACE_ROOT import shutil def test_inspect_canon_counts_artifact_kinds() -> None: payload = inspect_canon() assert payload["ok"] is True assert payload["infospace"]["slug"] == "canon" assert payload["infospace"]["artifact_count"] == 44 assert payload["infospace"]["kinds"] == { "capture-criteria": 1, "concept-catalog": 1, "conformance-pack": 1, "consumer-workplan-brief": 2, "evaluation-pack": 1, "evaluation-question-set": 1, "example": 1, "interface-card-expectation": 1, "kernel": 2, "mapping": 1, "mapping-expectation": 1, "model": 11, "model-extension": 1, "pattern": 1, "profile-alignment": 1, "profile": 1, "profile-artifact": 13, "standard": 2, "visualization-example-set": 1, } def test_model_and_standard_lists_are_filtered() -> None: assert list_models()["count"] == 11 assert list_standards()["count"] == 2 def test_validate_canon_passes_scaffold() -> None: payload = validate_canon() assert payload["ok"] is True assert payload["errors"] == [] assert "warnings" in payload assert payload["details"]["artifact_count"] == 44 def test_graph_exports_relationship_summary() -> None: payload = artifact_graph() assert payload["ok"] is True assert payload["graph"]["node_count"] == 44 assert payload["graph"]["edge_count"] > 15 def test_small_saas_profile_validates() -> None: payload = profile_validate("small-saas") assert payload["ok"] is True assert payload["errors"] == [] assert payload["details"]["kinds"]["tenant"] == 2 def test_small_saas_profile_graph_exports_slice() -> None: payload = profile_graph("small-saas") assert payload["ok"] is True assert payload["profile"] == "small-saas" assert "small-saas/service/billing-portal" in payload["graph"]["nodes"] def test_generators_write_expected_assets(tmp_path) -> None: root = tmp_path / "infospace" shutil.copytree(DEFAULT_INFOSPACE_ROOT, root) index_payload = generate_indexes(root) tree_payload = generate_tree(root) brief_payload = generate_agent_briefs(root) assert index_payload["ok"] is True assert tree_payload["ok"] is True assert brief_payload["ok"] is True assert (root / "indexes" / "concept-ownership.yaml").is_file() assert (root / "views" / "by-standard.md").read_text( encoding="utf-8" ).startswith("