from __future__ import annotations import pathlib import tomllib import unittest from govoplan_core.core.policy import ( CAPABILITY_POLICY_DEFINITION_GOVERNANCE, CAPABILITY_POLICY_FUNCTION_ASSIGNMENT_GOVERNANCE, CAPABILITY_POLICY_PRIVACY_RETENTION, CAPABILITY_POLICY_SCHEDULING_PARTICIPANT_PRIVACY, CAPABILITY_POLICY_VIEW_GOVERNANCE, ) from govoplan_core.core.distribution_lists import ( CAPABILITY_POLICY_DISTRIBUTION_CHANNELS, ) from govoplan_core.core.reporting import CAPABILITY_POLICY_REPORTING_GOVERNANCE from govoplan_policy.backend.manifest import manifest ROOT = pathlib.Path(__file__).resolve().parents[1] class PolicyModuleContractTests(unittest.TestCase): def test_policy_package_does_not_hard_require_access(self) -> None: project = tomllib.loads((ROOT / "pyproject.toml").read_text(encoding="utf-8"))[ "project" ] dependencies = tuple(project["dependencies"]) self.assertTrue( any(item.startswith("govoplan-core>=") for item in dependencies) ) self.assertFalse( any(item.startswith("govoplan-access") for item in dependencies) ) def test_policy_source_does_not_import_access_implementation(self) -> None: offenders: list[str] = [] for path in (ROOT / "src" / "govoplan_policy").rglob("*.py"): source = path.read_text(encoding="utf-8") if "govoplan_access" in source: offenders.append(str(path.relative_to(ROOT))) self.assertEqual([], offenders) def test_policy_manifest_exposes_policy_capabilities(self) -> None: self.assertEqual( { CAPABILITY_POLICY_DEFINITION_GOVERNANCE, CAPABILITY_POLICY_DISTRIBUTION_CHANNELS, CAPABILITY_POLICY_FUNCTION_ASSIGNMENT_GOVERNANCE, CAPABILITY_POLICY_PRIVACY_RETENTION, CAPABILITY_POLICY_REPORTING_GOVERNANCE, CAPABILITY_POLICY_SCHEDULING_PARTICIPANT_PRIVACY, CAPABILITY_POLICY_VIEW_GOVERNANCE, }, set(manifest.capability_factories), ) def test_retention_documentation_exposes_stable_help_contexts(self) -> None: topic = next( item for item in manifest.documentation if item.id == "policy.hierarchy-overrides-and-retention" ) self.assertEqual( ["policy.retention", "privacy.retention"], topic.metadata["help_contexts"], ) self.assertEqual("workflow", topic.metadata["kind"]) self.assertIn("/admin", topic.metadata["route"]) def test_view_policy_administration_contract_is_documented_and_exposed(self) -> None: topic = next( item for item in manifest.documentation if item.id == "policy.view-governance-administration" ) self.assertIn("policy.view-governance", topic.metadata["help_contexts"]) self.assertEqual( { "policy.admin.system-view-policy", "policy.admin.tenant-view-policy", "policy.admin.group-view-policy", "policy.admin.user-view-policy", }, { surface.id for surface in manifest.frontend.view_surfaces if "view-policy" in surface.id }, ) if __name__ == "__main__": unittest.main()