test: add unit tests for OrderStateMachine

This commit is contained in:
lzh
2026-01-20 18:02:35 +08:00
parent 50452bec00
commit e96773daf7

View File

@@ -1,5 +1,6 @@
package com.viewsh.module.ops.service.fsm;
import com.viewsh.module.ops.core.event.OrderEventPublisher;
import com.viewsh.module.ops.dal.dataobject.workorder.OpsOrderDO;
import com.viewsh.module.ops.dal.mysql.workorder.OpsOrderMapper;
import com.viewsh.module.ops.enums.OperatorTypeEnum;
@@ -34,6 +35,9 @@ public class OrderStateMachineTest {
@Mock
private OpsOrderEventService eventService;
@Mock
private OrderEventPublisher eventPublisher;
private OpsOrderDO testOrder;
@BeforeEach
@@ -227,9 +231,10 @@ public class OrderStateMachineTest {
// Then
assertNotNull(allowedTransitions);
assertEquals(2, allowedTransitions.size());
assertEquals(3, allowedTransitions.size());
assertTrue(allowedTransitions.contains(WorkOrderStatusEnum.DISPATCHED));
assertTrue(allowedTransitions.contains(WorkOrderStatusEnum.CANCELLED));
assertTrue(allowedTransitions.contains(WorkOrderStatusEnum.QUEUED));
}
@Test
@@ -245,4 +250,28 @@ public class OrderStateMachineTest {
assertTrue(allowedTransitions.isEmpty()); // 终态,无后续转换
}
@Test
void testTransition_SameStatus_NoOp() {
// Given
testOrder.setStatus(WorkOrderStatusEnum.PENDING.getStatus());
// When
assertDoesNotThrow(() -> {
orderStateMachine.transition(
testOrder,
WorkOrderStatusEnum.PENDING,
OperatorTypeEnum.SYSTEM,
null,
"重复操作"
);
});
// Then
// 验证没有任何数据库或事件操作被触发
verify(opsOrderMapper, never()).updateById((OpsOrderDO) any());
verify(eventService, never()).recordEvent(
anyLong(), anyString(), anyString(), anyString(), anyString(), any(), anyString()
);
verify(eventPublisher, never()).publishStateChanged(any());
}
}