use of org.folio.rest.jaxrs.model.Physical in project mod-orders by folio-org.
the class OpenCompositeOrderPieceServiceTest method shouldCreatePieceWithLocationAndHoldingReferenceIfMixedLineContainsLocationAndInventoryIsInstanceOrNoneAndNoCreatedPieces.
@ParameterizedTest
@CsvSource(value = { "P/E Mix:Instance:Instance, Holding:2:3", "P/E Mix:None:Instance, Holding:2:3" }, delimiter = ':')
void shouldCreatePieceWithLocationAndHoldingReferenceIfMixedLineContainsLocationAndInventoryIsInstanceOrNoneAndNoCreatedPieces(String lineType, String elecCreateInventory, String physCreateInventory, int elecQty1, int physQty2) {
// given
String lineId = UUID.randomUUID().toString();
String locationId1 = UUID.randomUUID().toString();
String holdingId = UUID.randomUUID().toString();
String titleId = UUID.randomUUID().toString();
Location location1 = new Location().withLocationId(locationId1).withQuantityElectronic(elecQty1).withQuantity(elecQty1);
Location location2 = new Location().withHoldingId(holdingId).withQuantityPhysical(physQty2).withQuantity(physQty2);
Cost cost = new Cost().withQuantityElectronic(elecQty1 + physQty2);
Eresource eresource = new Eresource().withCreateInventory(Eresource.CreateInventory.fromValue(elecCreateInventory));
Physical physical = new Physical().withCreateInventory(Physical.CreateInventory.fromValue(physCreateInventory));
CompositePoLine line = new CompositePoLine().withId(lineId).withCost(cost).withLocations(List.of(location1, location2)).withIsPackage(false).withEresource(eresource).withPhysical(physical).withOrderFormat(CompositePoLine.OrderFormat.fromValue(lineType));
CompositePurchaseOrder compOrder = new CompositePurchaseOrder().withCompositePoLines(List.of(line));
doReturn(completedFuture(null)).when(openCompositeOrderPieceService).openOrderUpdateInventory(any(CompositePoLine.class), any(Piece.class), any(Boolean.class), eq(requestContext));
doReturn(completedFuture(Collections.emptyList())).when(pieceStorageService).getPiecesByPoLineId(line, requestContext);
doReturn(completedFuture(new Piece())).when(pieceStorageService).insertPiece(any(Piece.class), eq(requestContext));
doReturn(completedFuture(null)).when(protectionService).isOperationRestricted(any(List.class), any(ProtectedOperationType.class), eq(requestContext));
doReturn(completedFuture(compOrder)).when(purchaseOrderStorageService).getCompositeOrderByPoLineId(eq(lineId), eq(requestContext));
final ArgumentCaptor<Piece> pieceArgumentCaptor = ArgumentCaptor.forClass(Piece.class);
doAnswer((Answer<CompletableFuture<Piece>>) invocation -> {
Piece piece = invocation.getArgument(0);
return completedFuture(piece);
}).when(pieceStorageService).insertPiece(pieceArgumentCaptor.capture(), eq(requestContext));
// When
List<Piece> createdPieces = openCompositeOrderPieceService.handlePieces(line, titleId, Collections.emptyList(), false, requestContext).join();
// Then
List<Piece> piecesLoc1 = createdPieces.stream().filter(piece -> locationId1.equals(piece.getLocationId())).collect(toList());
assertEquals(elecQty1, piecesLoc1.size());
piecesLoc1.forEach(piece -> {
assertNull(piece.getHoldingId());
assertNull(piece.getItemId());
assertEquals(lineId, piece.getPoLineId());
assertEquals(titleId, piece.getTitleId());
assertEquals(Piece.Format.ELECTRONIC, piece.getFormat());
});
List<Piece> piecesLoc2 = createdPieces.stream().filter(piece -> holdingId.equals(piece.getHoldingId())).collect(toList());
assertEquals(physQty2, piecesLoc2.size());
piecesLoc2.forEach(piece -> {
assertNull(piece.getLocationId());
assertNull(piece.getItemId());
assertEquals(lineId, piece.getPoLineId());
assertEquals(titleId, piece.getTitleId());
assertEquals(Piece.Format.PHYSICAL, piece.getFormat());
});
}
use of org.folio.rest.jaxrs.model.Physical in project mod-orders by folio-org.
the class OrderLineUpdateInstanceHandlerTest method shouldThrowNotImplementedExceptionForPhysicalOrderFormat.
@Test
public void shouldThrowNotImplementedExceptionForPhysicalOrderFormat() {
String orderLineId = UUID.randomUUID().toString();
PoLine poLine = new PoLine().withId(orderLineId).withOrderFormat(PoLine.OrderFormat.PHYSICAL_RESOURCE).withPhysical(new Physical().withCreateInventory(Physical.CreateInventory.INSTANCE_HOLDING));
PatchOrderLineRequest patchOrderLineRequest = new PatchOrderLineRequest();
patchOrderLineRequest.withOperation(PatchOrderLineRequest.Operation.REPLACE_INSTANCE_REF);
OrderLineUpdateInstanceHolder orderLineUpdateInstanceHolder = new OrderLineUpdateInstanceHolder().withStoragePoLine(poLine).withPathOrderLineRequest(patchOrderLineRequest);
assertThrows(NotImplementedException.class, () -> orderLineUpdateInstanceHandler.handle(orderLineUpdateInstanceHolder, requestContext));
}
use of org.folio.rest.jaxrs.model.Physical in project mod-orders by folio-org.
the class OrderLineUpdateInstanceHandlerTest method shouldThrowNotImplementedExceptionForOtherOrderFormat.
@Test
public void shouldThrowNotImplementedExceptionForOtherOrderFormat() {
String orderLineId = UUID.randomUUID().toString();
PoLine poLine = new PoLine().withId(orderLineId).withOrderFormat(PoLine.OrderFormat.OTHER).withPhysical(new Physical().withCreateInventory(Physical.CreateInventory.INSTANCE_HOLDING));
PatchOrderLineRequest patchOrderLineRequest = new PatchOrderLineRequest();
patchOrderLineRequest.withOperation(PatchOrderLineRequest.Operation.REPLACE_INSTANCE_REF);
OrderLineUpdateInstanceHolder orderLineUpdateInstanceHolder = new OrderLineUpdateInstanceHolder().withStoragePoLine(poLine).withPathOrderLineRequest(patchOrderLineRequest);
assertThrows(NotImplementedException.class, () -> orderLineUpdateInstanceHandler.handle(orderLineUpdateInstanceHolder, requestContext));
}
use of org.folio.rest.jaxrs.model.Physical in project mod-orders by folio-org.
the class OrderLineUpdateInstanceHandlerTest method shouldThrowNotImplementedExceptionForMIXOrderFormat.
@Test
public void shouldThrowNotImplementedExceptionForMIXOrderFormat() {
String orderLineId = UUID.randomUUID().toString();
PoLine poLine = new PoLine().withId(orderLineId).withOrderFormat(PoLine.OrderFormat.P_E_MIX).withPhysical(new Physical().withCreateInventory(Physical.CreateInventory.INSTANCE_HOLDING)).withEresource(new Eresource().withCreateInventory(Eresource.CreateInventory.INSTANCE));
PatchOrderLineRequest patchOrderLineRequest = new PatchOrderLineRequest();
patchOrderLineRequest.withOperation(PatchOrderLineRequest.Operation.REPLACE_INSTANCE_REF);
OrderLineUpdateInstanceHolder orderLineUpdateInstanceHolder = new OrderLineUpdateInstanceHolder().withStoragePoLine(poLine).withPathOrderLineRequest(patchOrderLineRequest);
assertThrows(NotImplementedException.class, () -> orderLineUpdateInstanceHandler.handle(orderLineUpdateInstanceHolder, requestContext));
}
use of org.folio.rest.jaxrs.model.Physical in project mod-orders by folio-org.
the class PieceCreateFlowPoLineServiceTest method shouldIncreaseQuantityTo3ForCostAndLocationIfInitiallyWas2AndLocationIdInPieceAndMixedPOLWithLocationId.
@Test
@DisplayName("Add 1 electronic piece with location id to mixed pol with 1 location with location id and electronic and physical qty")
void shouldIncreaseQuantityTo3ForCostAndLocationIfInitiallyWas2AndLocationIdInPieceAndMixedPOLWithLocationId() throws ExecutionException, InterruptedException {
String orderId = UUID.randomUUID().toString();
String locationId = UUID.randomUUID().toString();
String lineId = UUID.randomUUID().toString();
Piece pieceToCreate = new Piece().withPoLineId(lineId).withLocationId(locationId).withFormat(Piece.Format.ELECTRONIC);
Location loc = new Location().withLocationId(locationId).withQuantityElectronic(1).withQuantityPhysical(1).withQuantity(2);
Cost cost = new Cost().withQuantityElectronic(1).withQuantityPhysical(1).withListUnitPrice(1d).withExchangeRate(1d).withCurrency("USD").withPoLineEstimatedPrice(1d);
PurchaseOrder purchaseOrder = new PurchaseOrder().withId(orderId).withWorkflowStatus(OPEN);
Eresource eresource = new Eresource().withCreateInventory(Eresource.CreateInventory.INSTANCE);
Physical physical = new Physical().withCreateInventory(Physical.CreateInventory.INSTANCE);
PoLine originPoLine = new PoLine().withIsPackage(false).withPurchaseOrderId(orderId).withOrderFormat(PoLine.OrderFormat.P_E_MIX).withId(lineId).withEresource(eresource).withPhysical(physical).withLocations(List.of(loc)).withCost(cost);
PieceCreationHolder incomingUpdateHolder = new PieceCreationHolder().withPieceToCreate(pieceToCreate).withCreateItem(true);
incomingUpdateHolder.withOrderInformation(purchaseOrder, originPoLine);
doReturn(completedFuture(null)).when(receivingEncumbranceStrategy).processEncumbrances(incomingUpdateHolder.getPurchaseOrderToSave(), incomingUpdateHolder.getPurchaseOrderToSave(), requestContext);
doReturn(completedFuture(null)).when(purchaseOrderLineService).saveOrderLine(incomingUpdateHolder.getPoLineToSave(), requestContext);
// When
pieceCreateFlowPoLineService.updatePoLine(incomingUpdateHolder, requestContext).get();
// Then
CompositePoLine poLineToSave = incomingUpdateHolder.getPoLineToSave();
assertEquals(1, poLineToSave.getLocations().size());
assertEquals(3, poLineToSave.getLocations().get(0).getQuantity());
assertEquals(1, poLineToSave.getLocations().get(0).getQuantityPhysical());
assertEquals(2, poLineToSave.getLocations().get(0).getQuantityElectronic());
assertEquals(1, poLineToSave.getCost().getQuantityPhysical());
assertEquals(2, poLineToSave.getCost().getQuantityElectronic());
verify(receivingEncumbranceStrategy).processEncumbrances(incomingUpdateHolder.getPurchaseOrderToSave(), incomingUpdateHolder.getPurchaseOrderToSave(), requestContext);
verify(purchaseOrderLineService).saveOrderLine(incomingUpdateHolder.getPoLineToSave(), requestContext);
}
Aggregations