From e96773daf7ea6256d999a649c0f81e861e9bf0ec Mon Sep 17 00:00:00 2001 From: lzh Date: Tue, 20 Jan 2026 18:02:35 +0800 Subject: [PATCH] test: add unit tests for OrderStateMachine --- .../service/fsm/OrderStateMachineTest.java | 31 ++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/viewsh-module-ops/viewsh-module-ops-biz/src/test/java/com/viewsh/module/ops/service/fsm/OrderStateMachineTest.java b/viewsh-module-ops/viewsh-module-ops-biz/src/test/java/com/viewsh/module/ops/service/fsm/OrderStateMachineTest.java index 030531f..62b5d6d 100644 --- a/viewsh-module-ops/viewsh-module-ops-biz/src/test/java/com/viewsh/module/ops/service/fsm/OrderStateMachineTest.java +++ b/viewsh-module-ops/viewsh-module-ops-biz/src/test/java/com/viewsh/module/ops/service/fsm/OrderStateMachineTest.java @@ -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()); + } }