fix(lastleg): inspect occupied pallets for PDA queries
This commit is contained in:
+17
-4
@@ -117,6 +117,17 @@ public class HttpWarehouseResourceGateway implements WarehouseResourceGateway {
|
||||
|
||||
@Override
|
||||
public WarehousePalletReference resolvePallet(String palletCode) {
|
||||
WarehousePalletData data = palletData(palletCode);
|
||||
requireReservable(data);
|
||||
return pallet(data);
|
||||
}
|
||||
|
||||
@Override
|
||||
public WarehousePalletReference inspectPallet(String palletCode) {
|
||||
return pallet(palletData(palletCode));
|
||||
}
|
||||
|
||||
private WarehousePalletData palletData(String palletCode) {
|
||||
WarehousePalletResponse response = client.get()
|
||||
.uri("/internal/v1/warehouse-pallets/resolve/{palletCode}", palletCode)
|
||||
.header("X-Internal-Service-Token", internalToken)
|
||||
@@ -130,10 +141,12 @@ public class HttpWarehouseResourceGateway implements WarehouseResourceGateway {
|
||||
throw new ResponseStatusException(HttpStatus.SERVICE_UNAVAILABLE,
|
||||
"Warehouse pallet service returned no usable response");
|
||||
}
|
||||
requireReservable(response.data());
|
||||
return new WarehousePalletReference(response.data().id(), response.data().palletCode(),
|
||||
response.data().warehouseId(), response.data().locationId(), response.data().status(),
|
||||
response.data().fbaWarehouseCode(), response.data().unitPrice(), response.data().version());
|
||||
return response.data();
|
||||
}
|
||||
|
||||
private WarehousePalletReference pallet(WarehousePalletData data) {
|
||||
return new WarehousePalletReference(data.id(), data.palletCode(), data.warehouseId(), data.locationId(),
|
||||
data.status(), data.fbaWarehouseCode(), data.unitPrice(), data.version());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+3
@@ -9,6 +9,9 @@ public interface WarehouseResourceGateway {
|
||||
void scrapPallet(String customerId, long palletId);
|
||||
WarehousePalletReference resolvePallet(String palletCode);
|
||||
WarehousePalletReference resolvePallet(long palletId);
|
||||
default WarehousePalletReference inspectPallet(String palletCode) {
|
||||
return resolvePallet(palletCode);
|
||||
}
|
||||
default WarehouseLocationReference resolveLocation(long warehouseId, String locationCode) {
|
||||
throw new UnsupportedOperationException("Warehouse location resolution is not configured");
|
||||
}
|
||||
|
||||
+1
-1
@@ -41,7 +41,7 @@ public class PdaWarehouseService {
|
||||
}
|
||||
|
||||
public PdaWarehouseResponses.Pallet pallet(long warehouseId, PdaWarehouseRequests.Scan request) {
|
||||
WarehouseResourceGateway.WarehousePalletReference pallet = warehouse.resolvePallet(code(request.code()));
|
||||
WarehouseResourceGateway.WarehousePalletReference pallet = warehouse.inspectPallet(code(request.code()));
|
||||
if (pallet == null) throw notFound("Warehouse pallet was not found");
|
||||
if (pallet.warehouseId() != warehouseId) throw conflict("Pallet belongs to another overseas warehouse");
|
||||
WarehouseResourceGateway.WarehouseLocationReference location = warehouse.resolveLocation(warehouseId,
|
||||
|
||||
+18
@@ -64,6 +64,24 @@ class HttpWarehouseResourceGatewayTest {
|
||||
server.verify();
|
||||
}
|
||||
|
||||
@Test
|
||||
void inspectAllowsOccupiedPalletForReadOnlyInventoryQueries() {
|
||||
server.expect(requestTo("http://warehouse/internal/v1/warehouse-pallets/resolve/PAL-OCCUPIED"))
|
||||
.andRespond(withSuccess("""
|
||||
{"code":"200","data":{"palletId":2092040891261427713,"palletCode":"PAL-OCCUPIED",
|
||||
"warehouseId":2092040869757231105,"locationId":2092040891076878337,
|
||||
"status":"OCCUPIED","fbaWarehouseCode":null,"version":4,
|
||||
"locationType":"STORAGE","locationStatus":"OCCUPIED","reservable":false,
|
||||
"reservationBlockReason":"PALLET_NOT_IDLE"}}
|
||||
""", MediaType.APPLICATION_JSON));
|
||||
|
||||
WarehouseResourceGateway.WarehousePalletReference result = gateway.inspectPallet("PAL-OCCUPIED");
|
||||
|
||||
assertThat(result.palletId()).isEqualTo(2092040891261427713L);
|
||||
assertThat(result.status()).isEqualTo("OCCUPIED");
|
||||
server.verify();
|
||||
}
|
||||
|
||||
@Test
|
||||
void resolveFailsClosedWhenWarehouseOmitsReservationFacts() {
|
||||
server.expect(requestTo("http://warehouse/internal/v1/warehouse-pallets/resolve/PAL-UNKNOWN"))
|
||||
|
||||
+2
-2
@@ -42,7 +42,7 @@ class PdaWarehouseServiceTest {
|
||||
|
||||
@Test
|
||||
void palletFromAnotherWarehouseIsRejected() {
|
||||
when(warehouse.resolvePallet("PAL-1")).thenReturn(new WarehouseResourceGateway.WarehousePalletReference(
|
||||
when(warehouse.inspectPallet("PAL-1")).thenReturn(new WarehouseResourceGateway.WarehousePalletReference(
|
||||
1L, "PAL-1", 901L, 2L, "OCCUPIED", null, 1));
|
||||
assertThatThrownBy(() -> service.pallet(900L, new PdaWarehouseRequests.Scan("PAL-1")))
|
||||
.isInstanceOf(ResponseStatusException.class).hasMessageContaining("409");
|
||||
@@ -50,7 +50,7 @@ class PdaWarehouseServiceTest {
|
||||
|
||||
@Test
|
||||
void missingPalletIsReportedAsNotFound() {
|
||||
when(warehouse.resolvePallet("MISSING")).thenReturn(null);
|
||||
when(warehouse.inspectPallet("MISSING")).thenReturn(null);
|
||||
|
||||
assertThatThrownBy(() -> service.pallet(900L, new PdaWarehouseRequests.Scan("MISSING")))
|
||||
.isInstanceOf(ResponseStatusException.class).hasMessageContaining("404");
|
||||
|
||||
Reference in New Issue
Block a user