FINERACT-1158: Fixing validation for interop action

This commit is contained in:
Petri Tuomola
2020-09-28 19:32:22 +02:00
committed by Michael Vorburger ⛑️
parent d9ff0f1317
commit 915193785e
4 changed files with 43 additions and 1 deletions
@@ -322,6 +322,16 @@ public class InteropHelper {
return response;
}
public String postTransferMissingAction(String transferCode, InteropTransactionRole role) {
String url = buildUrl(TRANSFERS_URL);
String request = buildTransferJson(transferCode, role);
LOG.debug("Calling Interoperable POST Transfer: {}, body: {}", url, request);
String response = Utils.performServerPost(requestSpec, responseSpec, url, request, null);
LOG.debug("Response Interoperable POST Transfer: {}", response);
return response;
}
private String buildTransferJson(String transferCode, InteropTransactionRole role) {
HashMap<String, Object> map = new HashMap<>();
map.put(InteropUtil.PARAM_TRANSACTION_CODE, transactionCode);
@@ -100,6 +100,14 @@ public class InteropTest {
interopHelper = new InteropHelper(requestSpec, responseSpec, savingsExternalId, transactionCode);
}
@Test
public void testValidateAction() {
interopHelper.setResponseSpec(responseClientErrorSpec);
interopHelper.postTransferMissingAction(UUID.randomUUID().toString(), InteropTransactionRole.PAYER);
interopHelper.postTransfer(UUID.randomUUID().toString(), null, InteropTransactionRole.PAYER);
interopHelper.setResponseSpec(responseSpec);
}
@Test
public void testInteroperation() {
createClient();
@@ -26,6 +26,7 @@ import java.util.Arrays;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import net.fortuna.ical4j.model.property.RRule;
import net.fortuna.ical4j.validate.ValidationException;
import org.apache.commons.lang3.StringUtils;
@@ -300,6 +301,11 @@ public class DataValidatorBuilder {
return this;
}
public DataValidatorBuilder isOneOfEnumValues(Class<? extends Enum<?>> e) {
final List<String> enumValuesList = Arrays.asList(Arrays.stream(e.getEnumConstants()).map(Enum::name).toArray(String[]::new));
return isOneOfTheseStringValues(enumValuesList);
}
public DataValidatorBuilder isOneOfTheseStringValues(final Object... values) {
if (this.value == null && this.ignoreNullValue) {
return this;
@@ -330,7 +336,9 @@ public class DataValidatorBuilder {
final String valuesListStr = StringUtils.join(valuesList, ", ");
if (this.value == null || !valuesList.contains(this.value.toString().toLowerCase())) {
List<String> valuesListLowercase = valuesList.stream().map(String::toLowerCase).collect(Collectors.toList());
if (this.value == null || !valuesListLowercase.contains(this.value.toString().toLowerCase())) {
final StringBuilder validationErrorCode = new StringBuilder("validation.msg.").append(this.resource).append(".")
.append(this.parameter).append(".is.not.one.of.expected.enumerations");
final StringBuilder defaultEnglishMessage = new StringBuilder("The parameter ").append(this.parameter)
@@ -30,6 +30,8 @@ import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.DefaultValue;
@@ -45,7 +47,10 @@ import javax.ws.rs.core.UriInfo;
import org.apache.fineract.commands.domain.CommandWrapper;
import org.apache.fineract.commands.service.PortfolioCommandSourceWritePlatformService;
import org.apache.fineract.infrastructure.core.api.ApiRequestParameterHelper;
import org.apache.fineract.infrastructure.core.data.ApiParameterError;
import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
import org.apache.fineract.infrastructure.core.data.DataValidatorBuilder;
import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException;
import org.apache.fineract.infrastructure.core.serialization.ApiRequestJsonSerializationSettings;
import org.apache.fineract.infrastructure.core.serialization.DefaultToApiJsonSerializer;
import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext;
@@ -365,6 +370,17 @@ public class InteropApiResource {
@ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = InteropTransferResponseData.class))) })
public String performTransfer(@QueryParam("action") @Parameter(description = "action") String action,
@Parameter(hidden = true) String quotesJson, @Context UriInfo uriInfo) {
final List<ApiParameterError> dataValidationErrors = new ArrayList<>();
final DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors).resource("InteropApi");
baseDataValidator.reset().parameter("action").value(action).notNull().isOneOfEnumValues(InteropTransferActionType.class);
if (!dataValidationErrors.isEmpty()) {
throw new PlatformApiDataValidationException("validation.msg.validation.errors.exist", "Validation errors exist.",
dataValidationErrors);
}
CommandWrapper commandRequest = new InteropWrapperBuilder().performTransfer(InteropTransferActionType.valueOf(action))
.withJson(quotesJson).build();