blob: e098a75cb60f742b6937c1744721aa9b4162aab4 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.fineract.integrationtests.common;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import com.google.gson.Gson;
import io.restassured.specification.RequestSpecification;
import io.restassured.specification.ResponseSpecification;
import java.util.ArrayList;
import java.util.HashMap;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.fineract.client.models.GlobalConfigurationPropertyData;
import org.apache.fineract.client.util.JSON;
import org.junit.jupiter.api.Assertions;
@SuppressWarnings({ "unused", "rawtypes" })
@Slf4j
@RequiredArgsConstructor
public class GlobalConfigurationHelper {
private static final Gson GSON = new JSON().getGson();
private final RequestSpecification requestSpec;
private final ResponseSpecification responseSpec;
public static final String ENABLE_AUTOGENERATED_EXTERNAL_ID = "enable-auto-generated-external-id";
public static ArrayList<HashMap> getAllGlobalConfigurations(final RequestSpecification requestSpec,
final ResponseSpecification responseSpec) {
final String GET_ALL_GLOBAL_CONFIG_URL = "/fineract-provider/api/v1/configurations?" + Utils.TENANT_IDENTIFIER;
log.info("------------------------ RETRIEVING ALL GLOBAL CONFIGURATIONS -------------------------");
final HashMap<String, ArrayList<HashMap>> response = Utils.performServerGet(requestSpec, responseSpec, GET_ALL_GLOBAL_CONFIG_URL,
"");
return response.get("globalConfiguration");
}
public static HashMap getGlobalConfigurationById(final RequestSpecification requestSpec, final ResponseSpecification responseSpec,
final String configId) {
final String GET_GLOBAL_CONFIG_BY_ID_URL = "/fineract-provider/api/v1/configurations/" + configId + "?" + Utils.TENANT_IDENTIFIER;
log.info("------------------------ RETRIEVING GLOBAL CONFIGURATION BY ID -------------------------");
return Utils.performServerGet(requestSpec, responseSpec, GET_GLOBAL_CONFIG_BY_ID_URL, "");
}
public static GlobalConfigurationPropertyData getGlobalConfigurationByName(final RequestSpecification requestSpec,
final ResponseSpecification responseSpec, final String name) {
final String GET_GLOBAL_CONFIG_BY_NAME_URL = "/fineract-provider/api/v1/configurations/name/" + name + "?"
+ Utils.TENANT_IDENTIFIER;
log.info("------------------------ RETRIEVING GLOBAL CONFIGURATION BY NAME -------------------------");
String response = Utils.performServerGet(requestSpec, responseSpec, GET_GLOBAL_CONFIG_BY_NAME_URL);
return GSON.fromJson(response, GlobalConfigurationPropertyData.class);
}
// TODO: This is quite a bad pattern and adds a lot of time to individual test executions
public static void resetAllDefaultGlobalConfigurations(final RequestSpecification requestSpec,
final ResponseSpecification responseSpec) {
ArrayList<HashMap> actualGlobalConfigurations = getAllGlobalConfigurations(requestSpec, responseSpec);
final ArrayList<HashMap> defaults = getAllDefaultGlobalConfigurations();
int changedNo = 0;
for (int i = 0; i < actualGlobalConfigurations.size(); i++) {
HashMap defaultGlobalConfiguration = defaults.get(i);
HashMap actualGlobalConfiguration = actualGlobalConfigurations.get(i);
if (!isMatching(defaultGlobalConfiguration, actualGlobalConfiguration)) {
/**
* Cannot update trapDoor global configurations because
* {@link org.apache.fineract.infrastructure.configuration.exception.GlobalConfigurationPropertyCannotBeModfied}
* will be thrown.
*/
if ((Boolean) defaultGlobalConfiguration.get("trapDoor")) {
continue;
}
// Currently only values and enabled flags are modified by the
// integration test suite.
// If any other column is modified by the integration test suite in
// the future, it needs to be reset here.
final Integer configDefaultId = (Integer) defaultGlobalConfiguration.get("id");
final String configDefaultValue = String.valueOf(defaultGlobalConfiguration.get("value"));
updateValueForGlobalConfiguration(requestSpec, responseSpec, configDefaultId.toString(), configDefaultValue);
updateEnabledFlagForGlobalConfiguration(requestSpec, responseSpec, configDefaultId.toString(),
(Boolean) defaultGlobalConfiguration.get("enabled"));
changedNo++;
}
}
log.info("--------------------------------- UPDATED GLOBAL CONFIG ENTRY SIZE: {} ---------------------------------------------",
changedNo);
}
private static boolean isMatching(HashMap o1, HashMap o2) {
return o1.get("id").equals(o2.get("id")) && o1.get("name").equals(o2.get("name")) && o1.get("value").equals(o2.get("value"))
&& o1.get("enabled").equals(o2.get("enabled")) && o1.get("trapDoor").equals(o2.get("trapDoor"));
}
public static void verifyAllDefaultGlobalConfigurations(final RequestSpecification requestSpec,
final ResponseSpecification responseSpec) {
ArrayList<HashMap> expectedGlobalConfigurations = getAllDefaultGlobalConfigurations();
ArrayList<HashMap> actualGlobalConfigurations = getAllGlobalConfigurations(requestSpec, responseSpec);
Assertions.assertEquals(54, expectedGlobalConfigurations.size());
Assertions.assertEquals(54, actualGlobalConfigurations.size());
for (int i = 0; i < expectedGlobalConfigurations.size(); i++) {
HashMap expectedGlobalConfiguration = expectedGlobalConfigurations.get(i);
HashMap actualGlobalConfiguration = actualGlobalConfigurations.get(i);
Assertions.assertEquals(expectedGlobalConfiguration.get("id"), actualGlobalConfiguration.get("id"));
final String assertionFailedMessage = "Assertion failed for configID:<" + expectedGlobalConfiguration.get("id") + ">";
Assertions.assertEquals(expectedGlobalConfiguration.get("name"), actualGlobalConfiguration.get("name"), assertionFailedMessage);
Assertions.assertEquals(expectedGlobalConfiguration.get("value"), actualGlobalConfiguration.get("value"),
assertionFailedMessage);
Assertions.assertEquals(expectedGlobalConfiguration.get("enabled"), actualGlobalConfiguration.get("enabled"),
assertionFailedMessage);
Assertions.assertEquals(expectedGlobalConfiguration.get("trapDoor"), actualGlobalConfiguration.get("trapDoor"),
assertionFailedMessage);
}
}
/**
* Helper method to get the current default instance data of the /configurations endpoint. Used to reset and verify
* that no global configuration affects state between integration tests.
*
* @see <a href= "https://issues.apache.org/jira/browse/FINERACT-722">FINERACT-722</a> This is a quick, fail fast
* and early implementation to resolve this issue. TODO: A more robust future solution would be isolating all
* integration test state using Spring Framework's integration test infrastructure for transaction commits and
* rollbacks.
*/
private static ArrayList<HashMap> getAllDefaultGlobalConfigurations() {
ArrayList<HashMap> defaults = new ArrayList<>();
HashMap<String, Object> makerCheckerDefault = new HashMap<>();
makerCheckerDefault.put("id", 1);
makerCheckerDefault.put("name", "maker-checker");
makerCheckerDefault.put("value", 0);
makerCheckerDefault.put("enabled", false);
makerCheckerDefault.put("trapDoor", false);
defaults.add(makerCheckerDefault);
HashMap<String, Object> amazonS3Default = new HashMap<>();
amazonS3Default.put("id", 4);
amazonS3Default.put("name", "amazon-S3");
amazonS3Default.put("value", 0);
amazonS3Default.put("enabled", false);
amazonS3Default.put("trapDoor", false);
defaults.add(amazonS3Default);
HashMap<String, Object> rescheduleFuturePaymentsDefault = new HashMap<>();
rescheduleFuturePaymentsDefault.put("id", 5);
rescheduleFuturePaymentsDefault.put("name", "reschedule-future-repayments");
rescheduleFuturePaymentsDefault.put("value", 0);
rescheduleFuturePaymentsDefault.put("enabled", true);
rescheduleFuturePaymentsDefault.put("trapDoor", false);
defaults.add(rescheduleFuturePaymentsDefault);
HashMap<String, Object> rescheduleRepaymentsOnHolidaysDefault = new HashMap<>();
rescheduleRepaymentsOnHolidaysDefault.put("id", 6);
rescheduleRepaymentsOnHolidaysDefault.put("name", "reschedule-repayments-on-holidays");
rescheduleRepaymentsOnHolidaysDefault.put("value", 0);
rescheduleRepaymentsOnHolidaysDefault.put("enabled", false);
rescheduleRepaymentsOnHolidaysDefault.put("trapDoor", false);
defaults.add(rescheduleRepaymentsOnHolidaysDefault);
HashMap<String, Object> allowTransactionsOnHolidayDefault = new HashMap<>();
allowTransactionsOnHolidayDefault.put("id", 7);
allowTransactionsOnHolidayDefault.put("name", "allow-transactions-on-holiday");
allowTransactionsOnHolidayDefault.put("value", 0);
allowTransactionsOnHolidayDefault.put("enabled", false);
allowTransactionsOnHolidayDefault.put("trapDoor", false);
defaults.add(allowTransactionsOnHolidayDefault);
HashMap<String, Object> allowTransactionsOnNonWorkingDayDefault = new HashMap<>();
allowTransactionsOnNonWorkingDayDefault.put("id", 8);
allowTransactionsOnNonWorkingDayDefault.put("name", "allow-transactions-on-non_workingday");
allowTransactionsOnNonWorkingDayDefault.put("value", 0);
allowTransactionsOnNonWorkingDayDefault.put("enabled", false);
allowTransactionsOnNonWorkingDayDefault.put("trapDoor", false);
defaults.add(allowTransactionsOnNonWorkingDayDefault);
HashMap<String, Object> constraintApproachForDataTablesDefault = new HashMap<>();
constraintApproachForDataTablesDefault.put("id", 9);
constraintApproachForDataTablesDefault.put("name", "constraint_approach_for_datatables");
constraintApproachForDataTablesDefault.put("value", 0);
constraintApproachForDataTablesDefault.put("enabled", false);
constraintApproachForDataTablesDefault.put("trapDoor", false);
defaults.add(constraintApproachForDataTablesDefault);
HashMap<String, Object> penaltyWaitPeriodDefault = new HashMap<>();
penaltyWaitPeriodDefault.put("id", 10);
penaltyWaitPeriodDefault.put("name", "penalty-wait-period");
penaltyWaitPeriodDefault.put("value", 2);
penaltyWaitPeriodDefault.put("enabled", true);
penaltyWaitPeriodDefault.put("trapDoor", false);
defaults.add(penaltyWaitPeriodDefault);
HashMap<String, Object> forcePasswordResetDaysDefault = new HashMap<>();
forcePasswordResetDaysDefault.put("id", 11);
forcePasswordResetDaysDefault.put("name", "force-password-reset-days");
forcePasswordResetDaysDefault.put("value", 0);
forcePasswordResetDaysDefault.put("enabled", false);
forcePasswordResetDaysDefault.put("trapDoor", false);
defaults.add(forcePasswordResetDaysDefault);
HashMap<String, Object> graceOnPenaltyPostingDefault = new HashMap<>();
graceOnPenaltyPostingDefault.put("id", 12);
graceOnPenaltyPostingDefault.put("name", "grace-on-penalty-posting");
graceOnPenaltyPostingDefault.put("value", 0);
graceOnPenaltyPostingDefault.put("enabled", true);
graceOnPenaltyPostingDefault.put("trapDoor", false);
defaults.add(graceOnPenaltyPostingDefault);
HashMap<String, Object> savingsInterestPostingCurrentPeriodEndDefault = new HashMap<>();
savingsInterestPostingCurrentPeriodEndDefault.put("id", 15);
savingsInterestPostingCurrentPeriodEndDefault.put("name", "savings-interest-posting-current-period-end");
savingsInterestPostingCurrentPeriodEndDefault.put("value", 0);
savingsInterestPostingCurrentPeriodEndDefault.put("enabled", false);
savingsInterestPostingCurrentPeriodEndDefault.put("trapDoor", false);
defaults.add(savingsInterestPostingCurrentPeriodEndDefault);
HashMap<String, Object> financialYearBeginningMonthDefault = new HashMap<>();
financialYearBeginningMonthDefault.put("id", 16);
financialYearBeginningMonthDefault.put("name", "financial-year-beginning-month");
financialYearBeginningMonthDefault.put("value", 1);
financialYearBeginningMonthDefault.put("enabled", true);
financialYearBeginningMonthDefault.put("trapDoor", false);
defaults.add(financialYearBeginningMonthDefault);
HashMap<String, Object> minClientsInGroupDefault = new HashMap<>();
minClientsInGroupDefault.put("id", 17);
minClientsInGroupDefault.put("name", "min-clients-in-group");
minClientsInGroupDefault.put("value", 5);
minClientsInGroupDefault.put("enabled", false);
minClientsInGroupDefault.put("trapDoor", false);
defaults.add(minClientsInGroupDefault);
HashMap<String, Object> maxClientsInGroupDefault = new HashMap<>();
maxClientsInGroupDefault.put("id", 18);
maxClientsInGroupDefault.put("name", "max-clients-in-group");
maxClientsInGroupDefault.put("value", 5);
maxClientsInGroupDefault.put("enabled", false);
maxClientsInGroupDefault.put("trapDoor", false);
defaults.add(maxClientsInGroupDefault);
HashMap<String, Object> meetingsMandatoryForJlgLoansDefault = new HashMap<>();
meetingsMandatoryForJlgLoansDefault.put("id", 19);
meetingsMandatoryForJlgLoansDefault.put("name", "meetings-mandatory-for-jlg-loans");
meetingsMandatoryForJlgLoansDefault.put("value", 0);
meetingsMandatoryForJlgLoansDefault.put("enabled", false);
meetingsMandatoryForJlgLoansDefault.put("trapDoor", false);
defaults.add(meetingsMandatoryForJlgLoansDefault);
HashMap<String, Object> officeSpecificProductsEnabledDefault = new HashMap<>();
officeSpecificProductsEnabledDefault.put("id", 20);
officeSpecificProductsEnabledDefault.put("name", "office-specific-products-enabled");
officeSpecificProductsEnabledDefault.put("value", 0);
officeSpecificProductsEnabledDefault.put("enabled", false);
officeSpecificProductsEnabledDefault.put("trapDoor", false);
defaults.add(officeSpecificProductsEnabledDefault);
HashMap<String, Object> restrictProductsToUserOfficeDefault = new HashMap<>();
restrictProductsToUserOfficeDefault.put("id", 21);
restrictProductsToUserOfficeDefault.put("name", "restrict-products-to-user-office");
restrictProductsToUserOfficeDefault.put("value", 0);
restrictProductsToUserOfficeDefault.put("enabled", false);
restrictProductsToUserOfficeDefault.put("trapDoor", false);
defaults.add(restrictProductsToUserOfficeDefault);
HashMap<String, Object> officeOpeningBalancesContraAccountDefault = new HashMap<>();
officeOpeningBalancesContraAccountDefault.put("id", 22);
officeOpeningBalancesContraAccountDefault.put("name", "office-opening-balances-contra-account");
officeOpeningBalancesContraAccountDefault.put("value", 0);
officeOpeningBalancesContraAccountDefault.put("enabled", true);
officeOpeningBalancesContraAccountDefault.put("trapDoor", false);
defaults.add(officeOpeningBalancesContraAccountDefault);
HashMap<String, Object> roundingModeDefault = new HashMap<>();
roundingModeDefault.put("id", 23);
roundingModeDefault.put("name", "rounding-mode");
roundingModeDefault.put("value", 6);
roundingModeDefault.put("enabled", true);
roundingModeDefault.put("trapDoor", true);
defaults.add(roundingModeDefault);
HashMap<String, Object> backDatePenaltiesEnabledDefault = new HashMap<>();
backDatePenaltiesEnabledDefault.put("id", 24);
backDatePenaltiesEnabledDefault.put("name", "backdate-penalties-enabled");
backDatePenaltiesEnabledDefault.put("value", 0);
backDatePenaltiesEnabledDefault.put("enabled", true);
backDatePenaltiesEnabledDefault.put("trapDoor", false);
defaults.add(backDatePenaltiesEnabledDefault);
HashMap<String, Object> organisationStartDateDefault = new HashMap<>();
organisationStartDateDefault.put("id", 25);
organisationStartDateDefault.put("name", "organisation-start-date");
organisationStartDateDefault.put("value", 0);
organisationStartDateDefault.put("enabled", false);
organisationStartDateDefault.put("trapDoor", false);
defaults.add(organisationStartDateDefault);
HashMap<String, Object> paymentTypeApplicableForDisbursementChargesDefault = new HashMap<>();
paymentTypeApplicableForDisbursementChargesDefault.put("id", 26);
paymentTypeApplicableForDisbursementChargesDefault.put("name", "paymenttype-applicable-for-disbursement-charges");
paymentTypeApplicableForDisbursementChargesDefault.put("value", 0);
paymentTypeApplicableForDisbursementChargesDefault.put("enabled", false);
paymentTypeApplicableForDisbursementChargesDefault.put("trapDoor", false);
defaults.add(paymentTypeApplicableForDisbursementChargesDefault);
HashMap<String, Object> interestChargedFromDateSameAsDisbursalDateDefault = new HashMap<>();
interestChargedFromDateSameAsDisbursalDateDefault.put("id", 27);
interestChargedFromDateSameAsDisbursalDateDefault.put("name", "interest-charged-from-date-same-as-disbursal-date");
interestChargedFromDateSameAsDisbursalDateDefault.put("value", 0);
interestChargedFromDateSameAsDisbursalDateDefault.put("enabled", false);
interestChargedFromDateSameAsDisbursalDateDefault.put("trapDoor", false);
defaults.add(interestChargedFromDateSameAsDisbursalDateDefault);
HashMap<String, Object> skipRepaymentOnFirstDayOfMonthDefault = new HashMap<>();
skipRepaymentOnFirstDayOfMonthDefault.put("id", 28);
skipRepaymentOnFirstDayOfMonthDefault.put("name", "skip-repayment-on-first-day-of-month");
skipRepaymentOnFirstDayOfMonthDefault.put("value", 14);
skipRepaymentOnFirstDayOfMonthDefault.put("enabled", false);
skipRepaymentOnFirstDayOfMonthDefault.put("trapDoor", false);
defaults.add(skipRepaymentOnFirstDayOfMonthDefault);
HashMap<String, Object> changeEmiIfRepaymentDateSameAsDisbursementDateDefault = new HashMap<>();
changeEmiIfRepaymentDateSameAsDisbursementDateDefault.put("id", 29);
changeEmiIfRepaymentDateSameAsDisbursementDateDefault.put("name", "change-emi-if-repaymentdate-same-as-disbursementdate");
changeEmiIfRepaymentDateSameAsDisbursementDateDefault.put("value", 0);
changeEmiIfRepaymentDateSameAsDisbursementDateDefault.put("enabled", true);
changeEmiIfRepaymentDateSameAsDisbursementDateDefault.put("trapDoor", false);
defaults.add(changeEmiIfRepaymentDateSameAsDisbursementDateDefault);
HashMap<String, Object> dailyTptLimitDefault = new HashMap<>();
dailyTptLimitDefault.put("id", 30);
dailyTptLimitDefault.put("name", "daily-tpt-limit");
dailyTptLimitDefault.put("value", 0);
dailyTptLimitDefault.put("enabled", false);
dailyTptLimitDefault.put("trapDoor", false);
defaults.add(dailyTptLimitDefault);
HashMap<String, Object> enableAddressDefault = new HashMap<>();
enableAddressDefault.put("id", 31);
enableAddressDefault.put("name", "Enable-Address");
enableAddressDefault.put("value", 0);
enableAddressDefault.put("enabled", false);
enableAddressDefault.put("trapDoor", false);
defaults.add(enableAddressDefault);
HashMap<String, Object> enableSubRatesDefault = new HashMap<>();
enableSubRatesDefault.put("id", 32);
enableSubRatesDefault.put("name", "sub-rates");
enableSubRatesDefault.put("value", 0);
enableSubRatesDefault.put("enabled", false);
enableSubRatesDefault.put("trapDoor", false);
defaults.add(enableSubRatesDefault);
HashMap<String, Object> isFirstPaydayAllowedOnHoliday = new HashMap<>();
isFirstPaydayAllowedOnHoliday.put("id", 33);
isFirstPaydayAllowedOnHoliday.put("name", "loan-reschedule-is-first-payday-allowed-on-holiday");
isFirstPaydayAllowedOnHoliday.put("value", 0);
isFirstPaydayAllowedOnHoliday.put("enabled", false);
isFirstPaydayAllowedOnHoliday.put("trapDoor", false);
defaults.add(isFirstPaydayAllowedOnHoliday);
HashMap<String, Object> isAccountMappedForPayment = new HashMap<>();
isAccountMappedForPayment.put("id", 35);
isAccountMappedForPayment.put("name", "account-mapping-for-payment-type");
isAccountMappedForPayment.put("value", 0);
isAccountMappedForPayment.put("enabled", true);
isAccountMappedForPayment.put("trapDoor", false);
isAccountMappedForPayment.put("string_value", "Asset");
defaults.add(isAccountMappedForPayment);
HashMap<String, Object> isAccountMappedForCharge = new HashMap<>();
isAccountMappedForCharge.put("id", 36);
isAccountMappedForCharge.put("name", "account-mapping-for-charge");
isAccountMappedForCharge.put("value", 0);
isAccountMappedForCharge.put("enabled", true);
isAccountMappedForCharge.put("trapDoor", false);
isAccountMappedForCharge.put("string_value", "Income");
defaults.add(isAccountMappedForCharge);
HashMap<String, Object> isNextDayFixedDepositInterestTransferEnabledForPeriodEnd = new HashMap<>();
isNextDayFixedDepositInterestTransferEnabledForPeriodEnd.put("id", 37);
isNextDayFixedDepositInterestTransferEnabledForPeriodEnd.put("name",
"fixed-deposit-transfer-interest-next-day-for-period-end-posting");
isNextDayFixedDepositInterestTransferEnabledForPeriodEnd.put("value", 0);
isNextDayFixedDepositInterestTransferEnabledForPeriodEnd.put("enabled", false);
isNextDayFixedDepositInterestTransferEnabledForPeriodEnd.put("trapDoor", false);
defaults.add(isNextDayFixedDepositInterestTransferEnabledForPeriodEnd);
HashMap<String, Object> isAllowedBackDatedTransactionsBeforeInterestPostingDate = new HashMap<>();
isAllowedBackDatedTransactionsBeforeInterestPostingDate.put("id", 38);
isAllowedBackDatedTransactionsBeforeInterestPostingDate.put("name", "allow-backdated-transaction-before-interest-posting");
isAllowedBackDatedTransactionsBeforeInterestPostingDate.put("value", 0);
isAllowedBackDatedTransactionsBeforeInterestPostingDate.put("enabled", true);
isAllowedBackDatedTransactionsBeforeInterestPostingDate.put("trapDoor", false);
defaults.add(isAllowedBackDatedTransactionsBeforeInterestPostingDate);
HashMap<String, Object> isAllowedBackDatedTransactionsBeforeInterestPostingDateForDays = new HashMap<>();
isAllowedBackDatedTransactionsBeforeInterestPostingDateForDays.put("id", 39);
isAllowedBackDatedTransactionsBeforeInterestPostingDateForDays.put("name",
"allow-backdated-transaction-before-interest-posting-date-for-days");
isAllowedBackDatedTransactionsBeforeInterestPostingDateForDays.put("value", 0);
isAllowedBackDatedTransactionsBeforeInterestPostingDateForDays.put("enabled", false);
isAllowedBackDatedTransactionsBeforeInterestPostingDateForDays.put("trapDoor", false);
defaults.add(isAllowedBackDatedTransactionsBeforeInterestPostingDateForDays);
HashMap<String, Object> isClientAccountNumberLengthModify = new HashMap<>();
isClientAccountNumberLengthModify.put("id", 40);
isClientAccountNumberLengthModify.put("name", "custom-account-number-length");
isClientAccountNumberLengthModify.put("value", 0);
isClientAccountNumberLengthModify.put("enabled", false);
isClientAccountNumberLengthModify.put("trapDoor", false);
defaults.add(isClientAccountNumberLengthModify);
HashMap<String, Object> isAccountNumberRandomGenerated = new HashMap<>();
isAccountNumberRandomGenerated.put("id", 41);
isAccountNumberRandomGenerated.put("name", "random-account-number");
isAccountNumberRandomGenerated.put("value", 0);
isAccountNumberRandomGenerated.put("enabled", false);
isAccountNumberRandomGenerated.put("trapDoor", false);
defaults.add(isAccountNumberRandomGenerated);
HashMap<String, Object> isInterestAppropriationEnabled = new HashMap<>();
isInterestAppropriationEnabled.put("id", 42);
isInterestAppropriationEnabled.put("name", "is-interest-to-be-recovered-first-when-greater-than-emi");
isInterestAppropriationEnabled.put("value", 0);
isInterestAppropriationEnabled.put("enabled", false);
isInterestAppropriationEnabled.put("trapDoor", false);
defaults.add(isInterestAppropriationEnabled);
HashMap<String, Object> isPrincipalCompoundingDisabled = new HashMap<>();
isPrincipalCompoundingDisabled.put("id", 43);
isPrincipalCompoundingDisabled.put("name", "is-principal-compounding-disabled-for-overdue-loans");
isPrincipalCompoundingDisabled.put("value", 0);
isPrincipalCompoundingDisabled.put("enabled", false);
isPrincipalCompoundingDisabled.put("trapDoor", false);
defaults.add(isPrincipalCompoundingDisabled);
HashMap<String, Object> isBusinessDateEnabled = new HashMap<>();
isBusinessDateEnabled.put("id", 44);
isBusinessDateEnabled.put("name", "enable_business_date");
isBusinessDateEnabled.put("value", 0);
isBusinessDateEnabled.put("enabled", false);
isBusinessDateEnabled.put("trapDoor", false);
defaults.add(isBusinessDateEnabled);
HashMap<String, Object> isAutomaticCOBDateAdjustmentEnabled = new HashMap<>();
isAutomaticCOBDateAdjustmentEnabled.put("id", 45);
isAutomaticCOBDateAdjustmentEnabled.put("name", "enable_automatic_cob_date_adjustment");
isAutomaticCOBDateAdjustmentEnabled.put("value", 0);
isAutomaticCOBDateAdjustmentEnabled.put("enabled", true);
isAutomaticCOBDateAdjustmentEnabled.put("trapDoor", false);
defaults.add(isAutomaticCOBDateAdjustmentEnabled);
HashMap<String, Object> isReversalTransactionAllowed = new HashMap<>();
isReversalTransactionAllowed.put("id", 46);
isReversalTransactionAllowed.put("name", "enable-post-reversal-txns-for-reverse-transactions");
isReversalTransactionAllowed.put("value", 0);
isReversalTransactionAllowed.put("enabled", false);
isReversalTransactionAllowed.put("trapDoor", false);
defaults.add(isReversalTransactionAllowed);
HashMap<String, Object> purgeExternalEventsOlderThanDaysDefault = new HashMap<>();
purgeExternalEventsOlderThanDaysDefault.put("id", 47);
purgeExternalEventsOlderThanDaysDefault.put("name", "purge-external-events-older-than-days");
purgeExternalEventsOlderThanDaysDefault.put("value", 30);
purgeExternalEventsOlderThanDaysDefault.put("enabled", false);
purgeExternalEventsOlderThanDaysDefault.put("trapDoor", false);
defaults.add(purgeExternalEventsOlderThanDaysDefault);
HashMap<String, Object> loanRepaymentDueDaysDefault = new HashMap<>();
loanRepaymentDueDaysDefault.put("id", 48);
loanRepaymentDueDaysDefault.put("name", "days-before-repayment-is-due");
loanRepaymentDueDaysDefault.put("value", 1);
loanRepaymentDueDaysDefault.put("enabled", false);
loanRepaymentDueDaysDefault.put("trapDoor", false);
defaults.add(loanRepaymentDueDaysDefault);
HashMap<String, Object> loanRepaymentOverdueDaysDefault = new HashMap<>();
loanRepaymentOverdueDaysDefault.put("id", 49);
loanRepaymentOverdueDaysDefault.put("name", "days-after-repayment-is-overdue");
loanRepaymentOverdueDaysDefault.put("value", 1);
loanRepaymentOverdueDaysDefault.put("enabled", false);
loanRepaymentOverdueDaysDefault.put("trapDoor", false);
defaults.add(loanRepaymentOverdueDaysDefault);
HashMap<String, Object> isAutomaticExternalIdGenerationEnabled = new HashMap<>();
isAutomaticExternalIdGenerationEnabled.put("id", 50);
isAutomaticExternalIdGenerationEnabled.put("name", "enable-auto-generated-external-id");
isAutomaticExternalIdGenerationEnabled.put("value", 0);
isAutomaticExternalIdGenerationEnabled.put("enabled", false);
isAutomaticExternalIdGenerationEnabled.put("trapDoor", false);
defaults.add(isAutomaticExternalIdGenerationEnabled);
HashMap<String, Object> purgeProcessCommandDaysDefault = new HashMap<>();
purgeProcessCommandDaysDefault.put("id", 51);
purgeProcessCommandDaysDefault.put("name", "purge-processed-commands-older-than-days");
purgeProcessCommandDaysDefault.put("value", 30);
purgeProcessCommandDaysDefault.put("enabled", false);
purgeProcessCommandDaysDefault.put("trapDoor", false);
defaults.add(purgeProcessCommandDaysDefault);
HashMap<String, Object> isCOBBulkEventEnabled = new HashMap<>();
isCOBBulkEventEnabled.put("id", 52);
isCOBBulkEventEnabled.put("name", "enable-cob-bulk-event");
isCOBBulkEventEnabled.put("value", 0);
isCOBBulkEventEnabled.put("enabled", false);
isCOBBulkEventEnabled.put("trapDoor", false);
defaults.add(isCOBBulkEventEnabled);
HashMap<String, Object> externalEventBatchSize = new HashMap<>();
externalEventBatchSize.put("id", 53);
externalEventBatchSize.put("name", "external-event-batch-size");
externalEventBatchSize.put("value", 1000);
externalEventBatchSize.put("enabled", false);
externalEventBatchSize.put("trapDoor", false);
defaults.add(externalEventBatchSize);
HashMap<String, Object> reportExportS3FolderName = new HashMap<>();
reportExportS3FolderName.put("id", 54);
reportExportS3FolderName.put("name", "report-export-s3-folder-name");
reportExportS3FolderName.put("value", 0);
reportExportS3FolderName.put("enabled", true);
reportExportS3FolderName.put("trapDoor", false);
defaults.add(reportExportS3FolderName);
HashMap<String, Object> loanArrearsDelinquencyDisplayData = new HashMap<>();
loanArrearsDelinquencyDisplayData.put("id", 55);
loanArrearsDelinquencyDisplayData.put("name", "loan-arrears-delinquency-display-data");
loanArrearsDelinquencyDisplayData.put("value", 0);
loanArrearsDelinquencyDisplayData.put("enabled", true);
loanArrearsDelinquencyDisplayData.put("trapDoor", false);
defaults.add(loanArrearsDelinquencyDisplayData);
HashMap<String, Object> accrualForChargeDate = new HashMap<>();
accrualForChargeDate.put("id", 56);
accrualForChargeDate.put("name", "charge-accrual-date");
accrualForChargeDate.put("value", 0);
accrualForChargeDate.put("enabled", true);
accrualForChargeDate.put("trapDoor", false);
accrualForChargeDate.put("string_value", "due-date");
defaults.add(accrualForChargeDate);
HashMap<String, Object> assetExternalizationOfNonActiveLoans = new HashMap<>();
assetExternalizationOfNonActiveLoans.put("id", 57);
assetExternalizationOfNonActiveLoans.put("name", "asset-externalization-of-non-active-loans");
assetExternalizationOfNonActiveLoans.put("value", 0);
assetExternalizationOfNonActiveLoans.put("enabled", true);
assetExternalizationOfNonActiveLoans.put("trapDoor", false);
defaults.add(assetExternalizationOfNonActiveLoans);
HashMap<String, Object> enableSameMakerChecker = new HashMap<>();
enableSameMakerChecker.put("id", 58);
enableSameMakerChecker.put("name", "enable-same-maker-checker");
enableSameMakerChecker.put("value", 0);
enableSameMakerChecker.put("enabled", false);
enableSameMakerChecker.put("trapDoor", false);
defaults.add(enableSameMakerChecker);
HashMap<String, Object> nextPaymentDateConfigForLoan = new HashMap<>();
nextPaymentDateConfigForLoan.put("id", 59);
nextPaymentDateConfigForLoan.put("name", "next-payment-due-date");
nextPaymentDateConfigForLoan.put("value", 0);
nextPaymentDateConfigForLoan.put("enabled", true);
nextPaymentDateConfigForLoan.put("trapDoor", false);
nextPaymentDateConfigForLoan.put("string_value", "earliest-unpaid-date");
defaults.add(nextPaymentDateConfigForLoan);
return defaults;
}
public static Integer updateValueForGlobalConfiguration(final RequestSpecification requestSpec,
final ResponseSpecification responseSpec, final String configId, final String value) {
final String GLOBAL_CONFIG_UPDATE_URL = "/fineract-provider/api/v1/configurations/" + configId + "?" + Utils.TENANT_IDENTIFIER;
log.info("---------------------------------UPDATE VALUE FOR GLOBAL CONFIG---------------------------------------------");
return Utils.performServerPut(requestSpec, responseSpec, GLOBAL_CONFIG_UPDATE_URL, updateGlobalConfigUpdateValueAsJSON(value),
"resourceId");
}
public static Integer updateValueForGlobalConfiguration(final RequestSpecification requestSpec,
final ResponseSpecification responseSpec, final String configId, final int value) {
return updateValueForGlobalConfiguration(requestSpec, responseSpec, configId, Integer.toString(value));
}
public static Integer updateEnabledFlagForGlobalConfiguration(final RequestSpecification requestSpec,
final ResponseSpecification responseSpec, final long configId, final boolean enabled) {
final String GLOBAL_CONFIG_UPDATE_URL = "/fineract-provider/api/v1/configurations/" + configId + "?" + Utils.TENANT_IDENTIFIER;
log.info("---------------------------------UPDATE GLOBAL CONFIG FOR ENABLED FLAG---------------------------------------------");
return Utils.performServerPut(requestSpec, responseSpec, GLOBAL_CONFIG_UPDATE_URL,
updateGlobalConfigUpdateEnabledFlagAsJSON(enabled), "resourceId");
}
// Deprecated because it's using configId as a String
@Deprecated
public static Integer updateEnabledFlagForGlobalConfiguration(final RequestSpecification requestSpec,
final ResponseSpecification responseSpec, final String configId, final boolean enabled) {
final String GLOBAL_CONFIG_UPDATE_URL = "/fineract-provider/api/v1/configurations/" + configId + "?" + Utils.TENANT_IDENTIFIER;
log.info("---------------------------------UPDATE GLOBAL CONFIG FOR ENABLED FLAG---------------------------------------------");
return Utils.performServerPut(requestSpec, responseSpec, GLOBAL_CONFIG_UPDATE_URL,
updateGlobalConfigUpdateEnabledFlagAsJSON(enabled), "resourceId");
}
public static ArrayList getGlobalConfigurationIsCacheEnabled(final RequestSpecification requestSpec,
final ResponseSpecification responseSpec) {
final String GET_IS_CACHE_GLOBAL_CONFIG_URL = "/fineract-provider/api/v1/caches?" + Utils.TENANT_IDENTIFIER;
log.info("------------------------ RETRIEVING IS CACHE ENABLED GLOBAL CONFIGURATION -------------------------");
final ArrayList<HashMap> response = Utils.performServerGet(requestSpec, responseSpec, GET_IS_CACHE_GLOBAL_CONFIG_URL, "");
return response;
}
public static HashMap updateIsCacheEnabledForGlobalConfiguration(final RequestSpecification requestSpec,
final ResponseSpecification responseSpec, final String cacheType) {
final String IS_CACHE_GLOBAL_CONFIG_UPDATE_URL = "/fineract-provider/api/v1/caches?" + Utils.TENANT_IDENTIFIER;
log.info("------------------UPDATE GLOBAL CONFIG FOR IS CACHE ENABLED----------------------");
return Utils.performServerPut(requestSpec, responseSpec, IS_CACHE_GLOBAL_CONFIG_UPDATE_URL,
updateIsCacheEnabledGlobalConfigUpdateAsJSON(cacheType), "changes");
}
public static Object updatePasswordResetDaysForGlobalConfiguration(final RequestSpecification requestSpec,
final ResponseSpecification responseSpec, final Integer configId, final String value, final String enabled,
final String jsonAttributeToGetBack) {
final String UPDATE_URL = "/fineract-provider/api/v1/configurations/" + configId + "?" + Utils.TENANT_IDENTIFIER;
log.info("------------------UPDATE GLOBAL CONFIG FOR FORCE PASSWORD RESET DAYS----------------------");
return Utils.performServerPut(requestSpec, responseSpec, UPDATE_URL, updatePasswordResetDaysGlobalConfigAsJSON(value, enabled),
jsonAttributeToGetBack);
}
public static String updateGlobalConfigUpdateValueAsJSON(final String value) {
final HashMap<String, String> map = new HashMap<>();
map.put("value", value);
log.info("map : {}", map);
return GSON.toJson(map);
}
public static String updatePasswordResetDaysGlobalConfigAsJSON(final String value, final String enabled) {
final HashMap<String, String> map = new HashMap<>();
if (value != null) {
map.put("value", value);
}
map.put("enabled", enabled);
log.info("map : {}", map);
return new Gson().toJson(map);
}
public static String updateGlobalConfigUpdateEnabledFlagAsJSON(final Boolean enabled) {
final HashMap<String, Boolean> map = new HashMap<String, Boolean>();
map.put("enabled", enabled);
log.info("map : {}", map);
return new Gson().toJson(map);
}
public static String updateIsCacheEnabledGlobalConfigUpdateAsJSON(final String cacheType) {
final HashMap<String, String> map = new HashMap<>();
map.put("cacheType", cacheType);
log.info("map : {}", map);
return new Gson().toJson(map);
}
public static Integer updateIsBusinessDateEnabled(final RequestSpecification requestSpec, final ResponseSpecification responseSpec,
final boolean enabled) {
long configId = 44;
return updateEnabledFlagForGlobalConfiguration(requestSpec, responseSpec, configId, enabled);
}
public static void manageConfigurations(final RequestSpecification requestSpec, final ResponseSpecification responseSpec,
final String configurationName, final boolean enabled) {
GlobalConfigurationPropertyData configuration = getGlobalConfigurationByName(requestSpec, responseSpec, configurationName);
assertNotNull(configuration);
updateEnabledFlagForGlobalConfiguration(requestSpec, responseSpec, configuration.getId(), enabled);
GlobalConfigurationPropertyData updatedConfiguration = getGlobalConfigurationByName(requestSpec, responseSpec, configurationName);
assertEquals(updatedConfiguration.getEnabled(), enabled);
}
public static Integer updateIsAutomaticExternalIdGenerationEnabled(final RequestSpecification requestSpec,
final ResponseSpecification responseSpec, final boolean enabled) {
long configId = 50;
return updateEnabledFlagForGlobalConfiguration(requestSpec, responseSpec, configId, enabled);
}
public static Integer updateChargeAccrualDateConfiguration(final RequestSpecification requestSpec,
final ResponseSpecification responseSpec, final String stringValue) {
long configId = 56;
final HashMap<String, String> map = new HashMap<>();
map.put("stringValue", stringValue);
log.info("map : {}", map);
final String configValue = GSON.toJson(map);
final String GLOBAL_CONFIG_UPDATE_URL = "/fineract-provider/api/v1/configurations/" + configId + "?" + Utils.TENANT_IDENTIFIER;
log.info("---------------------------------UPDATE VALUE FOR GLOBAL CONFIG---------------------------------------------");
return Utils.performServerPut(requestSpec, responseSpec, GLOBAL_CONFIG_UPDATE_URL, configValue, "resourceId");
}
public static Integer updateLoanNextPaymentDateConfiguration(final RequestSpecification requestSpec,
final ResponseSpecification responseSpec, final String stringValue) {
long configId = 59;
final HashMap<String, String> map = new HashMap<>();
map.put("stringValue", stringValue);
log.info("map : {}", map);
final String configValue = GSON.toJson(map);
final String GLOBAL_CONFIG_UPDATE_URL = "/fineract-provider/api/v1/configurations/" + configId + "?" + Utils.TENANT_IDENTIFIER;
log.info("---------------------------------UPDATE VALUE FOR GLOBAL CONFIG---------------------------------------------");
return Utils.performServerPut(requestSpec, responseSpec, GLOBAL_CONFIG_UPDATE_URL, configValue, "resourceId");
}
}