Search in sources :

Example 1 with Physical

use of org.folio.rest.jaxrs.model.Physical in project mod-orders by folio-org.

the class CompositePoLineValidationUtilTest method shouldReturnErrorIfLocationAndHoldingReferenceArePresentAtTheSameTimeInTheLocation.

@Test
@DisplayName("Should return error if location and holding reference are not present in the location")
void shouldReturnErrorIfLocationAndHoldingReferenceArePresentAtTheSameTimeInTheLocation() {
    Location location1 = new Location().withHoldingId(UUID.randomUUID().toString()).withLocationId(UUID.randomUUID().toString()).withQuantity(1).withQuantityPhysical(1);
    Location location2 = new Location().withHoldingId(UUID.randomUUID().toString()).withLocationId(UUID.randomUUID().toString()).withQuantity(1).withQuantityPhysical(1);
    Physical physical = new Physical().withCreateInventory(Physical.CreateInventory.INSTANCE_HOLDING_ITEM);
    Cost cost = new Cost().withQuantityPhysical(2);
    CompositePoLine compositePoLine = new CompositePoLine().withPhysical(physical).withCost(cost).withLocations(List.of(location1, location2));
    List<Error> errors = CompositePoLineValidationUtil.validateLocations(compositePoLine);
    assertEquals(2, errors.size());
    errors.forEach(error -> {
        assertEquals(ErrorCodes.MAY_BE_LINK_TO_EITHER_HOLDING_OR_LOCATION_ERROR.getCode(), error.getCode());
    });
}
Also used : Physical(org.folio.rest.jaxrs.model.Physical) CompositePoLine(org.folio.rest.jaxrs.model.CompositePoLine) Error(org.folio.rest.jaxrs.model.Error) Cost(org.folio.rest.jaxrs.model.Cost) Location(org.folio.rest.jaxrs.model.Location) Test(org.junit.jupiter.api.Test) DisplayName(org.junit.jupiter.api.DisplayName)

Example 2 with Physical

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());
    });
}
Also used : BeforeEach(org.junit.jupiter.api.BeforeEach) Cost(org.folio.rest.jaxrs.model.Cost) TestConfig.getVertx(org.folio.TestConfig.getVertx) ArgumentMatchers.eq(org.mockito.ArgumentMatchers.eq) CompletableFuture.completedFuture(java.util.concurrent.CompletableFuture.completedFuture) PurchaseOrderStorageService(org.folio.service.orders.PurchaseOrderStorageService) TimeoutException(java.util.concurrent.TimeoutException) Autowired(org.springframework.beans.factory.annotation.Autowired) Context(io.vertx.core.Context) ApiTestSuite(org.folio.ApiTestSuite) AfterAll(org.junit.jupiter.api.AfterAll) MockitoAnnotations(org.mockito.MockitoAnnotations) ProtectionService(org.folio.service.ProtectionService) BeforeAll(org.junit.jupiter.api.BeforeAll) Mockito.doAnswer(org.mockito.Mockito.doAnswer) Map(java.util.Map) Spy(org.mockito.Spy) JsonObject(io.vertx.core.json.JsonObject) Mockito.doReturn(org.mockito.Mockito.doReturn) PieceStorageService(org.folio.service.pieces.PieceStorageService) BASE_MOCK_DATA_PATH(org.folio.rest.impl.MockServer.BASE_MOCK_DATA_PATH) OpenCompositeOrderHolderBuilder(org.folio.service.orders.flows.update.open.OpenCompositeOrderHolderBuilder) TILES_PATH(org.folio.TestConstants.TILES_PATH) OpenCompositeOrderPieceService(org.folio.service.orders.flows.update.open.OpenCompositeOrderPieceService) TestConfig.clearServiceInteractions(org.folio.TestConfig.clearServiceInteractions) Location(org.folio.rest.jaxrs.model.Location) UUID(java.util.UUID) TestConfig.isVerticleNotDeployed(org.folio.TestConfig.isVerticleNotDeployed) Test(org.junit.jupiter.api.Test) List(java.util.List) Eresource(org.folio.rest.jaxrs.model.Eresource) CompositePoLine(org.folio.rest.jaxrs.model.CompositePoLine) Mockito.mock(org.mockito.Mockito.mock) ArgumentMatchers.any(org.mockito.ArgumentMatchers.any) TestConfig.getFirstContextFromVertx(org.folio.TestConfig.getFirstContextFromVertx) Assertions.assertNotNull(org.junit.jupiter.api.Assertions.assertNotNull) CsvSource(org.junit.jupiter.params.provider.CsvSource) PieceChangeReceiptStatusPublisher(org.folio.service.pieces.PieceChangeReceiptStatusPublisher) Mock(org.mockito.Mock) ProtectedOperationType(org.folio.orders.utils.ProtectedOperationType) Assertions.assertNull(org.junit.jupiter.api.Assertions.assertNull) CompletableFuture(java.util.concurrent.CompletableFuture) TestConfig.clearVertxContext(org.folio.TestConfig.clearVertxContext) Mockito.spy(org.mockito.Mockito.spy) ArrayList(java.util.ArrayList) Title(org.folio.rest.jaxrs.model.Title) Answer(org.mockito.stubbing.Answer) TitlesService(org.folio.service.titles.TitlesService) ArgumentCaptor(org.mockito.ArgumentCaptor) PIECE_PATH(org.folio.TestConstants.PIECE_PATH) CompositePurchaseOrder(org.folio.rest.jaxrs.model.CompositePurchaseOrder) RequestContext(org.folio.rest.core.models.RequestContext) TestConfig.autowireDependencies(org.folio.TestConfig.autowireDependencies) InventoryManager(org.folio.service.inventory.InventoryManager) Assertions.assertEquals(org.junit.jupiter.api.Assertions.assertEquals) Physical(org.folio.rest.jaxrs.model.Physical) ORDER_PATH(org.folio.service.orders.flows.unopen.UnOpenCompositeOrderManagerTest.ORDER_PATH) MessageAddress(org.folio.orders.events.handlers.MessageAddress) Piece(org.folio.rest.jaxrs.model.Piece) TestConfig.initSpringContext(org.folio.TestConfig.initSpringContext) Mockito.times(org.mockito.Mockito.times) Mockito.verify(org.mockito.Mockito.verify) ExecutionException(java.util.concurrent.ExecutionException) Collectors.toList(java.util.stream.Collectors.toList) AfterEach(org.junit.jupiter.api.AfterEach) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest) Bean(org.springframework.context.annotation.Bean) Collections(java.util.Collections) TestUtils.getMockAsJson(org.folio.TestUtils.getMockAsJson) CompositePoLine(org.folio.rest.jaxrs.model.CompositePoLine) CompositePurchaseOrder(org.folio.rest.jaxrs.model.CompositePurchaseOrder) Cost(org.folio.rest.jaxrs.model.Cost) Eresource(org.folio.rest.jaxrs.model.Eresource) Physical(org.folio.rest.jaxrs.model.Physical) CompletableFuture(java.util.concurrent.CompletableFuture) Piece(org.folio.rest.jaxrs.model.Piece) List(java.util.List) ArrayList(java.util.ArrayList) Collectors.toList(java.util.stream.Collectors.toList) ProtectedOperationType(org.folio.orders.utils.ProtectedOperationType) Location(org.folio.rest.jaxrs.model.Location) CsvSource(org.junit.jupiter.params.provider.CsvSource) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest)

