import json from pathlib import Path import pytest ROOT = Path(__file__).resolve().parents[1] RECORD = ROOT / "data" / "capability" / "audit-core-operational.json" CARD = ROOT / "docs" / "interface-card.yaml" SCHEMA = Path.home() / "info-tech-canon" / "infospace" / "schemas" / "interface-card.schema.yaml" def test_capability_record_exists_and_joins_operations_audit(): record = json.loads(RECORD.read_text()) assert any(item["capability"] == "operations.audit" for item in record["requires"]) assert any(item["capability"] == "data.archive" for item in record["requires"]) provisions = {item["capability"]: item for item in record["provisions"]} assert "data.archive" not in provisions audit = provisions["operations.audit"] assert audit["maturity"] == "D4" assert audit["provider"] == "audit-core.railiance01" used = {item["capability"]: item["relation"] for item in audit["uses_provisions"]} assert used["data.backup"] == "may_use" assert used["security.secrets"] == "may_use" unknown = [row for row in audit["consumes"] if row["basis"] == "unknown"] assert unknown assert all(row["quantity"]["value"] is None and row.get("gap") for row in unknown) hooks = {item["hook"]: item["basis"] for item in audit["evidence"]} assert hooks["integrity_verification"] == "measured" def test_capability_review_against_live_catalog(): import sys canon_src = Path.home() / "info-tech-canon" / "src" if canon_src.is_dir() and str(canon_src) not in sys.path: sys.path.insert(0, str(canon_src)) try: from info_tech_canon.capability import review_path except ImportError: pytest.skip("info-tech-canon is not importable") result = review_path(RECORD) assert result["ok"] is True by_cap = {item["capability"]: item for item in result["requirements"]} assert by_cap["operations.audit"]["status"] == "met" assert by_cap["data.archive"]["status"] == "unprovided" def test_interface_card_has_required_fields(): text = CARD.read_text() assert "id: audit-core/interface-card" in text assert "title:" in text assert "consumer:" in text assert "canon_surfaces:" in text assert "Evidence" in text assert "AuditRecord" in text assert "data.archive-unprovided" in text assert "no-rapp-yaml" in text def test_interface_card_validates_against_canon_schema(): if not SCHEMA.is_file(): pytest.skip("info-tech-canon interface-card schema not on disk") yaml = pytest.importorskip("yaml") jsonschema = pytest.importorskip("jsonschema") schema = yaml.safe_load(SCHEMA.read_text()) card = yaml.safe_load(CARD.read_text()) jsonschema.Draft202012Validator(schema).validate(card)