fix overseas return inventory flow
This commit is contained in:
+134
@@ -0,0 +1,134 @@
|
||||
package com.baiyue.lastleg.returnreceipt.service;
|
||||
|
||||
import com.baiyue.lastleg.pda.security.PdaWarehouseIdentity;
|
||||
import com.baiyue.lastleg.returnreceipt.dto.ReturnInventoryRequests;
|
||||
import com.baiyue.lastleg.returnreceipt.entity.ReturnInventoryCarton;
|
||||
import com.baiyue.lastleg.returnreceipt.entity.ReturnInventoryCartonItem;
|
||||
import com.baiyue.lastleg.returnreceipt.entity.ReturnOrder;
|
||||
import com.baiyue.lastleg.returnreceipt.entity.ReturnReceipt;
|
||||
import com.baiyue.lastleg.returnreceipt.mapper.ReturnInventoryBalanceMapper;
|
||||
import com.baiyue.lastleg.returnreceipt.mapper.ReturnInventoryCartonItemMapper;
|
||||
import com.baiyue.lastleg.returnreceipt.mapper.ReturnInventoryCartonMapper;
|
||||
import com.baiyue.lastleg.returnreceipt.mapper.ReturnInventoryMovementMapper;
|
||||
import com.baiyue.lastleg.returnreceipt.mapper.ReturnInventoryOperationMapper;
|
||||
import com.baiyue.lastleg.returnreceipt.mapper.ReturnInventoryQueryMapper;
|
||||
import com.baiyue.lastleg.returnreceipt.mapper.ReturnOrderMapper;
|
||||
import com.baiyue.lastleg.returnreceipt.mapper.ReturnReceiptMapper;
|
||||
import com.baiyue.lastleg.service.LastlegOrderNoGenerator;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.mockito.ArgumentCaptor;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.junit.jupiter.MockitoExtension;
|
||||
import org.springframework.test.util.ReflectionTestUtils;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.mockito.ArgumentMatchers.anyLong;
|
||||
import static org.mockito.ArgumentMatchers.anyString;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class ReturnInventoryServiceTest {
|
||||
@Mock ReturnInventoryCartonMapper cartons;
|
||||
@Mock ReturnInventoryCartonItemMapper cartonItems;
|
||||
@Mock ReturnInventoryBalanceMapper balances;
|
||||
@Mock ReturnInventoryOperationMapper operations;
|
||||
@Mock ReturnInventoryQueryMapper queries;
|
||||
@Mock ReturnInventoryMovementMapper movements;
|
||||
@Mock LastlegOrderNoGenerator numbers;
|
||||
@Mock ReturnOrderMapper orders;
|
||||
@Mock ReturnReceiptMapper receipts;
|
||||
private ReturnInventoryService service;
|
||||
|
||||
@BeforeEach
|
||||
void setUp() {
|
||||
service = new ReturnInventoryService();
|
||||
ReflectionTestUtils.setField(service, "cartons", cartons);
|
||||
ReflectionTestUtils.setField(service, "cartonItems", cartonItems);
|
||||
ReflectionTestUtils.setField(service, "balances", balances);
|
||||
ReflectionTestUtils.setField(service, "operations", operations);
|
||||
ReflectionTestUtils.setField(service, "queries", queries);
|
||||
ReflectionTestUtils.setField(service, "movements", movements);
|
||||
ReflectionTestUtils.setField(service, "numbers", numbers);
|
||||
ReflectionTestUtils.setField(service, "orders", orders);
|
||||
ReflectionTestUtils.setField(service, "receiptMapper", receipts);
|
||||
}
|
||||
|
||||
@Test
|
||||
void receiptCartonKeepsTheSourceReturnNumber() {
|
||||
ReturnOrder order = completedOrder();
|
||||
ReturnReceipt receipt = new ReturnReceipt();
|
||||
receipt.setId(21L);
|
||||
receipt.setReceiptBatchNo("RB-1");
|
||||
when(numbers.next(anyString(), anyString(), anyLong())).thenReturn("RC-1");
|
||||
|
||||
service.createReceiptCarton(order, receipt, null,
|
||||
List.of(new ReturnInventoryService.ReceiptLine("SKU-A", "商品A", 2)));
|
||||
|
||||
ArgumentCaptor<ReturnInventoryCarton> captor = ArgumentCaptor.forClass(ReturnInventoryCarton.class);
|
||||
verify(cartons).insert(captor.capture());
|
||||
assertThat(captor.getValue().getSourceReturnNo()).isEqualTo("RT-1");
|
||||
}
|
||||
|
||||
@Test
|
||||
void mergeMovesItemsBetweenCartonsWithoutReducingAvailableQuantity() {
|
||||
ReturnOrder order = completedOrder();
|
||||
ReturnReceipt receipt = new ReturnReceipt();
|
||||
receipt.setId(21L);
|
||||
ReturnInventoryCarton source = new ReturnInventoryCarton();
|
||||
source.setId(31L);
|
||||
source.setCustomerId("10001");
|
||||
source.setOverseasWarehouseId("42");
|
||||
source.setCartonMark("RC-SOURCE");
|
||||
source.setStatus(ReturnInventoryService.AVAILABLE);
|
||||
source.setSkuTypes(2);
|
||||
source.setTotalQuantity(4L);
|
||||
ReturnInventoryCartonItem skuA = item(41L, "SKU-A", 2L);
|
||||
ReturnInventoryCartonItem skuB = item(42L, "SKU-B", 2L);
|
||||
|
||||
when(orders.findByNos("42", List.of("RT-1"))).thenReturn(List.of(order));
|
||||
when(receipts.listOrder(11L)).thenReturn(List.of(receipt));
|
||||
when(cartons.findReceipt(21L)).thenReturn(source);
|
||||
when(cartons.lockMark("RC-SOURCE")).thenReturn(source);
|
||||
when(cartonItems.listCarton(31L)).thenReturn(List.of(skuA, skuB));
|
||||
when(numbers.next(anyString(), anyString(), anyLong())).thenReturn("RC-MERGED");
|
||||
when(balances.adjustCartonQuantity(anyString(), anyString(), anyString(), anyLong())).thenReturn(1);
|
||||
|
||||
service.merge(new PdaWarehouseIdentity("operator-1", "操作员", 42L),
|
||||
new ReturnInventoryRequests.Merge(List.of("RT-1"), List.of(
|
||||
new ReturnInventoryRequests.ValidItem("SKU-A", 1),
|
||||
new ReturnInventoryRequests.ValidItem("SKU-B", 1)),
|
||||
BigDecimal.ONE, BigDecimal.ONE, BigDecimal.ONE, BigDecimal.ONE, "merge-key"));
|
||||
|
||||
verify(balances).adjustCartonQuantity("10001", "42", "SKU-A", 1L);
|
||||
verify(balances).adjustCartonQuantity("10001", "42", "SKU-B", 1L);
|
||||
assertThat(source.getTotalQuantity()).isEqualTo(2L);
|
||||
assertThat(source.getStatus()).isEqualTo(ReturnInventoryService.AVAILABLE);
|
||||
}
|
||||
|
||||
private ReturnOrder completedOrder() {
|
||||
ReturnOrder order = new ReturnOrder();
|
||||
order.setId(11L);
|
||||
order.setCustomerId("10001");
|
||||
order.setReturnNo("RT-1");
|
||||
order.setOverseasWarehouseId("42");
|
||||
order.setStatus("COMPLETED");
|
||||
return order;
|
||||
}
|
||||
|
||||
private ReturnInventoryCartonItem item(long id, String sku, long quantity) {
|
||||
ReturnInventoryCartonItem item = new ReturnInventoryCartonItem();
|
||||
item.setId(id);
|
||||
item.setCartonId(31L);
|
||||
item.setCustomerId("10001");
|
||||
item.setSkuCode(sku);
|
||||
item.setProductNameZh(sku);
|
||||
item.setQuantity(quantity);
|
||||
return item;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user