From b921e3e0c7fc9a64e9e7f335c6fc5957ad6ab2ca Mon Sep 17 00:00:00 2001 From: Hung Nguyen Date: Thu, 14 Mar 2019 14:45:08 +0700 Subject: [PATCH] Fix issue FINERACT-684 Update Integration test --- .../integrationtests/BatchApiTest.java | 48 +++++++++++++++++++ .../integrationtests/common/BatchHelper.java | 32 +++++++++++++ .../portfolio/loanaccount/domain/Loan.java | 23 +++++---- .../loanaccount/service/LoanAssembler.java | 3 +- 4 files changed, 96 insertions(+), 10 deletions(-) diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/BatchApiTest.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/BatchApiTest.java index 25a4644cd4f..aae79a068f7 100644 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/BatchApiTest.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/BatchApiTest.java @@ -19,6 +19,7 @@ package org.apache.fineract.integrationtests; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import org.apache.fineract.batch.domain.BatchRequest; @@ -422,4 +423,51 @@ public void shouldReturnOkStatusOnSuccessfulLoanApprovalAndDisburse() { Assert.assertEquals("Verify Status Code 200 for Approve Loan", 200L, (long) response.get(3).getStatusCode()); Assert.assertEquals("Verify Status Code 200 for Disburse Loan", 200L, (long) response.get(4).getStatusCode()); } + + /** + * Test for the successful create client, apply loan,approval and disbursal of a loan using + * Batch API with enclosingTransaction. A '200' status code is expected on successful activation. + * + * @see org.apache.fineract.batch.command.internal.ApproveLoanCommandStrategy + * @see org.apache.fineract.batch.command.internal.DisburseLoanCommandStrategy + */ + @Test + public void shouldReturnOkStatusOnSuccessfulLoanApprovalAndDisburseWithTransaction(){ + final String loanProductJSON = new LoanProductTestBuilder() // + .withPrincipal("10000000.00") // + .withNumberOfRepayments("24") // + .withRepaymentAfterEvery("1") // + .withRepaymentTypeAsMonth() // + .withinterestRatePerPeriod("2") // + .withInterestRateFrequencyTypeAsMonths() // + .withAmortizationTypeAsEqualPrincipalPayment() // + .withInterestTypeAsDecliningBalance() // + .currencyDetails("0", "100").build(null); + + final Integer productId = new LoanTransactionHelper(this.requestSpec, this.responseSpec).getLoanProductId(loanProductJSON); + + // Create a createClient Request + final BatchRequest br1 = BatchHelper.createActiveClientRequest(4740L, ""); + + // Create a ApplyLoan Request + final BatchRequest br2 = BatchHelper.applyLoanRequest(4742L, 4740L, productId); + + // Create a approveLoan Request + final BatchRequest br3 = BatchHelper.approveLoanRequest(4743L, 4742L); + + // Create a disburseLoan Request + final BatchRequest br4 = BatchHelper.disburseLoanRequest(4744L, 4743L); + + final List batchRequests = Arrays.asList(br1,br2,br3,br4); + + final String jsonifiedRequest = BatchHelper.toJsonString(batchRequests); + + final List response = BatchHelper.postBatchRequestsWithEnclosingTransaction(this.requestSpec, this.responseSpec, + jsonifiedRequest); + + Assert.assertEquals("Verify Status Code 200 for create client", 200L, (long) response.get(0).getStatusCode()); + Assert.assertEquals("Verify Status Code 200 for apply Loan", 200L, (long) response.get(1).getStatusCode()); + Assert.assertEquals("Verify Status Code 200 for approve Loan", 200L, (long) response.get(2).getStatusCode()); + Assert.assertEquals("Verify Status Code 200 for disburse Loan", 200L, (long) response.get(3).getStatusCode()); + } } \ No newline at end of file diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/BatchHelper.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/BatchHelper.java index 96cf0d09113..5a9a4d3d17d 100644 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/BatchHelper.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/BatchHelper.java @@ -155,6 +155,38 @@ public static BatchRequest createClientRequest(final Long requestId, final Strin return br; } + /** + * Creates and returns a + * {@link org.apache.fineract.batch.command.internal.CreateClientCommandStrategy} + * Request as one of the request in Batch. + * + * @param reqId + * @param externalId + * @return BatchRequest + */ + public static BatchRequest createActiveClientRequest(final Long requestId, final String externalId) { + + final BatchRequest br = new BatchRequest(); + br.setRequestId(requestId); + br.setRelativeUrl("clients"); + br.setMethod("POST"); + + final String extId; + if (externalId.equals("")) { + extId = "ext" + String.valueOf((10000 * Math.random())) + String.valueOf((10000 * Math.random())); + } else { + extId = externalId; + } + + final String body = "{ \"officeId\": 1, \"firstname\": \"Petra\", \"lastname\": \"Yton\"," + "\"externalId\": \"" + externalId + + "\", \"dateFormat\": \"dd MMMM yyyy\", \"locale\": \"en\"," + "\"active\": true, \"activationDate\": \"04 March 2010\", \"submittedOnDate\": \"04 March 2010\"}"; + + br.setBody(body); + + return br; + } + + /** * Creates and returns a * {@link org.apache.fineract.batch.command.internal.UpdateClientCommandStrategy} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java index 193810d502b..fb0295f50dd 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java @@ -6497,16 +6497,21 @@ public Collection getLoanCharges() { return this.charges; } public void initializeLazyCollections() { - this.charges.size() ; - this.trancheCharges.size() ; - this.repaymentScheduleInstallments.size() ; - this.loanTransactions.size() ; - this.disbursementDetails.size() ; - this.loanTermVariations.size() ; - this.collateral.size() ; - this.loanOfficerHistory.size() ; + checkAndFetchLazyCollection(this.charges); + checkAndFetchLazyCollection(this.trancheCharges); + checkAndFetchLazyCollection(this.repaymentScheduleInstallments); + checkAndFetchLazyCollection(this.loanTransactions); + checkAndFetchLazyCollection(this.disbursementDetails); + checkAndFetchLazyCollection(this.loanTermVariations); + checkAndFetchLazyCollection(this.collateral); + checkAndFetchLazyCollection(this.loanOfficerHistory); + } + + private void checkAndFetchLazyCollection(Collection lazyCollection){ + if (lazyCollection != null) { + lazyCollection.size(); + } } - public void initializeLoanOfficerHistory() { this.loanOfficerHistory.size() ; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAssembler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAssembler.java index 2d124bf7f21..95fc3c008c5 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAssembler.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAssembler.java @@ -19,6 +19,7 @@ package org.apache.fineract.portfolio.loanaccount.service; import java.math.BigDecimal; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Locale; @@ -181,7 +182,7 @@ private Loan assembleApplication(final JsonElement element, final Long clientId, if (loanPurposeId != null) { loanPurpose = this.codeValueRepository.findOneWithNotFoundDetection(loanPurposeId); } - List disbursementDetails = null; + List disbursementDetails = new ArrayList<>(); BigDecimal fixedEmiAmount = null; if (loanProduct.isMultiDisburseLoan() || loanProduct.canDefineInstallmentAmount()) { fixedEmiAmount = this.fromApiJsonHelper.extractBigDecimalWithLocaleNamed(LoanApiConstants.emiAmountParameterName, element);