from __future__ import annotations import unittest from govoplan_core.core.information_governance import ( InformationGovernanceDeclarationError, InformationGovernanceDimension, ModuleInformationGovernance, information_governance_from_mapping, information_governance_maturity_issues, ) class InformationGovernanceTests(unittest.TestCase): def test_default_applies_contract_without_claiming_enforcement(self) -> None: declaration = ModuleInformationGovernance() self.assertTrue(declaration.current_authorization_for_historical_reads) self.assertEqual( {"contract_only"}, {item.adoption for item in declaration.dimensions.values()}, ) self.assertEqual("1", declaration.to_dict()["contract_version"]) def test_enforced_adoption_requires_evidence(self) -> None: with self.assertRaisesRegex( InformationGovernanceDeclarationError, "requires evidence", ): InformationGovernanceDimension(adoption="enforced") with self.assertRaisesRegex( InformationGovernanceDeclarationError, "covered object types", ): InformationGovernanceDimension( adoption="enforced", evidence=("tests/test_information_governance.py",), ) def test_catalog_shape_round_trips(self) -> None: declaration = ModuleInformationGovernance() self.assertEqual( declaration, information_governance_from_mapping(declaration.to_dict()), ) def test_reference_ready_rejects_unproved_dimensions(self) -> None: issues = information_governance_maturity_issues( ModuleInformationGovernance(), maturity="reference_ready", ) self.assertEqual(1, len(issues)) self.assertIn("temporal_browsing", issues[0]) self.assertIn("purpose_aware_access", issues[0]) self.assertEqual( (), information_governance_maturity_issues( ModuleInformationGovernance(), maturity="vertical_slice", ), ) if __name__ == "__main__": unittest.main()