Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,15 @@
*/
package org.apache.fineract.client.feign;

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.deser.DeserializationProblemHandler;
import com.fasterxml.jackson.databind.deser.ValueInstantiator;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import org.apache.fineract.client.adapter.ExternalIdAdapter;
import org.openapitools.jackson.nullable.JsonNullableModule;
Expand Down Expand Up @@ -62,6 +67,28 @@ public static ObjectMapper createObjectMapper() {

// Disable FAIL_ON_EMPTY_BEANS for empty responses
mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
// Only serialize the 'id' field of LoanProductData to avoid sending unsupported parameters

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i dont think we need this. it's not the mapper responsibility to decide that...

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ok

// LoanProductData constructor initializes many empty collections which would be rejected by the server
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.NONE, getterVisibility = JsonAutoDetect.Visibility.NONE, isGetterVisibility = JsonAutoDetect.Visibility.NONE)
abstract class LoanProductDataMixin {

@com.fasterxml.jackson.annotation.JsonProperty("id")
abstract Long getId();
}
mapper.addMixIn(org.apache.fineract.client.models.LoanProductData.class, LoanProductDataMixin.class);

// Handle cases where server returns a plain string for a field the model expects as POJO
// e.g. "fromAccountType": "SAVINGS" instead of {"id":2,"code":"accountType.savings","value":"Savings Account"}
mapper.addHandler(new DeserializationProblemHandler() {

@Override
public Object handleMissingInstantiator(DeserializationContext ctxt, Class<?> instClass, ValueInstantiator valueInst,
com.fasterxml.jackson.core.JsonParser p, String msg) throws java.io.IOException {
p.skipChildren();
return null;
}
});

return mapper;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ private PostProvisioningCriteriaRequest() {
@Schema(example = "High Risk Products Criteria")
public String criteriaName;
public Collection<LoanProductData> loanProducts;
public Collection<ProvisioningCriteriaDefinitionData> provisioningcriteria;
public Collection<ProvisioningCriteriaDefinitionData> definitions;
Comment thread
adamsaghy marked this conversation as resolved.
}

@Schema(description = "PostProvisioningCriteriaResponse")
Expand Down Expand Up @@ -85,7 +85,7 @@ private GetProvisioningCriteriaCriteriaIdResponse() {
@Schema(example = "mifos")
public String createdBy;
public Collection<LoanProductData> loanProducts;
public Collection<ProvisioningCriteriaDefinitionData> provisioningcriteria;
public Collection<ProvisioningCriteriaDefinitionData> definitions;
}

@Schema(description = "PutProvisioningCriteriaRequest")
Expand All @@ -98,7 +98,7 @@ private PutProvisioningCriteriaRequest() {
@Schema(example = "High Risk Products Criteria")
public String criteriaName;
public Collection<LoanProductData> loanProducts;
public Collection<ProvisioningCriteriaDefinitionData> provisioningcriteria;
public Collection<ProvisioningCriteriaDefinitionData> definitions;
}

@Schema(description = "PutProvisioningCriteriaResponse")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ private GetFromAccountTypeResponseStandingInstructionSwagger() {}
@Schema(example = "accountType.savings")
public String code;
@Schema(example = "Savings Account")
public String description;
public String value;
Comment thread
adamsaghy marked this conversation as resolved.
}

static final class GetFromOfficeOptionsResponseStandingInstructionSwagger {
Expand Down Expand Up @@ -101,7 +101,7 @@ private GetFromAccountTypeOptionsResponseStandingInstructionSwagger() {}
@Schema(example = "accountType.savings")
public String code;
@Schema(example = "Savings Account")
public String description;
public String value;
}

static final class GetToOfficeOptionsResponseStandingInstructionSwagger {
Expand All @@ -125,7 +125,7 @@ private GetToAccountTypeOptionsResponseStandingInstructionSwagger() {}
@Schema(example = "accountType.loan")
public String code;
@Schema(example = "Loan Account")
public String description;
public String value;
}

static final class GetTransferTypeOptionsResponseStandingInstructionSwagger {
Expand All @@ -137,7 +137,7 @@ private GetTransferTypeOptionsResponseStandingInstructionSwagger() {}
@Schema(example = "accountTransferType.account.transfer")
public String code;
@Schema(example = "Account Transfer")
public String description;
public String value;
}

static final class GetStatusOptionsResponseStandingInstructionSwagger {
Expand All @@ -149,7 +149,7 @@ private GetStatusOptionsResponseStandingInstructionSwagger() {}
@Schema(example = "standingInstructionStatus.active")
public String code;
@Schema(example = "Active")
public String description;
public String value;
}

static final class GetInstructionTypeOptionsResponseStandingInstructionSwagger {
Expand All @@ -161,7 +161,7 @@ private GetInstructionTypeOptionsResponseStandingInstructionSwagger() {}
@Schema(example = "standingInstructionType.fixed")
public String code;
@Schema(example = "Fixed")
public String description;
public String value;
}

static final class GetPriorityOptionsResponseStandingInstructionSwagger {
Expand All @@ -173,7 +173,7 @@ private GetPriorityOptionsResponseStandingInstructionSwagger() {}
@Schema(example = "standingInstructionPriority.urgent")
public String code;
@Schema(example = "Urgent Priority")
public String description;
public String value;
}

static final class GetRecurrenceTypeOptionsResponseStandingInstructionSwagger {
Expand All @@ -185,7 +185,7 @@ private GetRecurrenceTypeOptionsResponseStandingInstructionSwagger() {}
@Schema(example = "accountTransferRecurrenceType.periodic")
public String code;
@Schema(example = "Periodic Recurrence")
public String description;
public String value;
}

