from __future__ import annotations import unittest from govoplan_core.core.modules import ( documentation_structured_translation_issues, localizable_documentation_metadata_keys, ) from govoplan_approvals.backend.manifest import manifest class ApprovalsInterfaceDocumentationContractTests(unittest.TestCase): def test_route_and_surfaces_remain_declared(self) -> None: frontend = manifest.frontend self.assertIsNotNone(frontend) self.assertEqual({"/approvals"}, {item.path for item in frontend.routes}) # type: ignore[union-attr] self.assertEqual( { "approvals.navigation", "approvals.workspace", "approvals.admin.templates", }, {item.id for item in frontend.view_surfaces}, # type: ignore[union-attr] ) def test_help_privacy_and_consequence_metadata_remain_published(self) -> None: topics = {topic.id: topic for topic in manifest.documentation} guide = topics["approvals.module-boundary"] reference = topics["approvals.reference.fields-and-consequences"] templates = topics["approvals.workflow.administer-templates"] self.assertIn("approvals.workspace", guide.metadata["help_contexts"]) self.assertGreaterEqual(len(guide.metadata["privacy_notes"]), 3) self.assertIn( "approvals.field.subject-digest", reference.metadata["help_contexts"] ) self.assertIn("create_request", reference.metadata["consequence_classes"]) self.assertIn("reject_request", reference.metadata["consequence_classes"]) self.assertIn("approvals.admin.templates", templates.metadata["help_contexts"]) def test_german_reference_documentation_is_complete(self) -> None: topics = manifest.documentation self.assertEqual(4, len(topics)) for topic in topics: translation = topic.translations.get("de", {}) self.assertTrue(translation.get("title"), topic.id) self.assertTrue(translation.get("summary"), topic.id) self.assertTrue(translation.get("body"), topic.id) if localizable_documentation_metadata_keys(topic): self.assertEqual("1", topic.structured_translation_version, topic.id) self.assertIn("de", topic.structured_translations, topic.id) self.assertEqual((), documentation_structured_translation_issues(topic)) kinds = {topic.metadata.get("kind") for topic in topics} self.assertIn("workflow", kinds) self.assertIn("reference", kinds) for topic in topics: if topic.metadata.get("kind") == "workflow" and "user" in topic.documentation_types: self.assertTrue(topic.conditions, topic.id) if __name__ == "__main__": unittest.main()