chore: 【ops】基础工单单元测试

This commit is contained in:
lzh
2026-01-09 17:42:24 +08:00
parent 47cbf6f1cc
commit 6be3e5b0e5

View File

@@ -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.*;
/**
* 工单服务测试
* <p>
* 测试内容:
* 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());
}
}