From cc181b5742fa25e7e189635b331789fb14035793 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Vorburger=20=E2=9B=91=EF=B8=8F?= Date: Thu, 12 Dec 2019 09:21:45 +0100 Subject: [PATCH] reset/verify all default global configurations in some integration tests (PR #671 for FINERACT-722) Remove necessary resetting of 2 select default global configurations in FlexibleSavingsInterestPostingIntegrationTest. Fixes issue where global configurations were affecting state between integration tests. This caused LoanReschedulingWithinCenterTest to fail on the first day of the month only because the "skip-repayment-on-first-day-of-month" configuration was modified but never reset by GlobalConfigurationTest. Also updated other integration tests to reset and verify default global configurations. FINERACT-722 --- ...SavingsInterestPostingIntegrationTest.java | 3 +- ...hargedFromDateSameAsDisbursalDateTest.java | 7 + .../GlobalConfigurationTest.java | 7 + .../LoanReschedulingWithinCenterTest.java | 3 + .../SchedulerJobsTestResults.java | 7 + .../SkipRepaymentOnMonthFirstTest.java | 7 + .../common/GlobalConfigurationHelper.java | 280 +++++++++++++++++- 7 files changed, 312 insertions(+), 2 deletions(-) diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/FlexibleSavingsInterestPostingIntegrationTest.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/FlexibleSavingsInterestPostingIntegrationTest.java index aa39e4e34..e6a65146a 100644 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/FlexibleSavingsInterestPostingIntegrationTest.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/FlexibleSavingsInterestPostingIntegrationTest.java @@ -148,7 +148,8 @@ public class FlexibleSavingsInterestPostingIntegrationTest { // Reset configuration fields @After public void tearDown() { - configureInterestPosting(false, 1); + GlobalConfigurationHelper.resetAllDefaultGlobalConfigurations(this.requestSpec, this.responseSpec); + GlobalConfigurationHelper.verifyAllDefaultGlobalConfigurations(this.requestSpec, this.responseSpec); } } diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/GlobalConfigInterestChargedFromDateSameAsDisbursalDateTest.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/GlobalConfigInterestChargedFromDateSameAsDisbursalDateTest.java index 97fee48e9..ee9bfb5c4 100644 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/GlobalConfigInterestChargedFromDateSameAsDisbursalDateTest.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/GlobalConfigInterestChargedFromDateSameAsDisbursalDateTest.java @@ -23,6 +23,7 @@ import java.util.HashMap; import org.apache.fineract.integrationtests.common.GlobalConfigurationHelper; import org.apache.fineract.integrationtests.common.Utils; +import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -47,6 +48,12 @@ public class GlobalConfigInterestChargedFromDateSameAsDisbursalDateTest { this.requestSpec.header("Authorization", "Basic " + Utils.loginIntoServerAndGetBase64EncodedAuthenticationKey()); this.responseSpec = new ResponseSpecBuilder().expectStatusCode(200).build(); } + + @After + public void tearDown() { + GlobalConfigurationHelper.resetAllDefaultGlobalConfigurations(this.requestSpec, this.responseSpec); + GlobalConfigurationHelper.verifyAllDefaultGlobalConfigurations(this.requestSpec, this.responseSpec); + } @SuppressWarnings( {"static-access", "rawtypes", "unchecked"}) @Test diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/GlobalConfigurationTest.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/GlobalConfigurationTest.java index b8d42d4e3..87f94a67f 100644 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/GlobalConfigurationTest.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/GlobalConfigurationTest.java @@ -24,6 +24,7 @@ import java.util.HashMap; import org.apache.fineract.integrationtests.common.CommonConstants; import org.apache.fineract.integrationtests.common.GlobalConfigurationHelper; import org.apache.fineract.integrationtests.common.Utils; +import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -51,6 +52,12 @@ public class GlobalConfigurationTest { this.httpStatusForidden = new ResponseSpecBuilder().expectStatusCode(403).build(); } + @After + public void tearDown() { + GlobalConfigurationHelper.resetAllDefaultGlobalConfigurations(this.requestSpec, this.responseSpec); + GlobalConfigurationHelper.verifyAllDefaultGlobalConfigurations(this.requestSpec, this.responseSpec); + } + @Test public void testGlobalConfigurations() { this.globalConfigurationHelper = new GlobalConfigurationHelper(this.requestSpec, this.responseSpec); diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/LoanReschedulingWithinCenterTest.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/LoanReschedulingWithinCenterTest.java index 6efd0ba8d..2928566d1 100644 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/LoanReschedulingWithinCenterTest.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/LoanReschedulingWithinCenterTest.java @@ -37,6 +37,7 @@ import org.apache.fineract.integrationtests.common.CalendarHelper; import org.apache.fineract.integrationtests.common.CenterDomain; import org.apache.fineract.integrationtests.common.CenterHelper; import org.apache.fineract.integrationtests.common.ClientHelper; +import org.apache.fineract.integrationtests.common.GlobalConfigurationHelper; import org.apache.fineract.integrationtests.common.GroupHelper; import org.apache.fineract.integrationtests.common.OfficeHelper; import org.apache.fineract.integrationtests.common.Utils; @@ -71,6 +72,8 @@ public class LoanReschedulingWithinCenterTest { this.loanTransactionHelper = new LoanTransactionHelper(this.requestSpec, this.responseSpec); this.loanApplicationApprovalTest = new LoanApplicationApprovalTest(); this.generalResponseSpec = new ResponseSpecBuilder().build(); + + GlobalConfigurationHelper.verifyAllDefaultGlobalConfigurations(this.requestSpec, this.responseSpec); } @SuppressWarnings("rawtypes") diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/SchedulerJobsTestResults.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/SchedulerJobsTestResults.java index e55985037..984b7183f 100644 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/SchedulerJobsTestResults.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/SchedulerJobsTestResults.java @@ -55,6 +55,7 @@ import org.apache.fineract.integrationtests.common.savings.SavingsProductHelper; import org.apache.fineract.integrationtests.common.savings.SavingsStatusChecker; import org.apache.fineract.portfolio.account.PortfolioAccountType; import org.apache.fineract.portfolio.account.domain.AccountTransferType; +import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Ignore; @@ -105,6 +106,12 @@ public class SchedulerJobsTestResults { this.journalEntryHelper = new JournalEntryHelper(this.requestSpec, this.responseSpec); } + @After + public void tearDown() { + GlobalConfigurationHelper.resetAllDefaultGlobalConfigurations(this.requestSpec, this.responseSpec); + GlobalConfigurationHelper.verifyAllDefaultGlobalConfigurations(this.requestSpec, this.responseSpec); + } + @Test public void testApplyAnnualFeeForSavingsJobOutcome() throws InterruptedException { this.savingsAccountHelper = new SavingsAccountHelper(this.requestSpec, this.responseSpec); diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/SkipRepaymentOnMonthFirstTest.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/SkipRepaymentOnMonthFirstTest.java index f78edd0a9..a34913991 100644 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/SkipRepaymentOnMonthFirstTest.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/SkipRepaymentOnMonthFirstTest.java @@ -32,6 +32,7 @@ import org.apache.fineract.integrationtests.common.Utils; import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder; import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder; import org.apache.fineract.integrationtests.common.loans.LoanTransactionHelper; +import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -61,6 +62,12 @@ public class SkipRepaymentOnMonthFirstTest { this.responseSpec = new ResponseSpecBuilder().expectStatusCode(200).build(); } + @After + public void tearDown() { + GlobalConfigurationHelper.resetAllDefaultGlobalConfigurations(this.requestSpec, this.responseSpec); + GlobalConfigurationHelper.verifyAllDefaultGlobalConfigurations(this.requestSpec, this.responseSpec); + } + @Test public void testSkippingRepaymentOnFirstDayOfMonth() { this.globalConfigurationHelper = new GlobalConfigurationHelper(this.requestSpec, this.responseSpec); diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/GlobalConfigurationHelper.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/GlobalConfigurationHelper.java index d1acfb838..82fe8c6eb 100644 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/GlobalConfigurationHelper.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/GlobalConfigurationHelper.java @@ -26,6 +26,7 @@ import java.util.Random; import com.google.gson.Gson; import com.jayway.restassured.specification.RequestSpecification; import com.jayway.restassured.specification.ResponseSpecification; +import org.junit.Assert; @SuppressWarnings({ "unused", "rawtypes" }) public class GlobalConfigurationHelper { @@ -38,7 +39,7 @@ public class GlobalConfigurationHelper { this.responseSpec = responseSpec; } - public static ArrayList getAllGlobalConfigurations(final RequestSpecification requestSpec, final ResponseSpecification responseSpec) { + public static ArrayList getAllGlobalConfigurations(final RequestSpecification requestSpec, final ResponseSpecification responseSpec) { final String GET_ALL_GLOBAL_CONFIG_URL = "/fineract-provider/api/v1/configurations?" + Utils.TENANT_IDENTIFIER; System.out.println("------------------------ RETRIEVING ALL GLOBAL CONFIGURATIONS -------------------------"); final HashMap response = Utils.performServerGet(requestSpec, responseSpec, GET_ALL_GLOBAL_CONFIG_URL, ""); @@ -52,6 +53,283 @@ public class GlobalConfigurationHelper { return Utils.performServerGet(requestSpec, responseSpec, GET_GLOBAL_CONFIG_BY_ID_URL, ""); } + public static void resetAllDefaultGlobalConfigurations(final RequestSpecification requestSpec, final ResponseSpecification responseSpec) { + + final ArrayList defaults = getAllDefaultGlobalConfigurations(); + for (HashMap configDefault : defaults) { + + /** + * Cannot update trapDoor global configurations because + * {@link org.apache.fineract.infrastructure.configuration.exception.GlobalConfigurationPropertyCannotBeModfied} + * will be thrown. + */ + if ((Boolean)configDefault.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)configDefault.get("id"); + final Integer configDefaultValue = (Integer)configDefault.get("value"); + updateValueForGlobalConfiguration(requestSpec, responseSpec, configDefaultId.toString(), configDefaultValue.toString()); + updateEnabledFlagForGlobalConfiguration(requestSpec, responseSpec, configDefaultId.toString(), (Boolean)configDefault.get("enabled")); + } + } + + public static void verifyAllDefaultGlobalConfigurations(final RequestSpecification requestSpec, final ResponseSpecification responseSpec) { + + ArrayList expectedGlobalConfigurations = getAllDefaultGlobalConfigurations(); + ArrayList actualGlobalConfigurations = getAllGlobalConfigurations(requestSpec, responseSpec); + + // There are currently 27 global configurations. + Assert.assertEquals(27, expectedGlobalConfigurations.size()); + Assert.assertEquals(27, actualGlobalConfigurations.size()); + + for (int i = 0; i < expectedGlobalConfigurations.size(); i++) { + + HashMap expectedGlobalConfiguration = expectedGlobalConfigurations.get(i); + HashMap actualGlobalConfiguration = actualGlobalConfigurations.get(i); + + Assert.assertEquals(expectedGlobalConfiguration.get("id"), actualGlobalConfiguration.get("id")); + final String assertionFailedMessage = "Assertion failed for configID:<" + expectedGlobalConfiguration.get("id") + ">"; + Assert.assertEquals(assertionFailedMessage, expectedGlobalConfiguration.get("name"), actualGlobalConfiguration.get("name")); + Assert.assertEquals(assertionFailedMessage, expectedGlobalConfiguration.get("value"), actualGlobalConfiguration.get("value")); + Assert.assertEquals(assertionFailedMessage, expectedGlobalConfiguration.get("enabled"), actualGlobalConfiguration.get("enabled")); + Assert.assertEquals(assertionFailedMessage, expectedGlobalConfiguration.get("trapDoor"), actualGlobalConfiguration.get("trapDoor")); + } + } + + /** + * 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 FINERACT-722 + * 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 getAllDefaultGlobalConfigurations() { + + ArrayList defaults = new ArrayList<>(); + + HashMap 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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); + + 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;