test_video_workflows.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. from __future__ import annotations
  2. import json
  3. import unittest
  4. from pathlib import Path
  5. from app.automation import get_node_definitions
  6. from app.schemas import AutomationWorkflowSaveRequest
  7. VIDEO_WORKFLOW_KEYS = {
  8. "youtube-home-random-video",
  9. "youtube-channel-latest-video",
  10. "bilibili-home-random-video",
  11. "bilibili-up-latest-video",
  12. "douyin-random-video",
  13. "douyin-next-video",
  14. }
  15. class VideoWorkflowTemplateTest(unittest.TestCase):
  16. def test_video_action_node_is_registered(self) -> None:
  17. definitions = {item["type"]: item for item in get_node_definitions()}
  18. self.assertIn("browser.video_action", definitions)
  19. self.assertIn("vision.locate_element", definitions)
  20. self.assertEqual(
  21. definitions["browser.video_action"]["params"]["action"]["options"],
  22. [
  23. "youtube_home_random",
  24. "youtube_channel_latest",
  25. "bilibili_home_random",
  26. "bilibili_up_latest",
  27. "douyin_random",
  28. "douyin_next",
  29. ],
  30. )
  31. def test_video_workflow_templates_match_schema(self) -> None:
  32. workflow_dir = Path(__file__).resolve().parents[2] / "workflows"
  33. checked_keys = set()
  34. for path in workflow_dir.glob("*.workflow.json"):
  35. raw = json.loads(path.read_text(encoding="utf-8"))
  36. if raw.get("workflow_key") not in VIDEO_WORKFLOW_KEYS:
  37. continue
  38. workflow = AutomationWorkflowSaveRequest.model_validate(raw)
  39. checked_keys.add(str(workflow.workflow_key))
  40. # 视频模板使用真实页面截图定位,再把坐标交给鼠标节点点击。
  41. self.assertTrue(any(node.type == "vision.locate_element" for node in workflow.nodes))
  42. self.assertTrue(any(node.type == "mouse.click" for node in workflow.nodes))
  43. self.assertEqual(workflow.settings.get("return"), {"node_id": "locate"})
  44. self.assertEqual(checked_keys, VIDEO_WORKFLOW_KEYS)
  45. if __name__ == "__main__":
  46. unittest.main()