test(ft546): verify standard WCS end to end
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user