from __future__ import annotations import json import unittest from pathlib import Path from app.automation import get_node_definitions from app.schemas import AutomationWorkflowSaveRequest class WorkflowNodeRegistryTest(unittest.TestCase): def test_registered_nodes_have_chinese_descriptions(self) -> None: for definition in get_node_definitions(): self.assertTrue(definition.get("description"), definition["type"]) self.assertTrue(definition.get("label"), definition["type"]) def test_reliability_and_console_nodes_are_registered(self) -> None: definitions = {item["type"]: item for item in get_node_definitions()} for node_type in [ "browser.ensure_foreground", "browser.control", "media.control", "vision.verify_page", "vision.click_target", "vision.close_popups", ]: self.assertIn(node_type, definitions) def test_all_checked_in_workflows_match_schema(self) -> None: workflow_dir = Path(__file__).resolve().parents[2] / "workflows" paths = sorted(workflow_dir.glob("*.workflow.json")) self.assertGreater(len(paths), 0) for path in paths: AutomationWorkflowSaveRequest.model_validate(json.loads(path.read_text(encoding="utf-8"))) if __name__ == "__main__": unittest.main()