from __future__ import annotations from pathlib import Path import unittest from govoplan_dashboard.backend.manifest import get_manifest REPO_ROOT = Path(__file__).resolve().parents[1] class DashboardInterfaceDocumentationContractTests(unittest.TestCase): def test_surface_hierarchy_remains_declared(self) -> None: frontend = get_manifest().frontend self.assertIsNotNone(frontend) surfaces = {item.id: item for item in frontend.view_surfaces} # type: ignore[union-attr] self.assertEqual( { "dashboard.page", "dashboard.summary", "dashboard.library", "dashboard.grid", "dashboard.widget-settings", "dashboard.widget.installed-modules", }, set(surfaces), ) self.assertEqual("dashboard.page", surfaces["dashboard.library"].parent_id) self.assertEqual("dashboard.page", surfaces["dashboard.grid"].parent_id) self.assertEqual("dashboard.grid", surfaces["dashboard.widget-settings"].parent_id) def test_help_and_consequence_metadata_remain_published(self) -> None: topics = {topic.id: topic for topic in get_manifest().documentation} home = topics["dashboard.configurable-home"] reference = topics["dashboard.reference.layout-and-widgets"] self.assertIn("dashboard.state.browser-fallback", home.metadata["help_contexts"]) self.assertIn("dashboard.field.widget-size", reference.metadata["help_contexts"]) self.assertIn("save_layout", reference.metadata["consequence_classes"]) self.assertIn("remove_widget", reference.metadata["consequence_classes"]) def test_webui_guards_layout_and_nested_widget_drafts(self) -> None: page = (REPO_ROOT / "webui/src/features/dashboard/DashboardPage.tsx").read_text( encoding="utf-8" ) dialog = ( REPO_ROOT / "webui/src/features/dashboard/WidgetConfigurationDialog.tsx" ).read_text(encoding="utf-8") library = ( REPO_ROOT / "webui/src/features/dashboard/WidgetLibrary.tsx" ).read_text(encoding="utf-8") self.assertIn("DocumentationHelpLink", page) self.assertIn("useUnsavedDraftGuard", page) self.assertIn("useUnsavedDraftGuard", dialog) self.assertIn("DASHBOARD_LAYOUT_DOCUMENTATION", dialog) self.assertIn("disabled={atCapacity}", library) if __name__ == "__main__": unittest.main()