from __future__ import annotations import unittest from govoplan_committee.backend.manifest import manifest class CommitteeInterfaceDocumentationContractTests(unittest.TestCase): def test_route_and_surfaces_remain_declared(self) -> None: frontend = manifest.frontend self.assertIsNotNone(frontend) self.assertEqual( {"/committee"}, {route.path for route in frontend.routes}, # type: ignore[union-attr] ) self.assertEqual( {"committee.navigation", "committee.workspace"}, {surface.id for surface in frontend.view_surfaces}, # type: ignore[union-attr] ) def test_topics_publish_help_privacy_and_consequence_metadata(self) -> None: topics = {topic.id: topic for topic in manifest.documentation} self.assertIn("committee.module-boundary", topics) self.assertIn("committee.reference.fields-and-consequences", topics) guide = topics["committee.module-boundary"] self.assertIn("committee.workspace", guide.metadata["help_contexts"]) self.assertGreaterEqual(len(guide.metadata["privacy_notes"]), 3) reference = topics["committee.reference.fields-and-consequences"] self.assertIn("committee.field.state", reference.metadata["help_contexts"]) self.assertIn("committee.action.finalize-ballot", reference.metadata["help_contexts"]) self.assertIn("change_lifecycle", reference.metadata["consequence_classes"]) self.assertIn("finalize_ballot", reference.metadata["consequence_classes"]) if __name__ == "__main__": unittest.main()