Postgres now reports custody_class=operational with a cited 30-day recoverable window. Join ITC-CAP operations.audit at D4, publish the interface card, and overlay user-engine tenants [*] from Git so an ExternalSecret refresh cannot shrink it.
65 lines
2.6 KiB
Python
65 lines
2.6 KiB
Python
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)
|
|
|
|
|
|
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)
|