from kings_guard.contracts import PostureLevel, SecurityGenome, as_jsonable from kings_guard.posture import PostureEvaluator from helpers import load_pilot, observation_from_fixture def test_qonto_fixture_loads_a_normalized_genome() -> None: fixture = load_pilot() assert isinstance(fixture.genome, SecurityGenome) assert fixture.genome.genome_id == "kg:genome:qonto-assistant" assert fixture.genome.tenant_id == "binky" assert "finance.qonto.read" in fixture.genome.permitted_capabilities assert fixture.normalization_hints["identity_binding"] == "self_asserted" def test_qonto_audit_event_normalizes_to_immune_observation() -> None: observation = observation_from_fixture() assert observation.source_system == "qonto-assistant" assert observation.capability == "finance.qonto.read" assert observation.resource_scope == "org_summary" assert observation.protocol == "mcp" assert observation.decision.value == "deny" assert observation.deny_reason == "credential_exfil" def test_posture_evaluation_is_jsonable() -> None: fixture = load_pilot() observation = observation_from_fixture(fixture) evaluation = PostureEvaluator().evaluate(fixture.genome, observation) payload = as_jsonable(evaluation) assert payload["assessment"]["posture"] == PostureLevel.INFLAMED.value assert payload["signals"][0]["signal_kind"] == "posture_hint" assert payload["assessment"]["stream_completeness"] == "unknown"