diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/service/ThitsaWorksCreditBureauIntegrationWritePlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/service/ThitsaWorksCreditBureauIntegrationWritePlatformServiceImpl.java index fd97328c7..a9fdee5da 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/service/ThitsaWorksCreditBureauIntegrationWritePlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/service/ThitsaWorksCreditBureauIntegrationWritePlatformServiceImpl.java @@ -18,10 +18,13 @@ */ package org.apache.fineract.infrastructure.creditbureau.service; +import static javax.ws.rs.core.HttpHeaders.CONTENT_TYPE; +import static javax.ws.rs.core.MediaType.APPLICATION_FORM_URLENCODED; +import static javax.ws.rs.core.MediaType.MULTIPART_FORM_DATA; + import com.google.gson.Gson; import com.google.gson.JsonArray; import com.google.gson.JsonElement; -import com.google.gson.JsonNull; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import java.io.File; @@ -30,6 +33,12 @@ import java.net.HttpURLConnection; import java.time.LocalDate; import java.util.ArrayList; import java.util.List; +import java.util.Optional; +import java.util.function.BiFunction; +import java.util.function.Function; +import java.util.function.Supplier; +import javax.annotation.Nullable; +import javax.validation.constraints.NotNull; import okhttp3.HttpUrl; import okhttp3.MediaType; import okhttp3.MultipartBody; @@ -37,6 +46,7 @@ import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; +import org.apache.commons.lang3.StringUtils; import org.apache.fineract.commands.domain.CommandWrapper; import org.apache.fineract.commands.service.CommandWrapperBuilder; import org.apache.fineract.infrastructure.core.api.JsonCommand; @@ -67,6 +77,9 @@ import org.springframework.transaction.annotation.Transactional; public class ThitsaWorksCreditBureauIntegrationWritePlatformServiceImpl implements ThitsaWorksCreditBureauIntegrationWritePlatformService { private static final Logger LOG = LoggerFactory.getLogger(ThitsaWorksCreditBureauIntegrationWritePlatformServiceImpl.class); + public static final String UPLOAD_CREDIT_REPORT = "UploadCreditReport"; + public static final String RESPONSE_MESSAGE = "ResponseMessage"; + public static final String IS_NOT_AVAILABLE_SUFFIX = ".is.not.available"; private final PlatformSecurityContext context; private final FromJsonHelper fromApiJsonHelper; private final TokenRepositoryWrapper tokenRepositoryWrapper; @@ -97,87 +110,112 @@ public class ThitsaWorksCreditBureauIntegrationWritePlatformServiceImpl implemen @Transactional @Override - @SuppressWarnings("deprecation") public String okHttpConnectionMethod(String userName, String password, String subscriptionKey, String subscriptionId, String url, - String token, File file, FormDataContentDisposition fileData, Long uniqueId, String nrcId, String process) { - - String reponseMessage = null; - RequestBody requestBody = null; - - if (process.equals("UploadCreditReport")) { - String fileName = fileData.getFileName(); - requestBody = RequestBody.create(file, MediaType.parse("multipart/form-data")); - - requestBody = new MultipartBody.Builder().setType(MultipartBody.FORM).addFormDataPart("file", fileName, requestBody) - .addFormDataPart("BODY", "formdata").addFormDataPart("userName", userName).build(); - - } else if (process.equals("token")) { - - final MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded"); - String jsonBody = "" + "BODY=x-www-form-urlencoded&\r" + "grant_type=password&\r" + "userName=" + userName + "&\r" + "password=" - + password + "&\r"; - requestBody = RequestBody.create(jsonBody, mediaType); - - } else if (process.equals("NRC")) { - - final MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded"); - String jsonBody = "BODY=x-www-form-urlencoded&nrc=" + nrcId + "&"; - requestBody = RequestBody.create(jsonBody, mediaType); + String token, File file, FormDataContentDisposition fileData, Long uniqueId, String nrcId, @NotNull String process) { + String responseMessage = null; + if (StringUtils.isBlank(url)) { + throw new PlatformDataIntegrityException("error.msg.url.is.null.or.empty", "URL is null or empty"); } - - HttpUrl.Builder urlBuilder = HttpUrl.parse(url).newBuilder(); - String urlokhttp = urlBuilder.build().toString(); + HttpUrl urlBuilder = HttpUrl.parse(url); + if (urlBuilder == null) { + throw new PlatformDataIntegrityException("error.url.not.parsed", "URL not parsed"); + } + String okHttpUrl = urlBuilder.toString(); Request request = null; - if (token == null) { - - request = new Request.Builder().header("mcix-subscription-key", subscriptionKey).header("mcix-subscription-id", subscriptionId) - .header("Content-Type", "application/x-www-form-urlencoded").url(urlokhttp).post(requestBody).build(); - } - - if (token != null) { - - if (process.equals("CreditReport")) { // GET method for fetching credit report - request = new Request.Builder().header("mcix-subscription-key", subscriptionKey) - .header("mcix-subscription-id", subscriptionId).header("Content-Type", "application/x-www-form-urlencoded") - .header("Authorization", "Bearer " + token).url(urlokhttp).get().build(); - } else if (process.equals("UploadCreditReport")) { // POST for uploading Credit-Report(multipart/form-data) - // To ThitsaWork - request = new Request.Builder().header("mcix-subscription-key", subscriptionKey) - .header("mcix-subscription-id", subscriptionId).header("Content-Type", "multipart/form-data") - .header("Authorization", "Bearer " + token).url(urlokhttp).post(requestBody).build(); - - } else { // POST method for application/x-www-form-urlencoded - - request = new Request.Builder().header("mcix-subscription-key", subscriptionKey) - .header("mcix-subscription-id", subscriptionId).header("Content-Type", "application/x-www-form-urlencoded") - .header("Authorization", "Bearer " + token).url(urlokhttp).post(requestBody).build(); - } + Request.Builder baseRequestBuilder = createRequestBuilder(subscriptionKey, subscriptionId, token, okHttpUrl); + switch (process) { + case UPLOAD_CREDIT_REPORT -> request = createRequest(baseRequestBuilder, () -> new MultipartBody.Builder() + .setType(MultipartBody.FORM) + .addFormDataPart("file", fileData.getFileName(), RequestBody.create(file, MediaType.parse("multipart/form-data"))) + .addFormDataPart("BODY", "formdata").addFormDataPart("userName", userName).build(), + (requestBody, builder) -> builder.header(CONTENT_TYPE, MULTIPART_FORM_DATA).post(requestBody).build()); + case "CreditReport" -> request = createRequest(baseRequestBuilder, + builder -> builder.header(CONTENT_TYPE, APPLICATION_FORM_URLENCODED).get().build()); + case "token" -> request = createRequest(baseRequestBuilder, + () -> RequestBody.create("" + "BODY=x-www-form-urlencoded&\r" + "grant_type=password&\r" + "userName=" + userName + + "&\r" + "password=" + password + "&\r", MediaType.parse("application/x-www-form-urlencoded")), + (requestBody, builder) -> builder.header(CONTENT_TYPE, APPLICATION_FORM_URLENCODED).post(requestBody).build()); + case "NRC" -> request = createRequest(baseRequestBuilder, + () -> RequestBody.create("BODY=x-www-form-urlencoded&nrc=" + nrcId + "&", + MediaType.parse("application/x-www-form-urlencoded")), + (requestBody, builder) -> builder.header(CONTENT_TYPE, APPLICATION_FORM_URLENCODED).post(requestBody).build()); + default -> handleAPIIntegrityIssues("Invalid Process"); } Response response; - Integer responseCode = 0; + int responseCode = 0; try { response = client.newCall(request).execute(); responseCode = response.code(); - reponseMessage = response.body().string(); + responseMessage = response.body().string(); } catch (IOException e) { LOG.error("error occured in HTTP request-response method.", e); } if (responseCode != HttpURLConnection.HTTP_OK) { - this.httpResponse(responseCode, reponseMessage); + this.httpResponse(responseCode, responseMessage); } - if (process.equals("UploadCreditReport")) { // to show the Response on frontEnd - JsonObject reportObject = JsonParser.parseString(reponseMessage).getAsJsonObject(); - String responseMessageJson = reportObject.get("ResponseMessage").getAsString(); + if (process.equals(UPLOAD_CREDIT_REPORT)) { // to show the Response on frontEnd + JsonObject reportObject = JsonParser.parseString(responseMessage).getAsJsonObject(); + String responseMessageJson = reportObject.get(RESPONSE_MESSAGE).getAsString(); this.handleAPIIntegrityIssues(responseMessageJson); } + return responseMessage; - return reponseMessage; + } + /** + * Create a request object with the given request builder without request body support (ex: GET) + * + * @param builder + * the request builder object + * @param requestBuilder + * create a request from the builder object with customization + * @return return the generated request object + */ + private Request createRequest(Request.Builder builder, Function requestBuilder) { + return requestBuilder.apply(builder); + } + + /** + * Create a reuqest obejct with a request body support + * + * @param builder + * the base Builder object + * @param requestBodySupplier + * request body supplier method + * @param requestBuilder + * generate request from the builder object with customization + * @return return the generated request object + */ + private Request createRequest(Request.Builder builder, Supplier requestBodySupplier, + BiFunction requestBuilder) { + return requestBuilder.apply(requestBodySupplier.get(), builder); + } + + /** + * Create a request builder for the given url if no token not adds authorization header + * + * @param subscriptionKey + * subscription key parameter + * @param subscriptionId + * subscription id parameter + * @param token + * token can be null + * @param url + * the url to connect + * @return a request builder base object + */ + private Request.Builder createRequestBuilder(String subscriptionKey, String subscriptionId, @Nullable String token, String url) { + Request.Builder base = new Request.Builder().header("mcix-subscription-key", subscriptionKey) + .header("mcix-subscription-id", subscriptionId).url(url); + if (token != null) { + return base.header("Authorization", "Bearer " + token); + } + return base; } private void httpResponse(Integer responseCode, String responseMessage) { @@ -208,17 +246,15 @@ public class ThitsaWorksCreditBureauIntegrationWritePlatformServiceImpl implemen String bureauID = command.stringValueOfParameterNamed("creditBureauID"); Integer creditBureauId = Integer.parseInt(bureauID); - String token = null; - String userName = getCreditBureauConfiguration(creditBureauId, CreditBureauConfigurations.USERNAME.toString()); String password = getCreditBureauConfiguration(creditBureauId, CreditBureauConfigurations.PASSWORD.toString()); String subscriptionId = getCreditBureauConfiguration(creditBureauId, CreditBureauConfigurations.SUBSCRIPTIONID.toString()); String subscriptionKey = getCreditBureauConfiguration(creditBureauId, CreditBureauConfigurations.SUBSCRIPTIONKEY.toString()); CreditBureauToken creditbureautoken = createToken(creditBureauId.longValue()); - token = creditbureautoken.getAccessToken(); + String token = creditbureautoken.getAccessToken(); - // will use only "NRC" part of code from common http method to get data based on nrc + // will use only "NRC" part of code from common http method to get data based on the nrc String process = "NRC"; String url = getCreditBureauConfiguration(creditBureauId, CreditBureauConfigurations.SEARCHURL.toString()); @@ -227,18 +263,15 @@ public class ThitsaWorksCreditBureauIntegrationWritePlatformServiceImpl implemen String searchResult = this.okHttpConnectionMethod(userName, password, subscriptionKey, subscriptionId, nrcUrl, token, null, null, 0L, nrcId, process); - if (process.equals("NRC")) { - Long uniqueID = this.extractUniqueId(searchResult); + Long uniqueID = this.extractUniqueId(searchResult); - process = "CreditReport"; - url = getCreditBureauConfiguration(creditBureauId, CreditBureauConfigurations.CREDITREPORTURL.toString()); + process = "CreditReport"; + url = getCreditBureauConfiguration(creditBureauId, CreditBureauConfigurations.CREDITREPORTURL.toString()); - String creditReportUrl = url + uniqueID; + String creditReportUrl = url + uniqueID; - searchResult = this.okHttpConnectionMethod(userName, password, subscriptionKey, subscriptionId, creditReportUrl, token, null, - null, uniqueID, null, process); - - } + searchResult = this.okHttpConnectionMethod(userName, password, subscriptionKey, subscriptionId, creditReportUrl, token, null, null, + uniqueID, null, process); // after getting the result(creditreport) from httpconnection-response it will assign creditreport to generic // creditreportdata object @@ -246,48 +279,35 @@ public class ThitsaWorksCreditBureauIntegrationWritePlatformServiceImpl implemen JsonObject reportObject = JsonParser.parseString(searchResult).getAsJsonObject(); // Credit Reports Stored into Generic CreditReportData - JsonObject jsonData = null; - JsonElement element = reportObject.get("Data"); - if (!(element instanceof JsonNull)) { // NOTE : "element instanceof JsonNull" is for handling empty values (and - // assigning null) while fetching data from results - jsonData = (JsonObject) element; + // Extract Data from Credit Report + Optional jsonData = Optional.ofNullable(reportObject.get("Data")).filter(JsonElement::isJsonObject) + .map(JsonElement::getAsJsonObject); - } + // Extract Borrower from Credit Report data section. + Optional element = jsonData.map(data -> data.get("BorrowerInfo")); - JsonObject borrowerInfos = null; - String borrowerInfo = null; + // Fill borrower data if present, and it's a json object. + Optional borrowerInfos = element.filter(JsonElement::isJsonObject).map(JsonElement::getAsJsonObject); - element = jsonData.get("BorrowerInfo"); + // Create json object for borrower data. + String borrowerInfo = borrowerInfos.map(data -> new Gson().toJson(data)).orElse(null); - if (!(element instanceof JsonNull)) { - borrowerInfos = (JsonObject) element; - Gson gson = new Gson(); - borrowerInfo = gson.toJson(borrowerInfos); - } - - String name = borrowerInfos.get("Name").toString(); - String gender = borrowerInfos.get("Gender").toString(); - String address = borrowerInfos.get("Address").toString(); + String name = borrowerInfos.map(data -> data.get("Name")).map(JsonElement::toString).orElse(null); + String gender = borrowerInfos.map(data -> data.get("Gender")).map(JsonElement::toString).orElse(null); + String address = borrowerInfos.map(data -> data.get("Address")).map(JsonElement::toString).orElse(null); String creditScore = "CreditScore"; - creditScore = getJsonObjectToString(creditScore, element, jsonData); + creditScore = getJsonObjectToString(creditScore, jsonData); String activeLoans = "ActiveLoans"; - JsonArray activeLoansArray = getJsonObjectToArray(activeLoans, element, jsonData); - String[] activeLoanStringArray = null; - if (activeLoansArray != null) { - activeLoanStringArray = convertArrayintoStringArray(activeLoansArray); - } + String[] activeLoanStringArray = Optional.ofNullable(getJsonObjectToArray(activeLoans, jsonData)) + .map(this::convertArrayintoStringArray).orElse(null); String writeOffLoans = "WriteOffLoans"; - JsonArray writeOffLoansArray = getJsonObjectToArray(writeOffLoans, element, jsonData); - - String[] writeoffLoanStringArray = null; - if (writeOffLoansArray != null) { - writeoffLoanStringArray = convertArrayintoStringArray(writeOffLoansArray); - } + String[] writeoffLoanStringArray = Optional.ofNullable(getJsonObjectToArray(writeOffLoans, jsonData)) + .map(this::convertArrayintoStringArray).orElse(null); return CreditBureauReportData.instance(name, gender, address, creditScore, borrowerInfo, activeLoanStringArray, writeoffLoanStringArray); @@ -310,17 +330,15 @@ public class ThitsaWorksCreditBureauIntegrationWritePlatformServiceImpl implemen CreditBureauConfiguration addReportURL = this.configDataRepository.getCreditBureauConfigData(creditBureauId, "addCreditReporturl"); String url = addReportURL.getValue(); - String process = "UploadCreditReport"; - return this.okHttpConnectionMethod(userName, password, subscriptionKey, subscriptionId, url, token, creditReport, fileDetail, 0L, - null, process); + null, UPLOAD_CREDIT_REPORT); } private String[] convertArrayintoStringArray(JsonArray jsonResult) { String[] loanAccounts = new String[jsonResult.size()]; - Integer i = 0; + int i = 0; for (JsonElement ele : jsonResult) { loanAccounts[i++] = ele.toString(); } @@ -337,14 +355,14 @@ public class ThitsaWorksCreditBureauIntegrationWritePlatformServiceImpl implemen JsonElement element = reportObject.get("Data"); if (element.isJsonNull()) { - String responseMessage = reportObject.get("ResponseMessage").getAsString(); + String responseMessage = reportObject.get(RESPONSE_MESSAGE).getAsString(); handleAPIIntegrityIssues(responseMessage); } // to fetch the Unique ID from Result JsonObject jsonObject = JsonParser.parseString(jsonResult).getAsJsonObject(); - Long uniqueID = 0L; + long uniqueID = 0L; try { JsonArray dataArray = jsonObject.getAsJsonArray("Data"); @@ -358,7 +376,7 @@ public class ThitsaWorksCreditBureauIntegrationWritePlatformServiceImpl implemen uniqueID = Long.parseLong(trimUniqueId); } else if (dataArray.size() == 0) { - String responseMessage = reportObject.get("ResponseMessage").getAsString(); + String responseMessage = reportObject.get(RESPONSE_MESSAGE).getAsString(); handleAPIIntegrityIssues(responseMessage); } else { String nrc; @@ -376,32 +394,19 @@ public class ThitsaWorksCreditBureauIntegrationWritePlatformServiceImpl implemen } } catch (IndexOutOfBoundsException e) { - String responseMessage = jsonObject.get("ResponseMessage").getAsString(); + String responseMessage = jsonObject.get(RESPONSE_MESSAGE).getAsString(); handleAPIIntegrityIssues(responseMessage); } return uniqueID; } - private String getJsonObjectToString(String fetchData, JsonElement element, JsonObject jsonData) { - - String jsonString = null; - element = jsonData.get(fetchData); - if (!(element instanceof JsonNull)) { - JsonObject fetchJson = (JsonObject) element; - Gson gson = new Gson(); - jsonString = gson.toJson(fetchJson); - } - return jsonString; + private String getJsonObjectToString(String fetchData, Optional jsonData) { + return jsonData.map(data -> data.get(fetchData)).filter(JsonElement::isJsonObject).map(JsonElement::getAsJsonObject) + .map(data -> new Gson().toJson(data)).orElse(null); } - private JsonArray getJsonObjectToArray(String fetchData, JsonElement element, JsonObject jsonData) { - - JsonArray fetchJson = null; - element = jsonData.get(fetchData); - if (!(element instanceof JsonNull)) { - fetchJson = (JsonArray) element; - } - return fetchJson; + private JsonArray getJsonObjectToArray(String fetchData, Optional jsonData) { + return jsonData.map(data -> data.get(fetchData)).filter(JsonElement::isJsonArray).map(JsonElement::getAsJsonArray).orElse(null); } @Transactional @@ -435,21 +440,19 @@ public class ThitsaWorksCreditBureauIntegrationWritePlatformServiceImpl implemen String url = getCreditBureauConfiguration(bureauID.intValue(), CreditBureauConfigurations.TOKENURL.toString()); String process = "token"; - String nrcId = null; Long uniqueID = 0L; String result = this.okHttpConnectionMethod(userName, password, subscriptionKey, subscriptionId, url, null, null, null, - uniqueID, nrcId, process); + uniqueID, null, process); // created token will be storing it into database final CommandWrapper wrapper = new CommandWrapperBuilder().withJson(result).build(); final String json = wrapper.getJson(); - JsonCommand apicommand = null; final JsonElement parsedCommand = this.fromApiJsonHelper.parse(json); - apicommand = JsonCommand.from(json, parsedCommand, this.fromApiJsonHelper, wrapper.getEntityName(), wrapper.getEntityId(), - wrapper.getSubentityId(), wrapper.getGroupId(), wrapper.getClientId(), wrapper.getLoanId(), wrapper.getSavingsId(), - wrapper.getTransactionId(), wrapper.getHref(), wrapper.getProductId(), wrapper.getCreditBureauId(), - wrapper.getOrganisationCreditBureauId(), wrapper.getJobName()); + JsonCommand apicommand = JsonCommand.from(json, parsedCommand, this.fromApiJsonHelper, wrapper.getEntityName(), + wrapper.getEntityId(), wrapper.getSubentityId(), wrapper.getGroupId(), wrapper.getClientId(), wrapper.getLoanId(), + wrapper.getSavingsId(), wrapper.getTransactionId(), wrapper.getHref(), wrapper.getProductId(), + wrapper.getCreditBureauId(), wrapper.getOrganisationCreditBureauId(), wrapper.getJobName()); this.fromApiJsonDeserializer.validateForCreate(apicommand.json()); @@ -473,8 +476,8 @@ public class ThitsaWorksCreditBureauIntegrationWritePlatformServiceImpl implemen List dataValidationErrors = new ArrayList<>(); DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors) .resource("ThitsaWorksCreditBureauIntegration"); - String creditBureauConfigurationValue = null; + String creditBureauConfigurationValue; try { CreditBureauConfiguration configurationParameterValue = this.configDataRepository.getCreditBureauConfigData(creditBureauId, @@ -483,10 +486,12 @@ public class ThitsaWorksCreditBureauIntegrationWritePlatformServiceImpl implemen creditBureauConfigurationValue = configurationParameterValue.getValue(); if (creditBureauConfigurationValue.isEmpty()) { - baseDataValidator.reset().failWithCode("creditBureau.configuration." + configurationParameterName + ".is.not.available"); + baseDataValidator.reset() + .failWithCode("creditBureau.configuration." + configurationParameterName + IS_NOT_AVAILABLE_SUFFIX); - throw new PlatformDataIntegrityException("creditBureau.Configuration." + configurationParameterName + ".is.not.available", - "creditBureau.Configuration." + configurationParameterName + ".is.not.available"); + throw new PlatformDataIntegrityException( + "creditBureau.Configuration." + configurationParameterName + IS_NOT_AVAILABLE_SUFFIX, + "creditBureau.Configuration." + configurationParameterName + IS_NOT_AVAILABLE_SUFFIX); } } catch (NullPointerException ex) { diff --git a/fineract-provider/src/test/java/org/apache/fineract/infrastructure/creditbureau/service/ThitsaWorksCreditBureauIntegrationWritePlatformServiceImplTest.java b/fineract-provider/src/test/java/org/apache/fineract/infrastructure/creditbureau/service/ThitsaWorksCreditBureauIntegrationWritePlatformServiceImplTest.java index d241255ae..1d7b9895a 100644 --- a/fineract-provider/src/test/java/org/apache/fineract/infrastructure/creditbureau/service/ThitsaWorksCreditBureauIntegrationWritePlatformServiceImplTest.java +++ b/fineract-provider/src/test/java/org/apache/fineract/infrastructure/creditbureau/service/ThitsaWorksCreditBureauIntegrationWritePlatformServiceImplTest.java @@ -169,6 +169,32 @@ public class ThitsaWorksCreditBureauIntegrationWritePlatformServiceImplTest { } + @Test + public void okHttpNullUrlTest() throws IOException { + + mockOkHttpCall(request -> createOkhttpResponse(request, 500, "Internal Server Error")); + + PlatformDataIntegrityException raisedException = assertThrows(PlatformDataIntegrityException.class, () -> { + underTest.okHttpConnectionMethod("testUser", "testPassword", "subscriptionKey", "subscriptionId", null, "AccessToken", null, + null, 0L, "nrcId", "NRC"); + + }); + assertEquals("error.msg.url.is.null.or.empty", raisedException.getGlobalisationMessageCode()); + } + + @Test + public void okHttpInvalidProcessTestTest() throws IOException { + + mockOkHttpCall(request -> createOkhttpResponse(request, 500, "Internal Server Error")); + + PlatformDataIntegrityException raisedException = assertThrows(PlatformDataIntegrityException.class, () -> { + underTest.okHttpConnectionMethod("testUser", "testPassword", "subscriptionKey", "subscriptionId", "https://nrc.test.url.com", + "AccessToken", null, null, 0L, "nrcId", "notValidProcess"); + + }); + assertEquals("Invalid Process", raisedException.getGlobalisationMessageCode()); + } + @Test public void okHttpIOExceptionTest() throws IOException { mockOkHttpCall(request -> { @@ -468,8 +494,7 @@ public class ThitsaWorksCreditBureauIntegrationWritePlatformServiceImplTest { assertEquals("ADD_CREDIT_RESPONSE", result.getDefaultUserMessage()); } - // TODO: if no borrower is throw NPE - // @Test + @Test public void getCreditReportFromThitsaWorksEmptyBorrowerTest() throws IOException { mockTokenGeneration(); mockOkHttpCall(request -> { @@ -499,8 +524,7 @@ public class ThitsaWorksCreditBureauIntegrationWritePlatformServiceImplTest { assertNotNull(result.getCreditScore()); } - // TODO: empty gender not handler correctly (NPE) - // @Test + @Test public void getCreditReportFromThitsaWorksNoGenderTest() throws IOException { mockTokenGeneration(); mockOkHttpCall(request -> { @@ -534,8 +558,7 @@ public class ThitsaWorksCreditBureauIntegrationWritePlatformServiceImplTest { assertNotNull(result.getCreditScore()); } - // TODO: null credit script invalid result - // @Test + @Test public void getCreditReportFromThitsaWorksNoLoansTest() throws IOException { mockTokenGeneration(); mockOkHttpCall(request -> {