From 6be3e5b0e560cdc86da5feb55a18017f56961a0b Mon Sep 17 00:00:00 2001 From: lzh Date: Fri, 9 Jan 2026 17:42:24 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20=E3=80=90ops=E3=80=91=E5=9F=BA?= =?UTF-8?q?=E7=A1=80=E5=B7=A5=E5=8D=95=E5=8D=95=E5=85=83=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/order/OpsOrderServiceTest.java | 67 ++++++++++++------- 1 file changed, 43 insertions(+), 24 deletions(-) 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()); } }