test(ft546): verify standard WCS end to end

This commit is contained in:
zgw
2026-08-12 08:27:40 +08:00
parent ceba465675
commit f66585f717
31 changed files with 2560 additions and 16 deletions

View File

@@ -1,23 +1,77 @@
package com.ruoyi.wcs.infrastructure.persistence.task;
import com.ruoyi.wcs.domain.task.TaskStepType;
import com.ruoyi.wcs.domain.task.TaskStepState;
import com.ruoyi.wcs.domain.task.TransportOrder;
import com.ruoyi.wcs.domain.task.TransportOrderExecution;
import com.ruoyi.wcs.domain.task.TransportOrderState;
import com.ruoyi.wcs.domain.task.TransportOrderType;
import com.ruoyi.wcs.domain.task.WorkflowDefinition;
import com.ruoyi.wcs.domain.task.WorkflowInstance;
import com.ruoyi.wcs.domain.task.WorkflowStepDefinition;
import com.ruoyi.wcs.port.out.TransportOrderExecutionRepository;
import org.junit.jupiter.api.Test;
import org.springframework.dao.OptimisticLockingFailureException;
import java.time.Instant;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
class MyBatisTransportOrderRepositoryTest {
@Test
void implementsTheOrderExecutionRepositoryContract() {
Object repository = new MyBatisTransportOrderRepository(
new RecordingMapper());
assertTrue(repository instanceof TransportOrderExecutionRepository);
}
@Test
void loadsAndOptimisticallySavesOrderAndWorkflowExecution() {
RecordingMapper mapper = new RecordingMapper();
TransportOrder order = order();
WorkflowInstance workflow = WorkflowInstance.create("WF-1", "ORDER-1",
new WorkflowDefinition(TransportOrderType.INBOUND,
Collections.singletonList(new WorkflowStepDefinition(
"MOVE", TaskStepType.MOVE, true, true,
Collections.<String>emptyList()))));
order.plan(workflow.getWorkflowId());
order.start();
workflow.readySteps().get(0).assign("VEH-1");
workflow.step("MOVE").start();
mapper.selected = TransportOrderRow.fromDomain(order);
mapper.selectedWorkflow = WorkflowRow.fromDomain(workflow);
mapper.selectedSteps = Collections.singletonList(
TaskStepRow.fromDomain(workflow.getWorkflowId(),
workflow.step("MOVE")));
Object candidate = new MyBatisTransportOrderRepository(mapper);
assertTrue(candidate instanceof TransportOrderExecutionRepository);
TransportOrderExecutionRepository repository =
(TransportOrderExecutionRepository) candidate;
TransportOrderExecution execution = repository.load("ORDER-1");
assertEquals(TransportOrderState.EXECUTING,
execution.getOrder().getState());
assertEquals(TaskStepState.RUNNING,
execution.getWorkflow().step("MOVE").getState());
execution.getWorkflow().step("MOVE").succeed();
execution.getOrder().complete();
repository.save(execution);
assertEquals(2L, mapper.expectedVersion);
assertEquals(3L, mapper.expectedStepVersion);
assertEquals(1, mapper.stepUpdates);
}
@Test
void rejectsAStateUpdateWhenThePersistedVersionChanged() {
RecordingMapper mapper = new RecordingMapper();
@@ -72,6 +126,12 @@ class MyBatisTransportOrderRepositoryTest {
private int workflowInserts;
private int stepInserts;
private int dependencyInserts;
private WorkflowRow selectedWorkflow;
private List<TaskStepRow> selectedSteps = Collections.emptyList();
private List<TaskDependencyRow> selectedDependencies =
Collections.emptyList();
private long expectedStepVersion = -1L;
private int stepUpdates;
@Override
public TransportOrderRow selectByExternalRequestId(String externalRequestId) {
@@ -112,5 +172,28 @@ class MyBatisTransportOrderRepositoryTest {
dependencyInserts++;
return 1;
}
@Override
public WorkflowRow selectWorkflowByOrderId(String orderId) {
return selectedWorkflow;
}
@Override
public List<TaskStepRow> selectTaskSteps(String workflowId) {
return selectedSteps;
}
@Override
public List<TaskDependencyRow> selectTaskDependencies(
String workflowId) {
return selectedDependencies;
}
@Override
public int updateTaskStep(TaskStepRow row, long expectedVersion) {
expectedStepVersion = expectedVersion;
stepUpdates++;
return 1;
}
}
}

View File

@@ -29,5 +29,9 @@ class TransportOrderMapperXmlTest {
assertTrue(configuration.hasStatement(namespace + "insertWorkflow"));
assertTrue(configuration.hasStatement(namespace + "insertTaskStep"));
assertTrue(configuration.hasStatement(namespace + "insertTaskDependency"));
assertTrue(configuration.hasStatement(namespace + "selectWorkflowByOrderId"));
assertTrue(configuration.hasStatement(namespace + "selectTaskSteps"));
assertTrue(configuration.hasStatement(namespace + "selectTaskDependencies"));
assertTrue(configuration.hasStatement(namespace + "updateTaskStep"));
}
}