from __future__ import annotations import unittest from govoplan_tenancy.backend.manifest import manifest class TenancyInterfaceDocumentationContractTests(unittest.TestCase): def test_all_static_topics_have_complete_german_content(self) -> None: for topic in manifest.documentation: german = (topic.translations or {}).get("de", {}) self.assertEqual({"title", "summary", "body"}, set(german), topic.id) self.assertTrue( all(str(value).strip() for value in german.values()), topic.id ) def test_tenancy_admin_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( { "tenancy.admin.system-tenants", "tenancy.admin.tenant-settings", }, surfaces, ) def test_tenancy_topics_publish_stable_help_contexts(self) -> None: topics = {topic.id: topic for topic in manifest.documentation} self.assertIn("tenancy.current-context", topics) self.assertIn("tenancy.lifecycle-and-settings", topics) self.assertIn("tenancy.reference.admin-fields", topics) lifecycle_contexts = set( topics["tenancy.lifecycle-and-settings"].metadata["help_contexts"] ) self.assertIn("tenancy.admin.system-tenants", lifecycle_contexts) self.assertIn("tenancy.admin.tenant-settings", lifecycle_contexts) self.assertEqual( "workflow", topics["tenancy.lifecycle-and-settings"].metadata["kind"] ) self.assertIn( "tenancy.action.suspend", topics["tenancy.reference.admin-fields"].metadata["help_contexts"], ) if __name__ == "__main__": unittest.main()