Merge origin/dev into test preserving warehouse and PDA workflows
This commit is contained in:
+17
-1
@@ -15,7 +15,7 @@ class DispatchCandidateMapperContractTest {
|
||||
"planNo", "orderType", "volumeWeightKg", "containerNo", "appointmentAt", "expectedLoadingAt",
|
||||
"overseasWarehouseId", "overseasWarehouseName", "orderNo", "orderRefs", "inboundCode", "palletNo",
|
||||
"destinationWarehouseId", "destinationWarehouseCode", "destinationWarehouseName", "fbaWarehouseCode",
|
||||
"packageCount", "volumeCbm", "sourceStage", "cartonMarks"
|
||||
"packageCount", "volumeCbm", "sourceStage", "cartonMarks", "relabelCartonMarks"
|
||||
);
|
||||
|
||||
@Test
|
||||
@@ -24,6 +24,8 @@ class DispatchCandidateMapperContractTest {
|
||||
String.class, List.class, String.class, String.class, String.class, String.class));
|
||||
assertConstructorColumnOrder(DispatchCandidateMapper.class.getMethod("lockSelected",
|
||||
String.class, List.class));
|
||||
assertConstructorColumnOrder(DispatchCandidateMapper.class.getMethod("relabelAvailable",
|
||||
String.class, String.class, String.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -49,6 +51,20 @@ class DispatchCandidateMapperContractTest {
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void candidateMarksFollowPdaRelabelPalletBinding() throws Exception {
|
||||
for (Method method : List.of(
|
||||
DispatchCandidateMapper.class.getMethod("available", String.class, List.class, String.class,
|
||||
String.class, String.class, String.class),
|
||||
DispatchCandidateMapper.class.getMethod("lockSelected", String.class, List.class))) {
|
||||
String sql = String.join(" ", method.getAnnotation(Select.class).value());
|
||||
assertTrue(sql.contains("rp.id=ri.source_inventory_position_id"));
|
||||
assertTrue(sql.contains("rp.pallet_id=p.warehouse_pallet_id"));
|
||||
assertTrue(sql.contains("ri.fba_carton_mark"));
|
||||
assertTrue(sql.contains("AS relabelCartonMarks"));
|
||||
}
|
||||
}
|
||||
|
||||
private void assertConstructorColumnOrder(Method method) {
|
||||
String sql = String.join(" ", method.getAnnotation(Select.class).value());
|
||||
int previous = -1;
|
||||
|
||||
+2
@@ -252,6 +252,8 @@ class DispatchPdaWorkflowServiceTest {
|
||||
assertNotNull(order.getDepartAt());
|
||||
assertEquals(order.getDepartAt(), order.getUpdatedAt());
|
||||
verify(orders).updateById(order);
|
||||
assertEquals("DEPARTED", order.getStatus());
|
||||
assertEquals("OUTBOUNDED", outbound.getStatus());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
+33
-6
@@ -21,6 +21,7 @@ import com.baiyue.lastleg.dispatch.pda.entity.DispatchPdaTask;
|
||||
import com.baiyue.lastleg.dispatch.pda.mapper.DispatchPdaTaskMapper;
|
||||
import com.baiyue.lastleg.entity.LastlegOrder;
|
||||
import com.baiyue.lastleg.mapper.LastlegOrderMapper;
|
||||
import com.baiyue.lastleg.delivery.mapper.OutboundOrderMapper;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
@@ -57,6 +58,7 @@ class DispatchServiceTest {
|
||||
@Mock DispatchDraftContainerMapper draftContainers;
|
||||
@Mock DispatchPdaTaskMapper pdaTasks;
|
||||
@Mock LastlegOrderMapper tailOrders;
|
||||
@Mock OutboundOrderMapper outboundOrders;
|
||||
private DispatchService service;
|
||||
|
||||
@BeforeEach
|
||||
@@ -71,6 +73,7 @@ class DispatchServiceTest {
|
||||
ReflectionTestUtils.setField(service, "draftContainers", draftContainers);
|
||||
ReflectionTestUtils.setField(service, "pdaTasks", pdaTasks);
|
||||
ReflectionTestUtils.setField(service, "tailOrders", tailOrders);
|
||||
ReflectionTestUtils.setField(service, "outboundOrders", outboundOrders);
|
||||
ReflectionTestUtils.setField(service, "orderNoGenerator", new com.baiyue.lastleg.service.LastlegOrderNoGenerator());
|
||||
lenient().when(items.findByDispatchOrder(any(), any())).thenReturn(List.of());
|
||||
lenient().when(bolLines.findByDispatchOrder(any(), any())).thenReturn(List.of());
|
||||
@@ -185,7 +188,7 @@ class DispatchServiceTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
void preArrangeConvertsOwnedDraftLockInsteadOfInsertingAnotherLock() {
|
||||
void preArrangeKeepsVirtualVehicleAndItsLocksEditableUntilOutboundExists() {
|
||||
when(candidates.lockSelected("100", List.of(10L))).thenReturn(List.of(candidate(10L, null, "ONT8")));
|
||||
DispatchPalletLock lock = new DispatchPalletLock();
|
||||
lock.setDraftToken("draft-1"); lock.setDraftContainerId(21L); lock.setOperatorId("7"); lock.setStatus("ACTIVE"); lock.setActiveKey("PLAN:10");
|
||||
@@ -197,16 +200,40 @@ class DispatchServiceTest {
|
||||
service.preArrange("100", "7", new DispatchRequests.PreArrange(List.of(10L), null, null, null, null, "draft-1"));
|
||||
|
||||
assertNotNull(lock.getDispatchOrderId());
|
||||
assertNull(lock.getDraftToken());
|
||||
assertNull(lock.getDraftContainerId());
|
||||
assertEquals("RELEASED", draft.getStatus());
|
||||
assertNotNull(draft.getReleasedAt());
|
||||
assertEquals("draft-1", lock.getDraftToken());
|
||||
assertEquals(21L, lock.getDraftContainerId());
|
||||
assertEquals("ACTIVE", draft.getStatus());
|
||||
assertNull(draft.getExpiresAt());
|
||||
verify(locks).updateById(lock);
|
||||
verify(locks, never()).insert(any(DispatchPalletLock.class));
|
||||
verify(draftContainers).delete(any(LambdaQueryWrapper.class));
|
||||
verify(drafts).updateById(draft);
|
||||
}
|
||||
|
||||
@Test
|
||||
void removingUnpickedPalletReleasesLockAndRefreshesDispatchTotals() {
|
||||
DispatchOrder dispatch = new DispatchOrder();
|
||||
dispatch.setId(1L); dispatch.setCustomerId("100"); dispatch.setDispatchNo("PC1");
|
||||
dispatch.setStatus(DispatchService.PENDING_DEPARTURE); dispatch.setPickedPackageCount(0);
|
||||
DispatchItem removed = new DispatchItem();
|
||||
removed.setId(11L); removed.setPlanPalletId(10L); removed.setWarehousePalletId(20L);
|
||||
DispatchItem remaining = new DispatchItem();
|
||||
remaining.setId(12L); remaining.setPlanPalletId(12L); remaining.setPackageCount(7);
|
||||
DispatchPalletLock lock = new DispatchPalletLock();
|
||||
lock.setPlanPalletId(10L); lock.setStatus("ACTIVE"); lock.setActiveKey("PLAN:10");
|
||||
when(orders.lockGlobalByDispatchNo("PC1")).thenReturn(dispatch);
|
||||
when(items.lockById("100", 1L, 11L)).thenReturn(removed);
|
||||
when(locks.selectList(any())).thenReturn(List.of(lock));
|
||||
when(items.findByDispatchOrder("100", 1L)).thenReturn(List.of(remaining));
|
||||
|
||||
DispatchResponse result = service.removeItem("PC1", 11L);
|
||||
|
||||
assertEquals(1, result.palletCount());
|
||||
assertEquals(7, result.packageCount());
|
||||
assertEquals("RELEASED", lock.getStatus());
|
||||
verify(items).deleteById(11L);
|
||||
verify(orders).updateById(dispatch);
|
||||
}
|
||||
|
||||
@Test
|
||||
void activeDraftOnlyRestoresLocksStillOwnedByThatDraft() {
|
||||
DispatchDraft draft = new DispatchDraft();
|
||||
|
||||
Reference in New Issue
Block a user