chore: 【ops】基础工单单元测试
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
package com.viewsh.module.ops.service.order;
|
package com.viewsh.module.ops.service.order;
|
||||||
|
|
||||||
import com.viewsh.framework.common.pojo.PageResult;
|
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.dto.*;
|
||||||
import com.viewsh.module.ops.dal.dataobject.workorder.OpsOrderDO;
|
import com.viewsh.module.ops.dal.dataobject.workorder.OpsOrderDO;
|
||||||
import com.viewsh.module.ops.dal.mysql.workorder.OpsOrderMapper;
|
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.BeforeEach;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
|
import org.mockito.Answers;
|
||||||
import org.mockito.InjectMocks;
|
import org.mockito.InjectMocks;
|
||||||
import org.mockito.Mock;
|
import org.mockito.Mock;
|
||||||
import org.mockito.junit.jupiter.MockitoExtension;
|
import org.mockito.junit.jupiter.MockitoExtension;
|
||||||
@@ -23,6 +25,11 @@ import static org.mockito.Mockito.*;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 工单服务测试
|
* 工单服务测试
|
||||||
|
* <p>
|
||||||
|
* 测试内容:
|
||||||
|
* 1. CRUD基础操作
|
||||||
|
* 2. 状态转换操作
|
||||||
|
* 3. 暂停/恢复/取消委托给 OrderLifecycleManager
|
||||||
*
|
*
|
||||||
* @author lzh
|
* @author lzh
|
||||||
*/
|
*/
|
||||||
@@ -32,9 +39,12 @@ public class OpsOrderServiceTest {
|
|||||||
@Mock
|
@Mock
|
||||||
private OpsOrderMapper opsOrderMapper;
|
private OpsOrderMapper opsOrderMapper;
|
||||||
|
|
||||||
@Mock
|
@Mock(answer = Answers.RETURNS_MOCKS)
|
||||||
private OrderStateMachine orderStateMachine;
|
private OrderStateMachine orderStateMachine;
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private OrderLifecycleManager orderLifecycleManager;
|
||||||
|
|
||||||
@InjectMocks
|
@InjectMocks
|
||||||
private OpsOrderServiceImpl opsOrderService;
|
private OpsOrderServiceImpl opsOrderService;
|
||||||
|
|
||||||
@@ -290,38 +300,50 @@ public class OpsOrderServiceTest {
|
|||||||
testOrder.setAssigneeId(2001L);
|
testOrder.setAssigneeId(2001L);
|
||||||
|
|
||||||
when(opsOrderMapper.selectById(1L)).thenReturn(testOrder);
|
when(opsOrderMapper.selectById(1L)).thenReturn(testOrder);
|
||||||
|
doNothing().when(orderLifecycleManager).pauseOrder(anyLong(), anyLong(), anyString());
|
||||||
|
|
||||||
// When
|
// When
|
||||||
assertDoesNotThrow(() -> opsOrderService.pauseOrder(1L, 2001L, "P0紧急工单插队"));
|
assertDoesNotThrow(() -> opsOrderService.pauseOrder(1L, 2001L, "P0紧急工单插队"));
|
||||||
|
|
||||||
// Then
|
// Then: 验证委托给 OrderLifecycleManager
|
||||||
verify(orderStateMachine, times(1)).transition(
|
verify(orderLifecycleManager, times(1)).pauseOrder(1L, 2001L, "P0紧急工单插队");
|
||||||
eq(testOrder),
|
// 不再直接调用 orderStateMachine
|
||||||
eq(WorkOrderStatusEnum.PAUSED),
|
verify(orderStateMachine, never()).transition(
|
||||||
eq(OperatorTypeEnum.CLEANER),
|
any(OpsOrderDO.class),
|
||||||
eq(2001L),
|
any(WorkOrderStatusEnum.class),
|
||||||
eq("P0紧急工单插队")
|
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
|
@Test
|
||||||
void testResumeOrder_Success() {
|
void testResumeOrder_Success() {
|
||||||
// Given
|
// Given
|
||||||
testOrder.setStatus(WorkOrderStatusEnum.PAUSED.getStatus());
|
testOrder.setStatus(WorkOrderStatusEnum.PAUSED.getStatus());
|
||||||
|
|
||||||
when(opsOrderMapper.selectById(1L)).thenReturn(testOrder);
|
when(opsOrderMapper.selectById(1L)).thenReturn(testOrder);
|
||||||
|
doNothing().when(orderLifecycleManager).resumeOrder(anyLong(), anyLong());
|
||||||
|
|
||||||
// When
|
// When
|
||||||
assertDoesNotThrow(() -> opsOrderService.resumeOrder(1L, 2001L));
|
assertDoesNotThrow(() -> opsOrderService.resumeOrder(1L, 2001L));
|
||||||
|
|
||||||
// Then
|
// Then: 验证委托给 OrderLifecycleManager
|
||||||
verify(orderStateMachine, times(1)).transition(
|
verify(orderLifecycleManager, times(1)).resumeOrder(1L, 2001L);
|
||||||
eq(testOrder),
|
|
||||||
eq(WorkOrderStatusEnum.ARRIVED),
|
|
||||||
eq(OperatorTypeEnum.CLEANER),
|
|
||||||
eq(2001L),
|
|
||||||
eq("恢复工单")
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -330,18 +352,13 @@ public class OpsOrderServiceTest {
|
|||||||
testOrder.setStatus(WorkOrderStatusEnum.PENDING.getStatus());
|
testOrder.setStatus(WorkOrderStatusEnum.PENDING.getStatus());
|
||||||
|
|
||||||
when(opsOrderMapper.selectById(1L)).thenReturn(testOrder);
|
when(opsOrderMapper.selectById(1L)).thenReturn(testOrder);
|
||||||
|
doNothing().when(orderLifecycleManager).cancelOrder(anyLong(), anyLong(), any(OperatorTypeEnum.class), anyString());
|
||||||
|
|
||||||
// When
|
// When
|
||||||
assertDoesNotThrow(() -> opsOrderService.cancelOrder(1L, "测试取消", OperatorTypeEnum.ADMIN, 1002L));
|
assertDoesNotThrow(() -> opsOrderService.cancelOrder(1L, "测试取消", OperatorTypeEnum.ADMIN, 1002L));
|
||||||
|
|
||||||
// Then
|
// Then: 验证委托给 OrderLifecycleManager
|
||||||
verify(orderStateMachine, times(1)).transition(
|
verify(orderLifecycleManager, times(1)).cancelOrder(1L, 1002L, OperatorTypeEnum.ADMIN, "测试取消");
|
||||||
eq(testOrder),
|
|
||||||
eq(WorkOrderStatusEnum.CANCELLED),
|
|
||||||
eq(OperatorTypeEnum.ADMIN),
|
|
||||||
eq(1002L),
|
|
||||||
eq("测试取消")
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -354,6 +371,8 @@ public class OpsOrderServiceTest {
|
|||||||
// When & Then
|
// When & Then
|
||||||
assertThrows(RuntimeException.class,
|
assertThrows(RuntimeException.class,
|
||||||
() -> opsOrderService.cancelOrder(1L, "测试取消", OperatorTypeEnum.ADMIN, 1002L));
|
() -> opsOrderService.cancelOrder(1L, "测试取消", OperatorTypeEnum.ADMIN, 1002L));
|
||||||
|
// 验证没有调用 OrderLifecycleManager
|
||||||
|
verify(orderLifecycleManager, never()).cancelOrder(anyLong(), anyLong(), any(OperatorTypeEnum.class), anyString());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user