work_orders.spec.ts 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import { assertEquals } from "https://deno.land/std/testing/asserts.ts";
  2. import { createMockContext } from "../../test/mock_context.ts";
  3. import * as workOrders from "../../server/controllers/workOrders.ts";
  4. import { WorkflowEngine } from "../../server/utils/workflow_engine.ts";
  5. // Mock WorkflowEngine
  6. class MockWorkflowEngine extends WorkflowEngine {
  7. async canTransition(from: string, to: string, roles: string[]) {
  8. return true;
  9. }
  10. async logStatusChange(
  11. workOrderId: number,
  12. fromStatus: string,
  13. toStatus: string,
  14. userId: number,
  15. comment?: string
  16. ) {}
  17. async checkTimeout(workOrderId: number) {}
  18. }
  19. Deno.test("changeWorkOrderStatus - 成功变更状态", async () => {
  20. const mockContext = createMockContext({
  21. params: { id: "1" },
  22. json: { status: "in_progress", comment: "测试" },
  23. user: { id: 1, roles: "admin" }
  24. });
  25. // 替换为mock工作流引擎
  26. const originalEngine = workOrders.WorkflowEngine;
  27. workOrders.WorkflowEngine = MockWorkflowEngine;
  28. try {
  29. await workOrders.changeWorkOrderStatus(mockContext);
  30. assertEquals(mockContext.response.status, 200);
  31. } finally {
  32. workOrders.WorkflowEngine = originalEngine;
  33. }
  34. });
  35. Deno.test("changeWorkOrderStatus - 无效状态流转", async () => {
  36. const mockContext = createMockContext({
  37. params: { id: "1" },
  38. json: { status: "invalid_status" },
  39. user: { id: 1, roles: "admin" }
  40. });
  41. // 自定义mock返回false
  42. const originalEngine = workOrders.WorkflowEngine;
  43. workOrders.WorkflowEngine = class extends MockWorkflowEngine {
  44. async canTransition() {
  45. return false;
  46. }
  47. };
  48. try {
  49. await workOrders.changeWorkOrderStatus(mockContext);
  50. assertEquals(mockContext.response.status, 403);
  51. } finally {
  52. workOrders.WorkflowEngine = originalEngine;
  53. }
  54. });
  55. Deno.test("getWorkOrderStatusHistory - 成功获取历史", async () => {
  56. const mockContext = createMockContext({
  57. params: { id: "1" }
  58. });
  59. await workOrders.getWorkOrderStatusHistory(mockContext);
  60. assertEquals(mockContext.response.status, 200);
  61. });