diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java index 09549592c..d9f15f469 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java @@ -33,6 +33,7 @@ import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.Objects; import java.util.Optional; import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; @@ -601,7 +602,12 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService, Loa @Override public Long getLoanIdByLoanExternalId(String externalId) { - return loanRepositoryWrapper.findIdByExternalId(ExternalIdFactory.produce(externalId)); + ExternalId loanExternalId = ExternalIdFactory.produce(externalId); + Long loanId = loanRepositoryWrapper.findIdByExternalId(loanExternalId); + if (Objects.isNull(loanId)) { + throw new LoanNotFoundException(loanExternalId); + } + return loanId; } private static final class LoanMapper implements RowMapper { diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/investor/externalassetowner/ExternalAssetOwnerHelper.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/investor/externalassetowner/ExternalAssetOwnerHelper.java index 9c5f51b6e..2270f8f1c 100644 --- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/investor/externalassetowner/ExternalAssetOwnerHelper.java +++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/investor/externalassetowner/ExternalAssetOwnerHelper.java @@ -40,6 +40,12 @@ public class ExternalAssetOwnerHelper extends IntegrationTest { return Utils.performServerPost(requestSpec, responseSpec, INITIATE_TRANSFER_URL, json); } + public String initiateTransferByLoanExternalId(String loanExternalId, String command, String json) { + final String INITIATE_TRANSFER_URL = "/fineract-provider/api/v1/external-asset-owners/transfers/loans/external-id/" + loanExternalId + + "?" + Utils.TENANT_IDENTIFIER + "&command=" + command; + return Utils.performServerPost(requestSpec, responseSpec, INITIATE_TRANSFER_URL, json); + } + public String retrieveTransferByTransferExternalId(String transferExternalId) { final String RETRIEVE_TRANSFER_URL = "/fineract-provider/api/v1/external-asset-owners/transfers?" + Utils.TENANT_IDENTIFIER + "&transferExternalId=" + transferExternalId; diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/investor/externalassetowner/InitiateExternalAssetOwnerTransferTest.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/investor/externalassetowner/InitiateExternalAssetOwnerTransferTest.java index 496715798..8887bb386 100644 --- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/investor/externalassetowner/InitiateExternalAssetOwnerTransferTest.java +++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/investor/externalassetowner/InitiateExternalAssetOwnerTransferTest.java @@ -56,6 +56,7 @@ public class InitiateExternalAssetOwnerTransferTest { private ResponseSpecification responseSpec; private ResponseSpecification responseSpecError; + private ResponseSpecification responseSpecNotFound; private RequestSpecification requestSpec; private ExternalAssetOwnerHelper externalAssetOwnerHelper; private LoanTransactionHelper loanTransactionHelper; @@ -68,6 +69,7 @@ public class InitiateExternalAssetOwnerTransferTest { requestSpec.header("Authorization", "Basic " + Utils.loginIntoServerAndGetBase64EncodedAuthenticationKey()); responseSpec = new ResponseSpecBuilder().expectStatusCode(200).build(); responseSpecError = new ResponseSpecBuilder().expectStatusCode(403).build(); + responseSpecNotFound = new ResponseSpecBuilder().expectStatusCode(404).build(); externalAssetOwnerHelper = new ExternalAssetOwnerHelper(requestSpec, responseSpec); loanTransactionHelper = new LoanTransactionHelper(requestSpec, responseSpec); @@ -312,6 +314,32 @@ public class InitiateExternalAssetOwnerTransferTest { } } + @Test + public void getNotFoundErrorIfTheLoanDoesNotExistWithTheGivenID() { + try { + GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.TRUE); + + BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, LocalDate.of(2020, 3, 2)); + GlobalConfigurationHelper.updateValueForGlobalConfiguration(requestSpec, responseSpec, "10", "0"); + + externalAssetOwnerHelper = new ExternalAssetOwnerHelper(requestSpec, responseSpecNotFound); + String transferExternalId = "36efeb06-d835-48a1-99eb-09bd1d348c1e"; + String nonExistingLoanExternalID = "NonExistingLoanExternalID"; + String saleResponse = externalAssetOwnerHelper.initiateTransferByLoanExternalId(nonExistingLoanExternalID, "sale", + getSaleRequestJson("05 March 2020", transferExternalId)); + Type type = new TypeToken>() {}.getType(); + Map errorResponseMap = new Gson().fromJson(saleResponse, type); + assertEquals("The requested resource is not available.", errorResponseMap.get("developerMessage")); + } finally { + requestSpec = new RequestSpecBuilder().setContentType(ContentType.JSON).build(); + requestSpec.header("Authorization", "Basic " + Utils.loginIntoServerAndGetBase64EncodedAuthenticationKey()); + requestSpec.header("Fineract-Platform-TenantId", "default"); + responseSpec = new ResponseSpecBuilder().expectStatusCode(200).build(); + BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, todaysDate); + GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.FALSE); + } + } + private Integer createLoanProduct(final String chargeId) { final String loanProductJSON = new LoanProductTestBuilder().withPrincipal("15,000.00").withNumberOfRepayments("4") .withRepaymentAfterEvery("1").withRepaymentTypeAsMonth().withinterestRatePerPeriod("1")