Example 3 with Physical

use of org.folio.rest.jaxrs.model.Physical in project mod-orders by folio-org.

the class OpenCompositeOrderPieceServiceTest method shouldCreatePieceWithLocationAndHoldingReferenceIfMixedLineContainsLocationAndInventoryIsInstanceOrNoneAndExistPiecesWithItems.

@ParameterizedTest
@CsvSource(value = { "P/E Mix:Instance:Instance, Holding, Item:2:3", "P/E Mix:None:Instance, Holding, Item:2:3" }, delimiter = ':')
void shouldCreatePieceWithLocationAndHoldingReferenceIfMixedLineContainsLocationAndInventoryIsInstanceOrNoneAndExistPiecesWithItems(String lineType, String elecCreateInventory, String physCreateInventory, int elecQty1, int physQty2) {
    // given
    String lineId = UUID.randomUUID().toString();
    String locationId = UUID.randomUUID().toString();
    String holdingId = UUID.randomUUID().toString();
    String titleId = UUID.randomUUID().toString();
    List<Piece> expectedPiecesWithItem = new ArrayList<>();
    Location elecLocation = new Location().withQuantityElectronic(elecQty1).withQuantity(elecQty1);
    if (Eresource.CreateInventory.INSTANCE_HOLDING_ITEM == Eresource.CreateInventory.fromValue(elecCreateInventory)) {
        elecLocation.withHoldingId(holdingId);
        expectedPiecesWithItem.addAll(createElecPiecesWithHoldingId(lineId, titleId, true, elecLocation));
    } else {
        elecLocation.withLocationId(locationId);
    }
    Location physLocation = new Location().withQuantityPhysical(physQty2).withQuantity(physQty2);
    if (Physical.CreateInventory.INSTANCE_HOLDING_ITEM == Physical.CreateInventory.fromValue(physCreateInventory)) {
        physLocation.withHoldingId(holdingId);
        expectedPiecesWithItem.addAll(createPhysPiecesWithHoldingId(lineId, titleId, true, physLocation));
    } else {
        physLocation.withLocationId(locationId);
    }
    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(elecLocation, physLocation)).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, expectedPiecesWithItem, false, requestContext).join();
    // Then
    List<Piece> piecesLocElec = createdPieces.stream().filter(piece -> Piece.Format.ELECTRONIC.equals(piece.getFormat())).collect(toList());
    assertEquals(elecQty1, piecesLocElec.size());
    piecesLocElec.forEach(piece -> {
        assertEquals(lineId, piece.getPoLineId());
        assertEquals(titleId, piece.getTitleId());
        if (Eresource.CreateInventory.INSTANCE_HOLDING_ITEM == Eresource.CreateInventory.fromValue(elecCreateInventory)) {
            assertEquals(holdingId, piece.getHoldingId());
            assertNotNull(piece.getItemId());
        } else {
            assertEquals(locationId, piece.getLocationId());
            assertNull(piece.getItemId());
        }
    });
    List<Piece> piecesLocPhys = createdPieces.stream().filter(piece -> Piece.Format.PHYSICAL.equals(piece.getFormat())).collect(toList());
    assertEquals(physQty2, piecesLocPhys.size());
    piecesLocPhys.forEach(piece -> {
        assertEquals(lineId, piece.getPoLineId());
        assertEquals(titleId, piece.getTitleId());
        if (Physical.CreateInventory.INSTANCE_HOLDING_ITEM == Physical.CreateInventory.fromValue(physCreateInventory)) {
            assertEquals(holdingId, piece.getHoldingId());
            assertNotNull(piece.getItemId());
        } else {
            assertEquals(locationId, piece.getLocationId());
            assertNull(piece.getItemId());
        }
    });
}
Also used : BeforeEach(org.junit.jupiter.api.BeforeEach) Cost(org.folio.rest.jaxrs.model.Cost) TestConfig.getVertx(org.folio.TestConfig.getVertx) ArgumentMatchers.eq(org.mockito.ArgumentMatchers.eq) CompletableFuture.completedFuture(java.util.concurrent.CompletableFuture.completedFuture) PurchaseOrderStorageService(org.folio.service.orders.PurchaseOrderStorageService) TimeoutException(java.util.concurrent.TimeoutException) Autowired(org.springframework.beans.factory.annotation.Autowired) Context(io.vertx.core.Context) ApiTestSuite(org.folio.ApiTestSuite) AfterAll(org.junit.jupiter.api.AfterAll) MockitoAnnotations(org.mockito.MockitoAnnotations) ProtectionService(org.folio.service.ProtectionService) BeforeAll(org.junit.jupiter.api.BeforeAll) Mockito.doAnswer(org.mockito.Mockito.doAnswer) Map(java.util.Map) Spy(org.mockito.Spy) JsonObject(io.vertx.core.json.JsonObject) Mockito.doReturn(org.mockito.Mockito.doReturn) PieceStorageService(org.folio.service.pieces.PieceStorageService) BASE_MOCK_DATA_PATH(org.folio.rest.impl.MockServer.BASE_MOCK_DATA_PATH) OpenCompositeOrderHolderBuilder(org.folio.service.orders.flows.update.open.OpenCompositeOrderHolderBuilder) TILES_PATH(org.folio.TestConstants.TILES_PATH) OpenCompositeOrderPieceService(org.folio.service.orders.flows.update.open.OpenCompositeOrderPieceService) TestConfig.clearServiceInteractions(org.folio.TestConfig.clearServiceInteractions) Location(org.folio.rest.jaxrs.model.Location) UUID(java.util.UUID) TestConfig.isVerticleNotDeployed(org.folio.TestConfig.isVerticleNotDeployed) Test(org.junit.jupiter.api.Test) List(java.util.List) Eresource(org.folio.rest.jaxrs.model.Eresource) CompositePoLine(org.folio.rest.jaxrs.model.CompositePoLine) Mockito.mock(org.mockito.Mockito.mock) ArgumentMatchers.any(org.mockito.ArgumentMatchers.any) TestConfig.getFirstContextFromVertx(org.folio.TestConfig.getFirstContextFromVertx) Assertions.assertNotNull(org.junit.jupiter.api.Assertions.assertNotNull) CsvSource(org.junit.jupiter.params.provider.CsvSource) PieceChangeReceiptStatusPublisher(org.folio.service.pieces.PieceChangeReceiptStatusPublisher) Mock(org.mockito.Mock) ProtectedOperationType(org.folio.orders.utils.ProtectedOperationType) Assertions.assertNull(org.junit.jupiter.api.Assertions.assertNull) CompletableFuture(java.util.concurrent.CompletableFuture) TestConfig.clearVertxContext(org.folio.TestConfig.clearVertxContext) Mockito.spy(org.mockito.Mockito.spy) ArrayList(java.util.ArrayList) Title(org.folio.rest.jaxrs.model.Title) Answer(org.mockito.stubbing.Answer) TitlesService(org.folio.service.titles.TitlesService) ArgumentCaptor(org.mockito.ArgumentCaptor) PIECE_PATH(org.folio.TestConstants.PIECE_PATH) CompositePurchaseOrder(org.folio.rest.jaxrs.model.CompositePurchaseOrder) RequestContext(org.folio.rest.core.models.RequestContext) TestConfig.autowireDependencies(org.folio.TestConfig.autowireDependencies) InventoryManager(org.folio.service.inventory.InventoryManager) Assertions.assertEquals(org.junit.jupiter.api.Assertions.assertEquals) Physical(org.folio.rest.jaxrs.model.Physical) ORDER_PATH(org.folio.service.orders.flows.unopen.UnOpenCompositeOrderManagerTest.ORDER_PATH) MessageAddress(org.folio.orders.events.handlers.MessageAddress) Piece(org.folio.rest.jaxrs.model.Piece) TestConfig.initSpringContext(org.folio.TestConfig.initSpringContext) Mockito.times(org.mockito.Mockito.times) Mockito.verify(org.mockito.Mockito.verify) ExecutionException(java.util.concurrent.ExecutionException) Collectors.toList(java.util.stream.Collectors.toList) AfterEach(org.junit.jupiter.api.AfterEach) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest) Bean(org.springframework.context.annotation.Bean) Collections(java.util.Collections) TestUtils.getMockAsJson(org.folio.TestUtils.getMockAsJson) ArrayList(java.util.ArrayList) CompositePoLine(org.folio.rest.jaxrs.model.CompositePoLine) CompositePurchaseOrder(org.folio.rest.jaxrs.model.CompositePurchaseOrder) Cost(org.folio.rest.jaxrs.model.Cost) Eresource(org.folio.rest.jaxrs.model.Eresource) Physical(org.folio.rest.jaxrs.model.Physical) CompletableFuture(java.util.concurrent.CompletableFuture) Piece(org.folio.rest.jaxrs.model.Piece) List(java.util.List) ArrayList(java.util.ArrayList) Collectors.toList(java.util.stream.Collectors.toList) ProtectedOperationType(org.folio.orders.utils.ProtectedOperationType) Location(org.folio.rest.jaxrs.model.Location) CsvSource(org.junit.jupiter.params.provider.CsvSource) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest)

