diff --git a/viewsh-module-ops/viewsh-module-ops-biz/src/test/java/com/viewsh/module/ops/service/order/OpsOrderServiceTest.java b/viewsh-module-ops/viewsh-module-ops-biz/src/test/java/com/viewsh/module/ops/service/order/OpsOrderServiceTest.java index c003a8e..e84e8ad 100644 --- a/viewsh-module-ops/viewsh-module-ops-biz/src/test/java/com/viewsh/module/ops/service/order/OpsOrderServiceTest.java +++ b/viewsh-module-ops/viewsh-module-ops-biz/src/test/java/com/viewsh/module/ops/service/order/OpsOrderServiceTest.java @@ -1,6 +1,7 @@ package com.viewsh.module.ops.service.order; import com.viewsh.framework.common.pojo.PageResult; +import com.viewsh.module.ops.core.lifecycle.OrderLifecycleManager; import com.viewsh.module.ops.dal.dataobject.dto.*; import com.viewsh.module.ops.dal.dataobject.workorder.OpsOrderDO; import com.viewsh.module.ops.dal.mysql.workorder.OpsOrderMapper; @@ -11,6 +12,7 @@ import com.viewsh.module.ops.service.fsm.OrderStateMachine; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Answers; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; @@ -23,6 +25,11 @@ import static org.mockito.Mockito.*; /** * 工单服务测试 + *

+ * 测试内容: + * 1. CRUD基础操作 + * 2. 状态转换操作 + * 3. 暂停/恢复/取消委托给 OrderLifecycleManager * * @author lzh */ @@ -32,9 +39,12 @@ public class OpsOrderServiceTest { @Mock private OpsOrderMapper opsOrderMapper; - @Mock + @Mock(answer = Answers.RETURNS_MOCKS) private OrderStateMachine orderStateMachine; + @Mock + private OrderLifecycleManager orderLifecycleManager; + @InjectMocks private OpsOrderServiceImpl opsOrderService; @@ -290,38 +300,50 @@ public class OpsOrderServiceTest { testOrder.setAssigneeId(2001L); when(opsOrderMapper.selectById(1L)).thenReturn(testOrder); + doNothing().when(orderLifecycleManager).pauseOrder(anyLong(), anyLong(), anyString()); // When assertDoesNotThrow(() -> opsOrderService.pauseOrder(1L, 2001L, "P0紧急工单插队")); - // Then - verify(orderStateMachine, times(1)).transition( - eq(testOrder), - eq(WorkOrderStatusEnum.PAUSED), - eq(OperatorTypeEnum.CLEANER), - eq(2001L), - eq("P0紧急工单插队") + // Then: 验证委托给 OrderLifecycleManager + verify(orderLifecycleManager, times(1)).pauseOrder(1L, 2001L, "P0紧急工单插队"); + // 不再直接调用 orderStateMachine + verify(orderStateMachine, never()).transition( + any(OpsOrderDO.class), + any(WorkOrderStatusEnum.class), + any(OperatorTypeEnum.class), + anyLong(), + anyString() ); } + @Test + void testPauseOrder_WrongAssignee_ThrowsException() { + // Given + testOrder.setStatus(WorkOrderStatusEnum.ARRIVED.getStatus()); + testOrder.setAssigneeId(2001L); // 分配给张师傅 + + when(opsOrderMapper.selectById(1L)).thenReturn(testOrder); + + // When & Then: 李师傅尝试暂停 + assertThrows(RuntimeException.class, () -> opsOrderService.pauseOrder(1L, 2002L, "测试暂停")); + // 验证没有调用 OrderLifecycleManager + verify(orderLifecycleManager, never()).pauseOrder(anyLong(), anyLong(), anyString()); + } + @Test void testResumeOrder_Success() { // Given testOrder.setStatus(WorkOrderStatusEnum.PAUSED.getStatus()); when(opsOrderMapper.selectById(1L)).thenReturn(testOrder); + doNothing().when(orderLifecycleManager).resumeOrder(anyLong(), anyLong()); // When assertDoesNotThrow(() -> opsOrderService.resumeOrder(1L, 2001L)); - // Then - verify(orderStateMachine, times(1)).transition( - eq(testOrder), - eq(WorkOrderStatusEnum.ARRIVED), - eq(OperatorTypeEnum.CLEANER), - eq(2001L), - eq("恢复工单") - ); + // Then: 验证委托给 OrderLifecycleManager + verify(orderLifecycleManager, times(1)).resumeOrder(1L, 2001L); } @Test @@ -330,18 +352,13 @@ public class OpsOrderServiceTest { testOrder.setStatus(WorkOrderStatusEnum.PENDING.getStatus()); when(opsOrderMapper.selectById(1L)).thenReturn(testOrder); + doNothing().when(orderLifecycleManager).cancelOrder(anyLong(), anyLong(), any(OperatorTypeEnum.class), anyString()); // When assertDoesNotThrow(() -> opsOrderService.cancelOrder(1L, "测试取消", OperatorTypeEnum.ADMIN, 1002L)); - // Then - verify(orderStateMachine, times(1)).transition( - eq(testOrder), - eq(WorkOrderStatusEnum.CANCELLED), - eq(OperatorTypeEnum.ADMIN), - eq(1002L), - eq("测试取消") - ); + // Then: 验证委托给 OrderLifecycleManager + verify(orderLifecycleManager, times(1)).cancelOrder(1L, 1002L, OperatorTypeEnum.ADMIN, "测试取消"); } @Test @@ -354,6 +371,8 @@ public class OpsOrderServiceTest { // When & Then assertThrows(RuntimeException.class, () -> opsOrderService.cancelOrder(1L, "测试取消", OperatorTypeEnum.ADMIN, 1002L)); + // 验证没有调用 OrderLifecycleManager + verify(orderLifecycleManager, never()).cancelOrder(anyLong(), anyLong(), any(OperatorTypeEnum.class), anyString()); } }