test_work_center_contract.py 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. from pathlib import Path
  2. from app.core.system.permissions import (
  3. WORK_CENTER_MANAGE,
  4. WORK_CENTER_OPERATE,
  5. WORK_CENTER_READ,
  6. permission_for_request,
  7. permissions_for_roles,
  8. )
  9. ROOT = Path(__file__).resolve().parents[1]
  10. def test_work_center_migration_is_versioned_audited_and_non_destructive():
  11. migration = (
  12. ROOT / "migrations/versions/20260802_430_unified_work_center.py"
  13. ).read_text(encoding="utf-8")
  14. assert 'revision = "20260802_430"' in migration
  15. assert 'down_revision = "20260801_420"' in migration
  16. for table in (
  17. "governance_workflows",
  18. "governance_workflow_versions",
  19. "governance_tasks",
  20. "governance_task_participants",
  21. "governance_task_reviews",
  22. "governance_task_comments",
  23. "governance_task_attachments",
  24. "governance_task_events",
  25. "governance_notification_templates",
  26. "governance_notification_preferences",
  27. "governance_notifications",
  28. "governance_notification_attempts",
  29. ):
  30. assert f"CREATE TABLE public.{table}" in migration
  31. assert "uq_governance_task_active_source" in migration
  32. assert "source_state_unchanged" in migration
  33. assert "raise RuntimeError" in migration
  34. assert "DROP TABLE" not in migration.upper()
  35. def test_work_center_permissions_separate_read_operate_and_manage():
  36. assert WORK_CENTER_READ in permissions_for_roles(["viewer"])
  37. assert WORK_CENTER_OPERATE not in permissions_for_roles(["viewer"])
  38. assert WORK_CENTER_OPERATE in permissions_for_roles(["editor"])
  39. assert WORK_CENTER_MANAGE not in permissions_for_roles(["editor"])
  40. assert WORK_CENTER_MANAGE in permissions_for_roles(["admin"])
  41. assert permission_for_request("/api/system/work-center/tasks", "GET") == (
  42. WORK_CENTER_READ,
  43. )
  44. assert permission_for_request("/api/system/work-center/tasks/x/review", "POST") == (
  45. WORK_CENTER_OPERATE,
  46. )
  47. assert permission_for_request("/api/system/work-center/workflows", "POST") == (
  48. WORK_CENTER_MANAGE,
  49. )
  50. def test_work_center_api_and_frontend_expose_the_complete_operator_surface():
  51. api = (ROOT / "app/api/system/work_center.py").read_text(encoding="utf-8")
  52. client = (ROOT / "frontend/src/api/workCenter.js").read_text(encoding="utf-8")
  53. view = (
  54. ROOT / "frontend/src/views/dataReview/workCenter.vue"
  55. ).read_text(encoding="utf-8")
  56. routes = (ROOT / "frontend/src/router/routes.js").read_text(encoding="utf-8")
  57. home = (ROOT / "frontend/src/views/home/index.vue").read_text(encoding="utf-8")
  58. for path in (
  59. "/work-center/workflows",
  60. "/work-center/tasks",
  61. "/comments",
  62. "/attachments",
  63. "/work-center/notifications",
  64. "/work-center/templates",
  65. "/work-center/preferences",
  66. "/work-center/dashboard",
  67. ):
  68. assert path in api
  69. for operation in (
  70. "listWorkCenterTasks",
  71. "getWorkCenterTask",
  72. "reviewWorkCenterTask",
  73. "transferWorkCenterTask",
  74. "closeWorkCenterTask",
  75. "reopenWorkCenterTask",
  76. "addWorkCenterComment",
  77. "addWorkCenterAttachment",
  78. "listWorkCenterNotifications",
  79. "getWorkCenterDashboard",
  80. ):
  81. assert operation in client
  82. assert "统一工作中心" in view
  83. assert "质量问题" in view
  84. assert "术语标准" in view
  85. assert "数据产品" in view
  86. assert "Agent 审批" in view
  87. assert "逾期待办" in view
  88. assert "/dataReview/work-center" in routes
  89. assert "getWorkCenterDashboard" in home