Example 4 with Physical

use of org.folio.rest.jaxrs.model.Physical in project mod-orders by folio-org.

the class PurchaseOrdersApiTest method testPostOpenOrderInventoryUpdateWithOrderFormatOther.

@Test
@Disabled
// TODO must be fixed in scope of https://issues.folio.org/browse/MODORDERS-587
void testPostOpenOrderInventoryUpdateWithOrderFormatOther() throws Exception {
    logger.info("=== Test POST Order By Id to change status of Order to Open - inventory interaction required only for first POL ===");
    // Get Open Order
    CompositePurchaseOrder reqData = getMockDraftOrder().mapTo(CompositePurchaseOrder.class);
    MockServer.addMockTitles(reqData.getCompositePoLines());
    // Make sure that mock po has 2 po lines
    assertThat(reqData.getCompositePoLines(), hasSize(2));
    // Make sure that mock po has the first PO line with 3 locations
    assertThat(reqData.getCompositePoLines().get(0).getLocations(), hasSize(3));
    // Make sure that Order moves to Open
    reqData.setWorkflowStatus(CompositePurchaseOrder.WorkflowStatus.OPEN);
    // Prepare second POL
    CompositePoLine secondPol = reqData.getCompositePoLines().get(1);
    List<Location> secondPolLocations = secondPol.getLocations();
    // MODORDERS-117 Setting OrderFormat to OTHER which means it behaves similar
    // to Physical order
    secondPol.setOrderFormat(CompositePoLine.OrderFormat.OTHER);
    Physical physical = new Physical();
    physical.setCreateInventory(CreateInventory.NONE);
    secondPol.setPhysical(physical);
    // Specify correct quantities for OTHER format
    secondPol.getCost().setQuantityElectronic(0);
    secondPol.getCost().setListUnitPriceElectronic(null);
    secondPol.getCost().setListUnitPrice(10d);
    secondPol.getCost().setQuantityPhysical(secondPolLocations.size());
    secondPol.setEresource(null);
    secondPolLocations.forEach(location -> {
        location.setQuantityElectronic(0);
        location.setQuantityPhysical(1);
    });
    LocalDate now = LocalDate.now();
    final CompositePurchaseOrder resp = verifyPostResponse(COMPOSITE_ORDERS_PATH, JsonObject.mapFrom(reqData).toString(), prepareHeaders(EXIST_CONFIG_X_OKAPI_TENANT_LIMIT_10, X_OKAPI_USER_ID), APPLICATION_JSON, 201).as(CompositePurchaseOrder.class);
    LocalDate dateOrdered = resp.getDateOrdered().toInstant().atZone(ZoneId.of(ZoneOffset.UTC.getId())).toLocalDate();
    assertThat(dateOrdered.getMonth(), equalTo(now.getMonth()));
    assertThat(dateOrdered.getYear(), equalTo(now.getYear()));
    // Check that search of the existing instances and items was done for first PO line only
    List<JsonObject> instancesSearches = getInstancesSearches();
    List<JsonObject> holdingsSearches = getHoldingsSearches();
    List<JsonObject> itemsSearches = getItemsSearches();
    assertNotNull(instancesSearches);
    assertNull(holdingsSearches);
    assertNotNull(itemsSearches);
    assertEquals(1, instancesSearches.size());
    CompositePoLine respLine1 = resp.getCompositePoLines().get(0);
    respLine1.getLocations().forEach(location -> {
        assertNull(location.getLocationId());
        assertNotNull(location.getHoldingId());
    });
    CompositePoLine respLine2 = resp.getCompositePoLines().get(1);
    respLine2.getLocations().forEach(location -> {
        assertNotNull(location.getLocationId());
        assertNull(location.getHoldingId());
    });
    List<JsonObject> createdInstances = getCreatedInstances();
    assertEquals(1, createdInstances.size(), "Quantity of created instance must be equal of line, if create inventory include instance");
    assertNotNull("Line must be connected to instance, if create inventory include instance", respLine1.getInstanceId());
    assertNotNull("Line must be connected to instance, if create inventory include instance", respLine2.getInstanceId());
    List<JsonObject> createdHoldings = getCreatedHoldings();
    assertEquals(3, createdHoldings.size(), "Quantity of created instance must be depended of quantity in the locations and create inventory include holding");
    verifyHoldingsCreated(3, createdHoldings, respLine1);
    verifyHoldingsCreated(0, createdHoldings, respLine2);
    // All existing and created items
    List<JsonObject> items = joinExistingAndNewItems();
    verifyItemsCreated(EXIST_CONFIG_X_OKAPI_TENANT_LIMIT_10, 4, items, respLine1);
    verifyItemsCreated(EXIST_CONFIG_X_OKAPI_TENANT_LIMIT_10, 0, items, respLine2);
    List<JsonObject> createdPieces = getCreatedPieces();
    createdPieces.stream().map(json -> json.mapTo(Piece.class)).filter(piece -> !OTHER.equals(piece.getFormat())).forEach(piece -> {
        assertNull(piece.getLocationId());
        assertNotNull(piece.getHoldingId());
    });
    createdPieces.stream().map(json -> json.mapTo(Piece.class)).filter(piece -> OTHER.equals(piece.getFormat())).forEach(piece -> {
        assertNotNull(piece.getLocationId());
        assertNull(piece.getHoldingId());
    });
    verifyOpenOrderPiecesCreated(items, resp.getCompositePoLines(), createdPieces, 4);
    verifyCalculatedData(resp);
}
Also used : PO_ID_OPEN_TO_BE_CLOSED(org.folio.TestConstants.PO_ID_OPEN_TO_BE_CLOSED) BeforeEach(org.junit.jupiter.api.BeforeEach) PO_WFD_ID_OPEN_STATUS(org.folio.TestConstants.PO_WFD_ID_OPEN_STATUS) ID_BAD_FORMAT(org.folio.TestConstants.ID_BAD_FORMAT) TestUtils.validatePoLineCreationErrorForNonPendingOrder(org.folio.TestUtils.validatePoLineCreationErrorForNonPendingOrder) INVALID_CONFIG_X_OKAPI_TENANT(org.folio.TestConstants.INVALID_CONFIG_X_OKAPI_TENANT) StringUtils(org.apache.commons.lang3.StringUtils) ApiTestSuite(org.folio.ApiTestSuite) ZERO_LOCATION_QTY(org.folio.rest.core.exceptions.ErrorCodes.ZERO_LOCATION_QTY) Mockito.doAnswer(org.mockito.Mockito.doAnswer) Map(java.util.Map) EMPTY_CONFIG_X_OKAPI_TENANT(org.folio.TestConstants.EMPTY_CONFIG_X_OKAPI_TENANT) ZoneOffset(java.time.ZoneOffset) ORDER_VENDOR_NOT_FOUND(org.folio.rest.core.exceptions.ErrorCodes.ORDER_VENDOR_NOT_FOUND) Errors(org.folio.rest.jaxrs.model.Errors) TestConfig.clearServiceInteractions(org.folio.TestConfig.clearServiceInteractions) ID_FOR_INTERNAL_SERVER_ERROR(org.folio.TestConstants.ID_FOR_INTERNAL_SERVER_ERROR) Matchers.notNullValue(org.hamcrest.Matchers.notNullValue) ORDER_CLOSED(org.folio.rest.core.exceptions.ErrorCodes.ORDER_CLOSED) Metadata(org.folio.rest.acq.model.finance.Metadata) VENDOR_ISSUE(org.folio.rest.core.exceptions.ErrorCodes.VENDOR_ISSUE) ErrorCodes(org.folio.rest.core.exceptions.ErrorCodes) OTHER(org.folio.rest.jaxrs.model.Piece.Format.OTHER) ZoneId(java.time.ZoneId) TestConfig.mockPort(org.folio.TestConfig.mockPort) Logger(org.apache.logging.log4j.Logger) Eresource(org.folio.rest.jaxrs.model.Eresource) CompositePoLine(org.folio.rest.jaxrs.model.CompositePoLine) MIN_PO_ID(org.folio.TestConstants.MIN_PO_ID) PO_LINES_STORAGE(org.folio.orders.utils.ResourcePathResolver.PO_LINES_STORAGE) MockServer.addMockEntry(org.folio.rest.impl.MockServer.addMockEntry) POProtectedFields(org.folio.orders.utils.POProtectedFields) Assertions.assertNotNull(org.junit.jupiter.api.Assertions.assertNotNull) RestClient(org.folio.rest.core.RestClient) INACTIVE_ACCESS_PROVIDER_B(org.folio.TestConstants.INACTIVE_ACCESS_PROVIDER_B) INACTIVE_ACCESS_PROVIDER_A(org.folio.TestConstants.INACTIVE_ACCESS_PROVIDER_A) HelperUtils.calculateInventoryItemsQuantity(org.folio.orders.utils.HelperUtils.calculateInventoryItemsQuantity) PaymentStatus(org.folio.rest.acq.model.PaymentStatus) BUDGET_IS_INACTIVE_TENANT(org.folio.rest.impl.MockServer.BUDGET_IS_INACTIVE_TENANT) ACQUISITIONS_MEMBERSHIPS(org.folio.orders.utils.ResourcePathResolver.ACQUISITIONS_MEMBERSHIPS) Contributor(org.folio.rest.jaxrs.model.Contributor) Every(org.hamcrest.core.Every) Headers(io.restassured.http.Headers) ZERO_COST_ELECTRONIC_QTY(org.folio.rest.core.exceptions.ErrorCodes.ZERO_COST_ELECTRONIC_QTY) OrderFormat(org.folio.rest.jaxrs.model.CompositePoLine.OrderFormat) Answer(org.mockito.stubbing.Answer) MockServer.getHoldingsSearches(org.folio.rest.impl.MockServer.getHoldingsSearches) RestTestUtils.verifySuccessGet(org.folio.RestTestUtils.verifySuccessGet) Matchers.hasSize(org.hamcrest.Matchers.hasSize) MatcherAssert.assertThat(org.hamcrest.MatcherAssert.assertThat) PO_LINES_EMPTY_COLLECTION_ID(org.folio.rest.impl.MockServer.PO_LINES_EMPTY_COLLECTION_ID) Physical(org.folio.rest.jaxrs.model.Physical) EXIST_CONFIG_X_OKAPI_TENANT_LIMIT_10(org.folio.TestConstants.EXIST_CONFIG_X_OKAPI_TENANT_LIMIT_10) RestTestUtils.verifyPostResponse(org.folio.RestTestUtils.verifyPostResponse) ELECTRONIC_COST_LOC_QTY_MISMATCH(org.folio.rest.core.exceptions.ErrorCodes.ELECTRONIC_COST_LOC_QTY_MISMATCH) MockServer.getPieceSearches(org.folio.rest.impl.MockServer.getPieceSearches) MockServer.getCreatedOrderSummaries(org.folio.rest.impl.MockServer.getCreatedOrderSummaries) PO_LINE_NUMBER(org.folio.orders.utils.ResourcePathResolver.PO_LINE_NUMBER) HelperUtils(org.folio.orders.utils.HelperUtils) TestConfig.initSpringContext(org.folio.TestConfig.initSpringContext) Vertx(io.vertx.core.Vertx) RequestEntry(org.folio.rest.core.models.RequestEntry) IOException(java.io.IOException) X_OKAPI_URL(org.folio.TestConfig.X_OKAPI_URL) BUDGET_NOT_FOUND_FOR_TRANSACTION(org.folio.rest.core.exceptions.ErrorCodes.BUDGET_NOT_FOUND_FOR_TRANSACTION) ITEM_RECORDS(org.folio.rest.impl.MockServer.ITEM_RECORDS) ACQUISITIONS_UNITS(org.folio.orders.utils.ResourcePathResolver.ACQUISITIONS_UNITS) ExecutionException(java.util.concurrent.ExecutionException) PO_LINE_ID_FOR_SUCCESS_CASE(org.folio.TestConstants.PO_LINE_ID_FOR_SUCCESS_CASE) LEDGER_NOT_FOUND_FOR_TRANSACTION_TENANT(org.folio.rest.impl.MockServer.LEDGER_NOT_FOUND_FOR_TRANSACTION_TENANT) AfterEach(org.junit.jupiter.api.AfterEach) BUDGET_NOT_FOUND_FOR_TRANSACTION_TENANT(org.folio.rest.impl.MockServer.BUDGET_NOT_FOUND_FOR_TRANSACTION_TENANT) InventoryInteractionTestHelper.verifyPiecesCreated(org.folio.helper.InventoryInteractionTestHelper.verifyPiecesCreated) TestUtils.getMinimalContentCompositePoLine(org.folio.TestUtils.getMinimalContentCompositePoLine) PHYSICAL(org.folio.rest.jaxrs.model.Piece.Format.PHYSICAL) ENCUMBRANCE_PATH(org.folio.rest.impl.MockServer.ENCUMBRANCE_PATH) MockServer.getInstancesSearches(org.folio.rest.impl.MockServer.getInstancesSearches) PO_ID_PENDING_STATUS_WITH_PO_LINES(org.folio.TestConstants.PO_ID_PENDING_STATUS_WITH_PO_LINES) EXIST_CONFIG_X_OKAPI_TENANT_LIMIT_1(org.folio.TestConstants.EXIST_CONFIG_X_OKAPI_TENANT_LIMIT_1) FUND_CANNOT_BE_PAID_TENANT(org.folio.rest.impl.MockServer.FUND_CANNOT_BE_PAID_TENANT) Date(java.util.Date) CompletableFuture.completedFuture(java.util.concurrent.CompletableFuture.completedFuture) X_OKAPI_USER_ID(org.folio.TestConstants.X_OKAPI_USER_ID) TITLES(org.folio.orders.utils.ResourcePathResolver.TITLES) TestUtils.getInstanceId(org.folio.TestUtils.getInstanceId) Context(io.vertx.core.Context) ISBN_NOT_VALID(org.folio.rest.core.exceptions.ErrorCodes.ISBN_NOT_VALID) MockServer.getPurchaseOrderUpdates(org.folio.rest.impl.MockServer.getPurchaseOrderUpdates) MockServer.getCreatedItems(org.folio.rest.impl.MockServer.getCreatedItems) ReceiptStatus(org.folio.rest.jaxrs.model.CompositePoLine.ReceiptStatus) TestUtils(org.folio.TestUtils) ID(org.folio.TestConstants.ID) Location(org.folio.rest.jaxrs.model.Location) ORDER_VENDOR_IS_INACTIVE(org.folio.rest.core.exceptions.ErrorCodes.ORDER_VENDOR_IS_INACTIVE) ONGOING_NOT_ALLOWED(org.folio.rest.core.exceptions.ErrorCodes.ONGOING_NOT_ALLOWED) PurchaseOrder(org.folio.rest.jaxrs.model.PurchaseOrder) UUID(java.util.UUID) PO_ID_CLOSED_STATUS(org.folio.TestConstants.PO_ID_CLOSED_STATUS) Collectors(java.util.stream.Collectors) Objects(java.util.Objects) Test(org.junit.jupiter.api.Test) ERROR_CAUSE(org.folio.helper.AbstractHelper.ERROR_CAUSE) Matchers.containsInAnyOrder(org.hamcrest.Matchers.containsInAnyOrder) Matchers.equalTo(org.hamcrest.Matchers.equalTo) LocalDate(java.time.LocalDate) POLineFieldNames(org.folio.orders.utils.POLineFieldNames) ACTIVE_ACCESS_PROVIDER_B(org.folio.TestConstants.ACTIVE_ACCESS_PROVIDER_B) POL_LINES_LIMIT_EXCEEDED(org.folio.rest.core.exceptions.ErrorCodes.POL_LINES_LIMIT_EXCEEDED) ACTIVE_ACCESS_PROVIDER_A(org.folio.TestConstants.ACTIVE_ACCESS_PROVIDER_A) InventoryInteractionTestHelper.verifyPiecesQuantityForSuccessCase(org.folio.helper.InventoryInteractionTestHelper.verifyPiecesQuantityForSuccessCase) ZERO_COST_PHYSICAL_QTY(org.folio.rest.core.exceptions.ErrorCodes.ZERO_COST_PHYSICAL_QTY) TestUtils.getMockData(org.folio.TestUtils.getMockData) InventoryInteractionTestHelper.verifyHoldingsCreated(org.folio.helper.InventoryInteractionTestHelper.verifyHoldingsCreated) VENDOR_ID(org.folio.orders.utils.ResourcePathResolver.VENDOR_ID) MISSING_MATERIAL_TYPE(org.folio.rest.core.exceptions.ErrorCodes.MISSING_MATERIAL_TYPE) Encumbrance(org.folio.rest.acq.model.finance.Encumbrance) Matchers.empty(org.hamcrest.Matchers.empty) TestUtils.verifyLocationQuantity(org.folio.TestUtils.verifyLocationQuantity) PO_ID_PENDING_STATUS_WITHOUT_PO_LINES(org.folio.TestConstants.PO_ID_PENDING_STATUS_WITHOUT_PO_LINES) InventoryInteractionTestHelper.verifyItemsCreated(org.folio.helper.InventoryInteractionTestHelper.verifyItemsCreated) MockServer.getLoanTypesSearches(org.folio.rest.impl.MockServer.getLoanTypesSearches) CloseReason(org.folio.rest.jaxrs.model.CloseReason) NON_ZERO_COST_ELECTRONIC_QTY(org.folio.rest.core.exceptions.ErrorCodes.NON_ZERO_COST_ELECTRONIC_QTY) Error(org.folio.rest.jaxrs.model.Error) Collectors.toList(java.util.stream.Collectors.toList) Response(io.restassured.response.Response) ApplicationConfig(org.folio.config.ApplicationConfig) INVALID_LANG(org.folio.TestConstants.INVALID_LANG) POL_ACCESS_PROVIDER_IS_INACTIVE(org.folio.rest.core.exceptions.ErrorCodes.POL_ACCESS_PROVIDER_IS_INACTIVE) LogManager(org.apache.logging.log4j.LogManager) MockServer.getCreatedHoldings(org.folio.rest.impl.MockServer.getCreatedHoldings) MockServer.getInstanceTypesSearches(org.folio.rest.impl.MockServer.getInstanceTypesSearches) Arrays(java.util.Arrays) HelperUtils.calculateTotalQuantity(org.folio.orders.utils.HelperUtils.calculateTotalQuantity) COST_UNIT_PRICE_ELECTRONIC_INVALID(org.folio.rest.core.exceptions.ErrorCodes.COST_UNIT_PRICE_ELECTRONIC_INVALID) Matchers.not(org.hamcrest.Matchers.not) Header(io.restassured.http.Header) NON_EXIST_CONFIG_X_OKAPI_TENANT(org.folio.TestConstants.NON_EXIST_CONFIG_X_OKAPI_TENANT) Disabled(org.junit.jupiter.api.Disabled) TransactionCollection(org.folio.rest.acq.model.finance.TransactionCollection) Is(org.hamcrest.core.Is) AfterAll(org.junit.jupiter.api.AfterAll) BigDecimal(java.math.BigDecimal) MockitoAnnotations(org.mockito.MockitoAnnotations) InventoryInteractionTestHelper.joinExistingAndNewItems(org.folio.helper.InventoryInteractionTestHelper.joinExistingAndNewItems) Matcher(java.util.regex.Matcher) BUDGET_EXPENSE_CLASS_NOT_FOUND(org.folio.rest.core.exceptions.ErrorCodes.BUDGET_EXPENSE_CLASS_NOT_FOUND) BeforeAll(org.junit.jupiter.api.BeforeAll) Matchers.nullValue(org.hamcrest.Matchers.nullValue) JsonObject(io.vertx.core.json.JsonObject) OKAPI_URL(org.folio.rest.RestConstants.OKAPI_URL) Mockito.doReturn(org.mockito.Mockito.doReturn) MISSING_ONGOING(org.folio.rest.core.exceptions.ErrorCodes.MISSING_ONGOING) RestTestUtils.verifyPut(org.folio.RestTestUtils.verifyPut) Set(java.util.Set) RestTestUtils.verifyDeleteResponse(org.folio.RestTestUtils.verifyDeleteResponse) Fund(org.folio.rest.acq.model.finance.Fund) Matchers.startsWith(org.hamcrest.Matchers.startsWith) TestConfig.isVerticleNotDeployed(org.folio.TestConfig.isVerticleNotDeployed) COST_UNIT_PRICE_INVALID(org.folio.rest.core.exceptions.ErrorCodes.COST_UNIT_PRICE_INVALID) PROTECTED_READ_ONLY_TENANT(org.folio.TestConstants.PROTECTED_READ_ONLY_TENANT) X_OKAPI_TOKEN(org.folio.TestConstants.X_OKAPI_TOKEN) PO_NUMBER(org.folio.orders.utils.ResourcePathResolver.PO_NUMBER) FinanceInteractionsTestHelper.verifyEncumbrancesOnPoUpdate(org.folio.helper.FinanceInteractionsTestHelper.verifyEncumbrancesOnPoUpdate) Assertions.assertTrue(org.junit.jupiter.api.Assertions.assertTrue) Matchers.greaterThan(org.hamcrest.Matchers.greaterThan) Matchers.is(org.hamcrest.Matchers.is) TEXT_PLAIN(javax.ws.rs.core.MediaType.TEXT_PLAIN) Matchers.containsString(org.hamcrest.Matchers.containsString) Matchers.endsWith(org.hamcrest.Matchers.endsWith) COMPOSITE_PO_LINES_PREFIX(org.folio.TestConstants.COMPOSITE_PO_LINES_PREFIX) CreateInventory(org.folio.rest.jaxrs.model.Physical.CreateInventory) Mock(org.mockito.Mock) ID_DOES_NOT_EXIST(org.folio.TestConstants.ID_DOES_NOT_EXIST) Assertions.assertNull(org.junit.jupiter.api.Assertions.assertNull) TransactionService(org.folio.service.finance.transaction.TransactionService) MockServer.getExistingOrderSummaries(org.folio.rest.impl.MockServer.getExistingOrderSummaries) Transaction(org.folio.rest.acq.model.finance.Transaction) MockServer.getCreatedEncumbrances(org.folio.rest.impl.MockServer.getCreatedEncumbrances) PAYMENT_STATUS(org.folio.orders.utils.ResourcePathResolver.PAYMENT_STATUS) ArrayList(java.util.ArrayList) MockServer.getQueryParams(org.folio.rest.impl.MockServer.getQueryParams) INSTANCE_TYPE_CONTAINS_CODE_AS_INSTANCE_STATUS_TENANT_HEADER(org.folio.TestConstants.INSTANCE_TYPE_CONTAINS_CODE_AS_INSTANCE_STATUS_TENANT_HEADER) InvocationOnMock(org.mockito.invocation.InvocationOnMock) OKAPI_HEADER_PERMISSIONS(org.folio.helper.PurchaseOrderHelper.OKAPI_HEADER_PERMISSIONS) Matchers.lessThan(org.hamcrest.Matchers.lessThan) Assertions.assertEquals(org.junit.jupiter.api.Assertions.assertEquals) InventoryInteractionTestHelper.verifyInventoryInteraction(org.folio.helper.InventoryInteractionTestHelper.verifyInventoryInteraction) InjectMocks(org.mockito.InjectMocks) COMP_ORDER_MOCK_DATA_PATH(org.folio.TestConstants.COMP_ORDER_MOCK_DATA_PATH) RestTestUtils.verifyGet(org.folio.RestTestUtils.verifyGet) Piece(org.folio.rest.jaxrs.model.Piece) COMPOSITE_PO_LINES(org.folio.orders.utils.HelperUtils.COMPOSITE_PO_LINES) Assertions.assertArrayEquals(org.junit.jupiter.api.Assertions.assertArrayEquals) JsonArray(io.vertx.core.json.JsonArray) AcqDesiredPermissions(org.folio.orders.utils.AcqDesiredPermissions) TestUtils.getMockAsJson(org.folio.TestUtils.getMockAsJson) GENERIC_ERROR_CODE(org.folio.rest.core.exceptions.ErrorCodes.GENERIC_ERROR_CODE) Cost(org.folio.rest.jaxrs.model.Cost) MockServer.getItemsSearches(org.folio.rest.impl.MockServer.getItemsSearches) MockServer.getContributorNameTypesSearches(org.folio.rest.impl.MockServer.getContributorNameTypesSearches) TimeoutException(java.util.concurrent.TimeoutException) PoLine(org.folio.rest.jaxrs.model.PoLine) Ongoing(org.folio.rest.acq.model.Ongoing) MISMATCH_BETWEEN_ID_IN_PATH_AND_BODY(org.folio.rest.core.exceptions.ErrorCodes.MISMATCH_BETWEEN_ID_IN_PATH_AND_BODY) MockServer.getItemUpdates(org.folio.rest.impl.MockServer.getItemUpdates) FUNDS(org.folio.orders.utils.ResourcePathResolver.FUNDS) Assertions.assertFalse(org.junit.jupiter.api.Assertions.assertFalse) StringUtils.containsAny(org.apache.commons.lang3.StringUtils.containsAny) TestUtils.getMinimalContentCompositePurchaseOrder(org.folio.TestUtils.getMinimalContentCompositePurchaseOrder) InventoryInteractionTestHelper.verifyOpenOrderPiecesCreated(org.folio.helper.InventoryInteractionTestHelper.verifyOpenOrderPiecesCreated) APPLICATION_JSON(javax.ws.rs.core.MediaType.APPLICATION_JSON) BAD_QUERY(org.folio.TestConstants.BAD_QUERY) NON_EXIST_LOAN_TYPE_TENANT_HEADER(org.folio.TestConstants.NON_EXIST_LOAN_TYPE_TENANT_HEADER) RestTestUtils.checkPreventProtectedFieldsModificationRule(org.folio.RestTestUtils.checkPreventProtectedFieldsModificationRule) PIECES_TO_BE_DELETED(org.folio.rest.core.exceptions.ErrorCodes.PIECES_TO_BE_DELETED) FundDistribution(org.folio.rest.jaxrs.model.FundDistribution) HasPropertyWithValue(org.hamcrest.beans.HasPropertyWithValue) INSTANCE_ID_NOT_ALLOWED_FOR_PACKAGE_POLINE(org.folio.rest.core.exceptions.ErrorCodes.INSTANCE_ID_NOT_ALLOWED_FOR_PACKAGE_POLINE) InventoryInteractionTestHelper.verifyInventoryNonInteraction(org.folio.helper.InventoryInteractionTestHelper.verifyInventoryNonInteraction) InventoryInteractionTestHelper.verifyInstanceLinksForUpdatedOrder(org.folio.helper.InventoryInteractionTestHelper.verifyInstanceLinksForUpdatedOrder) PO_ID_OPEN_STATUS(org.folio.TestConstants.PO_ID_OPEN_STATUS) List(java.util.List) DistributionType(org.folio.rest.jaxrs.model.FundDistribution.DistributionType) EncumbranceService(org.folio.service.finance.transaction.EncumbranceService) Parameter(org.folio.rest.jaxrs.model.Parameter) Pattern(java.util.regex.Pattern) AcquisitionsUnitMembershipCollection(org.folio.rest.jaxrs.model.AcquisitionsUnitMembershipCollection) PIECES_STORAGE(org.folio.orders.utils.ResourcePathResolver.PIECES_STORAGE) RECEIPT_STATUS(org.folio.orders.utils.ResourcePathResolver.RECEIPT_STATUS) ORGANIZATION_NOT_A_VENDOR(org.folio.rest.core.exceptions.ErrorCodes.ORGANIZATION_NOT_A_VENDOR) X_ECHO_STATUS(org.folio.TestConstants.X_ECHO_STATUS) OKAPI_HEADER_TENANT(org.folio.rest.RestVerticle.OKAPI_HEADER_TENANT) HashMap(java.util.HashMap) PO_LINE_NUMBER_VALUE(org.folio.TestConstants.PO_LINE_NUMBER_VALUE) MockServer.getCreatedInstances(org.folio.rest.impl.MockServer.getCreatedInstances) MockServer.getCreatedPieces(org.folio.rest.impl.MockServer.getCreatedPieces) Title(org.folio.rest.jaxrs.model.Title) CompositePurchaseOrder(org.folio.rest.jaxrs.model.CompositePurchaseOrder) ObjectUtils(org.apache.commons.lang3.ObjectUtils) RequestContext(org.folio.rest.core.models.RequestContext) EMPTY(org.apache.commons.lang3.StringUtils.EMPTY) RestTestUtils.prepareHeaders(org.folio.RestTestUtils.prepareHeaders) PURCHASE_ORDER_STORAGE(org.folio.orders.utils.ResourcePathResolver.PURCHASE_ORDER_STORAGE) PO_ID_OPEN_TO_CANCEL(org.folio.TestConstants.PO_ID_OPEN_TO_CANCEL) INCORRECT_FUND_DISTRIBUTION_TOTAL(org.folio.rest.core.exceptions.ErrorCodes.INCORRECT_FUND_DISTRIBUTION_TOTAL) PHYSICAL_COST_LOC_QTY_MISMATCH(org.folio.rest.core.exceptions.ErrorCodes.PHYSICAL_COST_LOC_QTY_MISMATCH) NON_EXIST_INSTANCE_STATUS_TENANT_HEADER(org.folio.TestConstants.NON_EXIST_INSTANCE_STATUS_TENANT_HEADER) INACTIVE_EXPENSE_CLASS(org.folio.rest.core.exceptions.ErrorCodes.INACTIVE_EXPENSE_CLASS) MockServer.getInstanceStatusesSearches(org.folio.rest.impl.MockServer.getInstanceStatusesSearches) PurchaseOrderCollection(org.folio.rest.jaxrs.model.PurchaseOrderCollection) HttpMethod(io.vertx.core.http.HttpMethod) HttpStatus(org.folio.HttpStatus) X_OKAPI_USER_ID_WITH_ACQ_UNITS(org.folio.TestConstants.X_OKAPI_USER_ID_WITH_ACQ_UNITS) NON_EXIST_INSTANCE_TYPE_TENANT_HEADER(org.folio.TestConstants.NON_EXIST_INSTANCE_TYPE_TENANT_HEADER) WorkflowStatus(org.folio.rest.jaxrs.model.CompositePurchaseOrder.WorkflowStatus) ELECTRONIC(org.folio.rest.jaxrs.model.Piece.Format.ELECTRONIC) Collections(java.util.Collections) ORDER_OPEN(org.folio.rest.core.exceptions.ErrorCodes.ORDER_OPEN) FinanceInteractionsTestHelper.verifyEncumbrancesOnPoCreation(org.folio.helper.FinanceInteractionsTestHelper.verifyEncumbrancesOnPoCreation) Physical(org.folio.rest.jaxrs.model.Physical) Piece(org.folio.rest.jaxrs.model.Piece) CompositePoLine(org.folio.rest.jaxrs.model.CompositePoLine) TestUtils.getMinimalContentCompositePoLine(org.folio.TestUtils.getMinimalContentCompositePoLine) JsonObject(io.vertx.core.json.JsonObject) TestUtils.getMinimalContentCompositePurchaseOrder(org.folio.TestUtils.getMinimalContentCompositePurchaseOrder) CompositePurchaseOrder(org.folio.rest.jaxrs.model.CompositePurchaseOrder) LocalDate(java.time.LocalDate) Location(org.folio.rest.jaxrs.model.Location) Test(org.junit.jupiter.api.Test) Disabled(org.junit.jupiter.api.Disabled)

