69 lines
2.2 KiB
Python
69 lines
2.2 KiB
Python
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()
|