from __future__ import annotations import unittest from govoplan_views.backend.manifest import manifest class ViewsInterfaceDocumentationContractTests(unittest.TestCase): def test_views_surfaces_remain_declared(self) -> None: frontend = manifest.frontend self.assertIsNotNone(frontend) surfaces = {surface.id for surface in frontend.view_surfaces} # type: ignore[union-attr] self.assertEqual( { "views.selector", "views.admin.system", "views.admin.tenant", "views.settings.personal", }, surfaces, ) def test_views_topics_publish_stable_help_contexts(self) -> None: topics = {topic.id: topic for topic in manifest.documentation} self.assertIn("views.interface-projections", topics) self.assertIn("views.reference.fields-and-consequences", topics) projection_contexts = set( topics["views.interface-projections"].metadata["help_contexts"] ) self.assertIn("views.selector", projection_contexts) self.assertIn("views.admin.system", projection_contexts) self.assertIn("views.admin.tenant", projection_contexts) self.assertIn("views.settings.personal", projection_contexts) reference = topics["views.reference.fields-and-consequences"] self.assertIn("views.action.publish", reference.metadata["help_contexts"]) self.assertIn("required", reference.metadata["consequence_classes"]) self.assertTrue( all( all( topic.translations.get("de", {}).get(field) for field in ("title", "summary", "body") ) for topic in topics.values() ) ) workflow = topics["views.interface-projections"] self.assertEqual("workflow", workflow.metadata["kind"]) self.assertTrue(workflow.conditions) self.assertTrue( all( condition.required_scopes or condition.any_scopes for condition in workflow.conditions ) ) self.assertEqual("reference", reference.metadata["kind"]) self.assertIn("shared navigation editor", workflow.body) self.assertIn("gemeinsamen Navigationseditor", workflow.translations["de"]["body"]) self.assertIn("Views cannot create navigation", reference.body) self.assertIn("keine Navigationssperren", reference.translations["de"]["body"]) if __name__ == "__main__": unittest.main()