Example 5 with Physical

use of org.folio.rest.jaxrs.model.Physical in project mod-orders by folio-org.

the class OpenCompositeOrderPieceServiceTest method shouldCreatePieceWithLocationReferenceIfLineContainsLocationAndInventoryIsInstanceOrNoneAndNoCreatedPieces.

@ParameterizedTest
@CsvSource(value = { "Physical Resource:Instance:2:3:Physical", "Physical Resource:None:2:3:Physical", "Other:Instance:2:3:Other", "Other:None:2:3:Other" }, delimiter = ':')
void shouldCreatePieceWithLocationReferenceIfLineContainsLocationAndInventoryIsInstanceOrNoneAndNoCreatedPieces(String lineType, String createInventory, int qty1, int qty2, String pieceFormat) {
    // given
    String lineId = UUID.randomUUID().toString();
    String locationId1 = UUID.randomUUID().toString();
    String locationId2 = UUID.randomUUID().toString();
    String titleId = UUID.randomUUID().toString();
    Location location1 = new Location().withLocationId(locationId1).withQuantityPhysical(qty1).withQuantity(qty1);
    Location location2 = new Location().withLocationId(locationId2).withQuantityPhysical(qty2).withQuantity(qty2);
    Cost cost = new Cost().withQuantityPhysical(qty1 + qty2).withQuantityElectronic(null);
    Physical physical = new Physical().withCreateInventory(Physical.CreateInventory.fromValue(createInventory));
    CompositePoLine line = new CompositePoLine().withId(lineId).withCost(cost).withLocations(List.of(location1, location2)).withIsPackage(false).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 -> piece.getLocationId().equals(locationId1)).collect(toList());
    assertEquals(qty1, piecesLoc1.size());
    piecesLoc1.forEach(piece -> {
        assertNull(piece.getHoldingId());
        assertNull(piece.getItemId());
        assertEquals(lineId, piece.getPoLineId());
        assertEquals(titleId, piece.getTitleId());
        assertEquals(Piece.Format.fromValue(pieceFormat), piece.getFormat());
    });
    List<Piece> piecesLoc2 = createdPieces.stream().filter(piece -> piece.getLocationId().equals(locationId2)).collect(toList());
    assertEquals(qty2, piecesLoc2.size());
    piecesLoc2.forEach(piece -> {
        assertNull(piece.getHoldingId());
        assertNull(piece.getItemId());
        assertEquals(lineId, piece.getPoLineId());
        assertEquals(titleId, piece.getTitleId());
        assertEquals(Piece.Format.fromValue(pieceFormat), piece.getFormat());
    });
}
Also used : BeforeEach(org.junit.jupiter.api.BeforeEach) Cost(org.folio.rest.jaxrs.model.Cost) TestConfig.getVertx(org.folio.TestConfig.getVertx) ArgumentMatchers.eq(org.mockito.ArgumentMatchers.eq) CompletableFuture.completedFuture(java.util.concurrent.CompletableFuture.completedFuture) PurchaseOrderStorageService(org.folio.service.orders.PurchaseOrderStorageService) TimeoutException(java.util.concurrent.TimeoutException) Autowired(org.springframework.beans.factory.annotation.Autowired) Context(io.vertx.core.Context) ApiTestSuite(org.folio.ApiTestSuite) AfterAll(org.junit.jupiter.api.AfterAll) MockitoAnnotations(org.mockito.MockitoAnnotations) ProtectionService(org.folio.service.ProtectionService) BeforeAll(org.junit.jupiter.api.BeforeAll) Mockito.doAnswer(org.mockito.Mockito.doAnswer) Map(java.util.Map) Spy(org.mockito.Spy) JsonObject(io.vertx.core.json.JsonObject) ORDER_PATH(org.folio.service.orders.flows.update.unopen.UnOpenCompositeOrderManagerTest.ORDER_PATH) Mockito.doReturn(org.mockito.Mockito.doReturn) PieceStorageService(org.folio.service.pieces.PieceStorageService) BASE_MOCK_DATA_PATH(org.folio.rest.impl.MockServer.BASE_MOCK_DATA_PATH) TILES_PATH(org.folio.TestConstants.TILES_PATH) TestConfig.clearServiceInteractions(org.folio.TestConfig.clearServiceInteractions) Location(org.folio.rest.jaxrs.model.Location) UUID(java.util.UUID) TestConfig.isVerticleNotDeployed(org.folio.TestConfig.isVerticleNotDeployed) Test(org.junit.jupiter.api.Test) List(java.util.List) Eresource(org.folio.rest.jaxrs.model.Eresource) CompositePoLine(org.folio.rest.jaxrs.model.CompositePoLine) Mockito.mock(org.mockito.Mockito.mock) ArgumentMatchers.any(org.mockito.ArgumentMatchers.any) TestConfig.getFirstContextFromVertx(org.folio.TestConfig.getFirstContextFromVertx) Assertions.assertNotNull(org.junit.jupiter.api.Assertions.assertNotNull) CsvSource(org.junit.jupiter.params.provider.CsvSource) PieceChangeReceiptStatusPublisher(org.folio.service.pieces.PieceChangeReceiptStatusPublisher) Mock(org.mockito.Mock) ProtectedOperationType(org.folio.orders.utils.ProtectedOperationType) Assertions.assertNull(org.junit.jupiter.api.Assertions.assertNull) CompletableFuture(java.util.concurrent.CompletableFuture) TestConfig.clearVertxContext(org.folio.TestConfig.clearVertxContext) Mockito.spy(org.mockito.Mockito.spy) ArrayList(java.util.ArrayList) Title(org.folio.rest.jaxrs.model.Title) Answer(org.mockito.stubbing.Answer) TitlesService(org.folio.service.titles.TitlesService) ArgumentCaptor(org.mockito.ArgumentCaptor) PIECE_PATH(org.folio.TestConstants.PIECE_PATH) CompositePurchaseOrder(org.folio.rest.jaxrs.model.CompositePurchaseOrder) RequestContext(org.folio.rest.core.models.RequestContext) TestConfig.autowireDependencies(org.folio.TestConfig.autowireDependencies) InventoryManager(org.folio.service.inventory.InventoryManager) Assertions.assertEquals(org.junit.jupiter.api.Assertions.assertEquals) Physical(org.folio.rest.jaxrs.model.Physical) MessageAddress(org.folio.orders.events.handlers.MessageAddress) Piece(org.folio.rest.jaxrs.model.Piece) TestConfig.initSpringContext(org.folio.TestConfig.initSpringContext) Mockito.times(org.mockito.Mockito.times) Mockito.verify(org.mockito.Mockito.verify) ExecutionException(java.util.concurrent.ExecutionException) Collectors.toList(java.util.stream.Collectors.toList) AfterEach(org.junit.jupiter.api.AfterEach) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest) Bean(org.springframework.context.annotation.Bean) Collections(java.util.Collections) TestUtils.getMockAsJson(org.folio.TestUtils.getMockAsJson) CompositePoLine(org.folio.rest.jaxrs.model.CompositePoLine) CompositePurchaseOrder(org.folio.rest.jaxrs.model.CompositePurchaseOrder) Cost(org.folio.rest.jaxrs.model.Cost) Physical(org.folio.rest.jaxrs.model.Physical) CompletableFuture(java.util.concurrent.CompletableFuture) Piece(org.folio.rest.jaxrs.model.Piece) List(java.util.List) ArrayList(java.util.ArrayList) Collectors.toList(java.util.stream.Collectors.toList) ProtectedOperationType(org.folio.orders.utils.ProtectedOperationType) Location(org.folio.rest.jaxrs.model.Location) CsvSource(org.junit.jupiter.params.provider.CsvSource) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest)

Aggregations

Physical (org.folio.rest.jaxrs.model.Physical)54 Test (org.junit.jupiter.api.Test)51 CompositePoLine (org.folio.rest.jaxrs.model.CompositePoLine)43 Cost (org.folio.rest.jaxrs.model.Cost)42 Piece (org.folio.rest.jaxrs.model.Piece)42 Location (org.folio.rest.jaxrs.model.Location)39 PoLine (org.folio.rest.jaxrs.model.PoLine)28 PurchaseOrder (org.folio.rest.jaxrs.model.PurchaseOrder)27 Eresource (org.folio.rest.jaxrs.model.Eresource)25 CompositePurchaseOrder (org.folio.rest.jaxrs.model.CompositePurchaseOrder)24 ArrayList (java.util.ArrayList)23 JsonObject (io.vertx.core.json.JsonObject)20 ParameterizedTest (org.junit.jupiter.params.ParameterizedTest)19 Title (org.folio.rest.jaxrs.model.Title)15 DisplayName (org.junit.jupiter.api.DisplayName)15 Context (io.vertx.core.Context)11 Collections (java.util.Collections)11 List (java.util.List)11 Map (java.util.Map)11 UUID (java.util.UUID)11