Files
govoplan-dataflow/tests/test_interface_documentation_contract.py
T
zemion 4d570b5e9e fix(ui): align contextual documentation with headings
Verified with the coordinated workspace changes by devkit full run
2026-09-08T225814-186389-0000-3e3ed7cd (all seven phases passed).
This shared UI pass does not mark the individual module reviews complete.
2026-09-09 02:03:41 +02:00

81 lines
3.2 KiB
Python

from __future__ import annotations
from pathlib import Path
import unittest
from govoplan_dataflow.backend.manifest import get_manifest
REPO_ROOT = Path(__file__).resolve().parents[1]
class DataflowInterfaceDocumentationContractTests(unittest.TestCase):
def test_backend_surfaces_and_hierarchy_remain_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(
{
"dataflow.page",
"dataflow.library",
"dataflow.graph",
"dataflow.sql",
"dataflow.inspector",
"dataflow.results",
"dataflow.decisions",
"dataflow.triggers",
"dataflow.runs",
"dataflow.widget.pipelines",
},
set(surfaces),
)
for surface_id in (
"dataflow.library",
"dataflow.graph",
"dataflow.sql",
"dataflow.inspector",
"dataflow.results",
"dataflow.triggers",
"dataflow.runs",
):
self.assertEqual("dataflow.page", surfaces[surface_id].parent_id)
self.assertEqual("dataflow.results", surfaces["dataflow.decisions"].parent_id)
def test_help_and_consequence_metadata_remain_published(self) -> None:
topics = {topic.id: topic for topic in get_manifest().documentation}
boundary = topics["dataflow.module-boundary"]
fields = topics["dataflow.reference.fields-and-consequences"]
nodes = topics["dataflow.reference.nodes-and-expressions"]
execution = topics["dataflow.execution-and-recovery"]
self.assertIn("dataflow.state.read-only", boundary.metadata["help_contexts"])
self.assertIn("dataflow.field.expression", nodes.metadata["help_contexts"])
self.assertIn("dataflow.action.review-decisions", nodes.metadata["help_contexts"])
self.assertIn("save_revision", fields.metadata["consequence_classes"])
self.assertIn("delete_pipeline", fields.metadata["consequence_classes"])
self.assertIn("record_decision", fields.metadata["consequence_classes"])
self.assertIn("publish_output", execution.metadata["consequence_classes"])
self.assertIn("promote_revision", execution.metadata["consequence_classes"])
def test_webui_uses_shared_help_guard_and_consequence_components(self) -> None:
page = (REPO_ROOT / "webui/src/features/dataflow/DataflowPage.tsx").read_text(
encoding="utf-8"
)
inspector = (
REPO_ROOT / "webui/src/features/dataflow/NodeInspector.tsx"
).read_text(encoding="utf-8")
for component in (
"ActionBlockerHint",
"titleHelp={<DocumentationHelpLink reference={DATAFLOW_DOCUMENTATION} />}",
"useUnsavedDraftGuard",
"ConfirmDialog",
):
self.assertIn(component, page)
self.assertIn("DATAFLOW_NODE_DOCUMENTATION", inspector)
self.assertNotIn("helpAction=", page)
if __name__ == "__main__":
unittest.main()