use of org.folio.rest.acq.model.orders.CompositePoLine in project mod-invoice by folio-org.
the class OrderServiceTest method shouldDeleteOrderInvoiceRelationshipByInvoiceIdAndLineIdIfRelationExist.
@Test
void shouldDeleteOrderInvoiceRelationshipByInvoiceIdAndLineIdIfRelationExist() {
String invoiceId = UUID.randomUUID().toString();
String poLineId = UUID.randomUUID().toString();
String orderId = UUID.randomUUID().toString();
CompositePoLine poLine = new CompositePoLine().withId(poLineId).withPurchaseOrderId(orderId);
OrderInvoiceRelationship relationship = new OrderInvoiceRelationship().withInvoiceId(invoiceId).withPurchaseOrderId(orderId);
OrderInvoiceRelationshipCollection relationships = new OrderInvoiceRelationshipCollection().withOrderInvoiceRelationships(List.of(relationship)).withTotalRecords(1);
doReturn(completedFuture(poLine)).when(restClient).get(any(RequestEntry.class), eq(requestContextMock), eq(CompositePoLine.class));
doReturn(completedFuture(relationships)).when(restClient).get(any(RequestEntry.class), eq(requestContextMock), eq(OrderInvoiceRelationshipCollection.class));
doReturn(completedFuture(null)).when(restClient).delete(any(RequestEntry.class), eq(requestContextMock));
doReturn(completedFuture(poLine)).when(orderLineService).getPoLine(poLineId, requestContextMock);
orderService.deleteOrderInvoiceRelationshipByInvoiceIdAndLineId(invoiceId, poLineId, requestContextMock).join();
verify(restClient).delete(any(RequestEntry.class), eq(requestContextMock));
}
use of org.folio.rest.acq.model.orders.CompositePoLine in project mod-invoice by folio-org.
the class InvoiceHelperTest method shouldReturnFalseWhenCompositeCheckingForUpdatePoLinePaymentStatusIsOngoing.
@Test
@DisplayName("not decide to update status of POLines with ONGOING status")
void shouldReturnFalseWhenCompositeCheckingForUpdatePoLinePaymentStatusIsOngoing() {
InvoiceHelper invoiceHelper = new InvoiceHelper(okapiHeaders, context, "en");
CompositePoLine ongoingCompositePoLine = getMockAsJson(String.format("%s%s.json", PO_LINE_MOCK_DATA_PATH, EXISTING_PO_LINE_ID)).mapTo(CompositePoLine.class).withPaymentStatus(CompositePoLine.PaymentStatus.ONGOING);
CompositePoLine fullyPaidCompositePoLine = getMockAsJson(String.format("%s%s.json", PO_LINE_MOCK_DATA_PATH, EXISTING_PO_LINE_ID)).mapTo(CompositePoLine.class).withPaymentStatus(CompositePoLine.PaymentStatus.FULLY_PAID);
Map<CompositePoLine, CompositePoLine.PaymentStatus> compositePoLinesWithStatus = new HashMap<>() {
{
put(ongoingCompositePoLine, CompositePoLine.PaymentStatus.ONGOING);
put(fullyPaidCompositePoLine, CompositePoLine.PaymentStatus.FULLY_PAID);
}
};
assertFalse(invoiceHelper.isPaymentStatusUpdateRequired(compositePoLinesWithStatus, ongoingCompositePoLine));
}
use of org.folio.rest.acq.model.orders.CompositePoLine in project mod-invoice by folio-org.
the class InvoicesApiTest method testUpdateValidInvoiceTransitionToPaidReleaseEncumbranceTrue.
@Test
void testUpdateValidInvoiceTransitionToPaidReleaseEncumbranceTrue() {
logger.info("=== Test transition invoice to paid and releaseEncumbrance true for all invoice lines ===");
List<InvoiceLine> invoiceLines = new ArrayList<>();
List<CompositePoLine> poLines = new ArrayList<>();
for (int i = 0; i < 3; i++) {
invoiceLines.add(getMockAsJson(INVOICE_LINE_WITH_APPROVED_INVOICE_SAMPLE_PATH).mapTo(InvoiceLine.class));
poLines.add(getMockAsJson(String.format("%s%s.json", PO_LINE_MOCK_DATA_PATH, EXISTENT_PO_LINE_ID)).mapTo(CompositePoLine.class));
}
Invoice reqData = getMockAsJson(APPROVED_INVOICE_SAMPLE_PATH).mapTo(Invoice.class).withStatus(Invoice.Status.PAID);
String id = reqData.getId();
for (int i = 0; i < 3; i++) {
InvoiceLine invoiceLine = invoiceLines.get(i);
invoiceLine.setId(UUID.randomUUID().toString());
invoiceLine.setInvoiceId(reqData.getId());
String poLineId = UUID.randomUUID().toString();
invoiceLine.setPoLineId(poLineId);
poLines.get(i).setId(poLineId);
}
invoiceLines.forEach(line -> addMockEntry(INVOICE_LINES, JsonObject.mapFrom(line)));
poLines.forEach(line -> addMockEntry(ORDER_LINES, JsonObject.mapFrom(line)));
prepareMockVoucher(id);
verifyPut(String.format(INVOICE_ID_PATH, id), JsonObject.mapFrom(reqData), "", 204);
assertThat(getRqRsEntries(HttpMethod.PUT, INVOICES).get(0).getString(STATUS), is(Invoice.Status.PAID.value()));
assertThat(getRqRsEntries(HttpMethod.GET, INVOICE_LINES), hasSize(1));
assertThat(getRqRsEntries(HttpMethod.GET, INVOICE_LINES).get(0).mapTo(InvoiceLineCollection.class).getTotalRecords(), equalTo(3));
assertThat(getRqRsEntries(HttpMethod.PUT, ORDER_LINES), hasSize(3));
getRqRsEntries(HttpMethod.PUT, ORDER_LINES).stream().map(entries -> entries.mapTo(CompositePoLine.class)).forEach(compositePoLine -> assertThat(compositePoLine.getPaymentStatus(), equalTo(CompositePoLine.PaymentStatus.FULLY_PAID)));
assertThatVoucherPaid();
List<JsonObject> invoiceLinesUpdates = serverRqRs.get(INVOICE_LINES, HttpMethod.PUT);
List<InvoiceLine> lines = invoiceLinesUpdates.stream().map(entry -> entry.mapTo(InvoiceLine.class)).collect(toList());
assertThat(lines, everyItem(hasProperty("invoiceLineStatus", is(InvoiceLine.InvoiceLineStatus.PAID))));
assertThat(getRqRsEntries(HttpMethod.GET, FINANCE_TRANSACTIONS), hasSize(2));
assertThat(getRqRsEntries(HttpMethod.POST, FINANCE_PAYMENTS), hasSize(5));
assertThat(getRqRsEntries(HttpMethod.POST, FINANCE_CREDITS), hasSize(0));
checkCreditsPayments(reqData, invoiceLines);
}
use of org.folio.rest.acq.model.orders.CompositePoLine in project mod-invoice by folio-org.
the class InvoicesApiTest method testUpdateInvoiceTransitionToPaidPoLineIdNotSpecified.
@Test
void testUpdateInvoiceTransitionToPaidPoLineIdNotSpecified() {
logger.info("=== Test transition invoice to paid, invoice line doesn't have poLineId ===");
Invoice reqData = getMockAsJson(APPROVED_INVOICE_SAMPLE_PATH).mapTo(Invoice.class).withStatus(Invoice.Status.PAID);
String id = reqData.getId();
prepareMockVoucher(id);
InvoiceLine invoiceLine1 = getMinimalContentInvoiceLine(id).withPoLineId(null);
addMockEntry(INVOICE_LINES, JsonObject.mapFrom(invoiceLine1));
InvoiceLine invoiceLine2 = getMinimalContentInvoiceLine(id).withPoLineId(null);
addMockEntry(INVOICE_LINES, JsonObject.mapFrom(invoiceLine2));
CompositePoLine poLine = getMockAsJson(String.format("%s%s.json", PO_LINE_MOCK_DATA_PATH, EXISTENT_PO_LINE_ID)).mapTo(CompositePoLine.class).withPaymentStatus(CompositePoLine.PaymentStatus.AWAITING_PAYMENT);
addMockEntry(ORDER_LINES, JsonObject.mapFrom(poLine));
InvoiceLine invoiceLine3 = getMinimalContentInvoiceLine(id).withPoLineId(poLine.getId());
addMockEntry(INVOICE_LINES, JsonObject.mapFrom(invoiceLine3));
String jsonBody = JsonObject.mapFrom(reqData).encode();
verifyPut(String.format(INVOICE_ID_PATH, id), jsonBody, "", 204);
assertThat(serverRqRs.get(INVOICES, HttpMethod.PUT).get(0).getString(STATUS), is(Invoice.Status.PAID.value()));
final List<CompositePoLine> updatedPoLines = getRqRsEntries(HttpMethod.PUT, ORDER_LINES).stream().map(line -> line.mapTo(CompositePoLine.class)).collect(Collectors.toList());
assertThat(updatedPoLines, hasSize(1));
assertThatVoucherPaid();
}
use of org.folio.rest.acq.model.orders.CompositePoLine in project mod-invoice by folio-org.
the class InvoicesApiTest method testUpdateValidInvoiceTransitionToPaidReleaseEncumbranceFalseNoPoLineUpdate.
@Test
void testUpdateValidInvoiceTransitionToPaidReleaseEncumbranceFalseNoPoLineUpdate() {
logger.info("=== Test transition invoice to paid and releaseEncumbrance false for invoice line without poLine update ===");
Invoice reqData = getMockAsJson(APPROVED_INVOICE_SAMPLE_PATH).mapTo(Invoice.class).withStatus(Invoice.Status.PAID);
String id = reqData.getId();
InvoiceLine invoiceLine = getMockAsJson(INVOICE_LINE_WITH_APPROVED_INVOICE_SAMPLE_PATH).mapTo(InvoiceLine.class);
invoiceLine.setId(UUID.randomUUID().toString());
invoiceLine.setInvoiceId(id);
invoiceLine.setPoLineId(EXISTENT_PO_LINE_ID);
invoiceLine.setReleaseEncumbrance(false);
// to test credit creation
invoiceLine.setSubTotal(-invoiceLine.getSubTotal());
invoiceLine.setTotal(-invoiceLine.getTotal());
CompositePoLine poLine = getMockAsJson(String.format("%s%s.json", PO_LINE_MOCK_DATA_PATH, EXISTENT_PO_LINE_ID)).mapTo(CompositePoLine.class);
poLine.setId(EXISTENT_PO_LINE_ID);
poLine.setPaymentStatus(CompositePoLine.PaymentStatus.PARTIALLY_PAID);
addMockEntry(INVOICE_LINES, JsonObject.mapFrom(invoiceLine));
addMockEntry(ORDER_LINES, JsonObject.mapFrom(poLine));
prepareMockVoucher(id);
verifyPut(String.format(INVOICE_ID_PATH, id), JsonObject.mapFrom(reqData), "", 204);
assertThat(getRqRsEntries(HttpMethod.PUT, INVOICES).get(0).getString(STATUS), is(Invoice.Status.PAID.value()));
assertThat(getRqRsEntries(HttpMethod.GET, INVOICE_LINES), hasSize(1));
assertThat(getRqRsEntries(HttpMethod.GET, INVOICE_LINES).get(0).mapTo(InvoiceLineCollection.class).getTotalRecords(), equalTo(1));
assertThat(getRqRsEntries(HttpMethod.PUT, ORDER_LINES), empty());
assertThatVoucherPaid();
List<JsonObject> invoiceLinesUpdates = serverRqRs.get(INVOICE_LINES, HttpMethod.PUT);
List<InvoiceLine> lines = invoiceLinesUpdates.stream().map(entry -> entry.mapTo(InvoiceLine.class)).collect(toList());
assertThat(lines, everyItem(hasProperty("invoiceLineStatus", is(InvoiceLine.InvoiceLineStatus.PAID))));
checkCreditsPayments(reqData, Collections.singletonList(invoiceLine));
}
Aggregations