This commit is contained in:
2026-09-11 11:51:26 +08:00
parent d60689ce02
commit d2cff49b9e
45 changed files with 569 additions and 66 deletions
@@ -33,6 +33,7 @@ class DomesticWarehouseDirectoryClientContractTest {
"warehouseType:String", "countryCode:String", "status:String");
assertThat(Arrays.stream(DomesticWarehouseDirectoryClient.Address.class.getRecordComponents())
.map(value -> value.getName() + ":" + value.getType().getSimpleName()))
.containsExactly("stateProvince:String");
.containsExactly("addressType:String", "countryCode:String", "stateProvince:String", "city:String",
"district:String", "postalCode:String", "addressLine1:String", "addressLine2:String");
}
}
@@ -1,10 +1,41 @@
package com.baiyue.lastleg.dispatch.service;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import com.baiyue.common.core.api.ApiResponse;
import com.baiyue.lastleg.client.DomesticWarehouseDirectoryClient;
import com.baiyue.lastleg.client.PrintPdfClient;
import com.baiyue.lastleg.dispatch.dto.DispatchResponse;
import java.nio.charset.StandardCharsets;
import java.time.LocalDateTime;
import java.util.List;
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.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.test.util.ReflectionTestUtils;
@ExtendWith(MockitoExtension.class)
class DispatchBolPrintServiceTest {
@Mock private DispatchService dispatches;
@Mock private PrintPdfClient print;
@Mock private DomesticWarehouseDirectoryClient warehouses;
@InjectMocks private DispatchBolPrintService service;
@BeforeEach
void setUp() {
ReflectionTestUtils.setField(service, "internalToken", "internal-test-token");
}
@Test
void usesDenseFirstAndContinuationPageCapacities() {
assertThat(DispatchBolPrintService.pageCount(1)).isEqualTo(1);
@@ -15,4 +46,33 @@ class DispatchBolPrintServiceTest {
assertThat(DispatchBolPrintService.pageCount(70)).isEqualTo(3);
assertThat(DispatchBolPrintService.pageCount(71)).isEqualTo(4);
}
@Test
void resolvesTheOperatingWarehouseAddressIntoTheBolRequest() {
String warehouseId = "193000000000200003";
DispatchResponse detail = new DispatchResponse(1L, "DS-WH-20260911-624449", "DEV-23653906",
null, null, "五月开发验收车队", null, null, warehouseId, "洛杉矶仓", null,
null, null, null, LocalDateTime.of(2026, 9, 12, 2, 40, 20), "PENDING_DEPARTURE",
1, 1, 1, 0, 0, 1, null, LocalDateTime.of(2026, 9, 11, 10, 0), List.of(),
List.of(new DispatchResponse.BolLine("TSTU3539519", "DP-260911-0027", "ABE2", "ABE2",
"NYEXX2609110214", null, null, 1)));
var address = new DomesticWarehouseDirectoryClient.Address("OPERATING", "US", "CA", "Los Angeles",
null, "90001", "Los Angeles warehouse generic address pending maintenance", null);
var warehouse = new DomesticWarehouseDirectoryClient.Warehouse(Long.parseLong(warehouseId), 0L,
"US-LAX", "洛杉矶仓", "OVERSEAS", "US", "ACTIVE");
when(dispatches.platformDetail(detail.dispatchNo())).thenReturn(detail);
when(warehouses.activeWarehouse(Long.parseLong(warehouseId), "internal-test-token"))
.thenReturn(ApiResponse.success(new DomesticWarehouseDirectoryClient.Detail(warehouse, List.of(address))));
when(print.generateDispatchBol(eq("internal-test-token"), eq("request-1"), any()))
.thenReturn(ResponseEntity.ok().contentType(MediaType.APPLICATION_PDF)
.header("X-Print-Page-Count", "1").body("%PDF-".getBytes(StandardCharsets.US_ASCII)));
service.generate(detail.dispatchNo(), "request-1");
ArgumentCaptor<PrintPdfClient.Request> request = ArgumentCaptor.forClass(PrintPdfClient.Request.class);
verify(print).generateDispatchBol(eq("internal-test-token"), eq("request-1"), request.capture());
assertThat(request.getValue().documents()).singleElement().satisfies(document ->
assertThat(document.shipFromAddress()).isEqualTo(
"Los Angeles warehouse generic address pending maintenance, Los Angeles, CA, 90001, US"));
}
}
@@ -91,7 +91,8 @@ class FbaWarehouseValidatorTest {
return new DomesticWarehouseDirectoryClient.Detail(
new DomesticWarehouseDirectoryClient.Warehouse(193000000000000001L, 0L, code, name,
type, "US", status),
List.of(new DomesticWarehouseDirectoryClient.Address("CA")));
List.of(new DomesticWarehouseDirectoryClient.Address("OPERATING", "US", "CA", "Los Angeles",
null, "90001", "123 Logistics Ave", null)));
}
private void assertInvalid(org.assertj.core.api.ThrowableAssert.ThrowingCallable action) {