from __future__ import annotations import unittest from govoplan_idm.backend.manifest import manifest class IdmInterfaceDocumentationContractTests(unittest.TestCase): def test_route_and_contributed_action_remain_declared(self) -> None: frontend = manifest.frontend self.assertIsNotNone(frontend) self.assertEqual( {"/idm"}, {route.path for route in frontend.routes}, # type: ignore[union-attr] ) self.assertEqual( {"idm.action.view-function-assignments"}, {surface.id for surface in frontend.view_surfaces}, # type: ignore[union-attr] ) self.assertTrue(all(item.icon == "users" for item in manifest.nav_items)) def test_topics_publish_workflow_blocker_and_consequence_metadata(self) -> None: topics = {topic.id: topic for topic in manifest.documentation} self.assertIn("idm.workflow.assign-function-to-identity", topics) self.assertIn("idm.reference.assignment-governance", topics) self.assertIn("idm.reference.fields-and-consequences", topics) workflow = topics["idm.workflow.assign-function-to-identity"] self.assertIn("idm.blocker.permission", workflow.metadata["help_contexts"]) governance = topics["idm.reference.assignment-governance"] self.assertIn("function_decision", governance.metadata["consequence_classes"]) reference = topics["idm.reference.fields-and-consequences"] self.assertIn("idm.field.acting-for", reference.metadata["help_contexts"]) self.assertIn("deactivate_or_expire", reference.metadata["consequence_classes"]) if __name__ == "__main__": unittest.main()