76 lines
2.8 KiB
Python
76 lines
2.8 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.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)
|
|
|
|
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("save_revision", fields.metadata["consequence_classes"])
|
|
self.assertIn("delete_pipeline", 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",
|
|
"DocumentationHelpLink",
|
|
"useUnsavedDraftGuard",
|
|
"ConfirmDialog",
|
|
):
|
|
self.assertIn(component, page)
|
|
self.assertIn("DATAFLOW_NODE_DOCUMENTATION", inspector)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|