chore: 【ops】基础工单单元测试
This commit is contained in:
@@ -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());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user