static final class GetRecurrenceFrequencyOptionsResponseStandingInstructionSwagger {
Expand All @@ -197,7 +197,7 @@ private GetRecurrenceFrequencyOptionsResponseStandingInstructionSwagger() {}
@Schema(example = "frequencyperiodFrequencyType.days")
public String code;
@Schema(example = "Days")
public String description;
public String value;
}

public GetFromOfficeResponseStandingInstructionSwagger fromOffice;
Expand Down Expand Up @@ -266,7 +266,7 @@ private GetFromAccountTypeStandingInstructionSwagger() {}
@Schema(example = "accountType.savings")
public String code;
@Schema(example = "Savings Account")
public String description;
public String value;
}

static final class GetFromAccountStandingInstructionSwagger {
Expand Down Expand Up @@ -316,7 +316,7 @@ private GetToAccountTypeStandingInstructionSwagger() {}
@Schema(example = "accountType.savings")
public String code;
@Schema(example = "Savings Account")
public String description;
public String value;
}

static final class GetToAccountStandingInstructionSwagger {
Expand All @@ -342,7 +342,7 @@ private GetTransferTypeStandingInstructionSwagger() {}
@Schema(example = "accountTransferType.account.transfer")
public String code;
@Schema(example = "Account Transfer")
public String description;
public String value;
}

static final class GetPriorityStandingInstructionSwagger {
Expand All @@ -354,7 +354,7 @@ private GetPriorityStandingInstructionSwagger() {}
@Schema(example = "standingInstructionPriority.medium")
public String code;
@Schema(example = "Medium Priority")
public String description;
public String value;
}

static final class GetInstructionTypeStandingInstructionSwagger {
Expand All @@ -366,7 +366,7 @@ private GetInstructionTypeStandingInstructionSwagger() {}
@Schema(example = "standingInstructionType.fixed")
public String code;
@Schema(example = "Fixed")
public String description;
public String value;
}

static final class GetStatusStandingInstructionSwagger {
Expand All @@ -378,7 +378,7 @@ private GetStatusStandingInstructionSwagger() {}
@Schema(example = "standingInstructionStatus.deleted")
public String code;
@Schema(example = "Deleted")
public String description;
public String value;
}

static final class GetRecurrenceTypeStandingInstructionSwagger {
Expand All @@ -390,7 +390,7 @@ private GetRecurrenceTypeStandingInstructionSwagger() {}
@Schema(example = "accountTransferRecurrenceType.periodic")
public String code;
@Schema(example = "Periodic Recurrence")
public String description;
public String value;
}

static final class GetRecurrenceFrequencyStandingInstructionSwagger {
Expand All @@ -402,7 +402,7 @@ private GetRecurrenceFrequencyStandingInstructionSwagger() {}
@Schema(example = "frequencyperiodFrequencyType.months")
public String code;
@Schema(example = "Months")
public String description;
public String value;
}

@Schema(example = "1")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,12 @@
*/
package org.apache.fineract.integrationtests;

import com.google.gson.Gson;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import lombok.extern.slf4j.Slf4j;
import org.apache.fineract.client.models.BusinessDateUpdateRequest;
import org.apache.fineract.client.models.ExternalEventConfigurationUpdateRequest;
import org.apache.fineract.client.models.PostLoanProductsRequest;
import org.apache.fineract.client.models.PostLoanProductsResponse;
import org.apache.fineract.infrastructure.event.external.data.ExternalEventResponse;
Expand Down Expand Up @@ -307,26 +306,19 @@ private void enableCOBBusinessStep(String... steps) {

}

public static String getExternalEventConfigurationsForUpdateJSON() {
Map<String, Map<String, Boolean>> configurationsForUpdate = new HashMap<>();
Map<String, Boolean> configurations = new HashMap<>();
configurations.put("CentersCreateBusinessEvent", true);
configurations.put("ClientActivateBusinessEvent", true);
configurationsForUpdate.put("externalEventConfigurations", configurations);
return new Gson().toJson(configurationsForUpdate);
}

private void enableLoanAccountCustomSnapshotBusinessEvent() {
final Map<String, Boolean> updatedConfigurations = ExternalEventConfigurationHelper.updateExternalEventConfigurations(requestSpec,
responseSpec, "{\"externalEventConfigurations\":{\"LoanAccountCustomSnapshotBusinessEvent\":true}}\n");
responseSpec, new ExternalEventConfigurationUpdateRequest()
.externalEventConfigurations(Map.of("LoanAccountCustomSnapshotBusinessEvent", true)));
Assertions.assertEquals(updatedConfigurations.size(), 1);
Assertions.assertTrue(updatedConfigurations.containsKey("LoanAccountCustomSnapshotBusinessEvent"));
Assertions.assertTrue(updatedConfigurations.get("LoanAccountCustomSnapshotBusinessEvent"));
}

private void disableLoanAccountCustomSnapshotBusinessEvent() {
final Map<String, Boolean> updatedConfigurations = ExternalEventConfigurationHelper.updateExternalEventConfigurations(requestSpec,
responseSpec, "{\"externalEventConfigurations\":{\"LoanAccountCustomSnapshotBusinessEvent\":false}}\n");
responseSpec, new ExternalEventConfigurationUpdateRequest()
.externalEventConfigurations(Map.of("LoanAccountCustomSnapshotBusinessEvent", false)));
Assertions.assertEquals(updatedConfigurations.size(), 1);
Assertions.assertTrue(updatedConfigurations.containsKey("LoanAccountCustomSnapshotBusinessEvent"));
Assertions.assertFalse(updatedConfigurations.get("LoanAccountCustomSnapshotBusinessEvent"));
Expand Down
Loading
Loading