From 92f8b3d0d48b1dafb090b9d6f8f79181810f7550 Mon Sep 17 00:00:00 2001 From: Abdelrahman Mostafa Date: Mon, 16 Feb 2026 04:12:13 +0200 Subject: [PATCH] FINERACT-2491: Refactor SavingsEnumerations to use switch expression --- .../savings/service/SavingsEnumerations.java | 43 ++--- .../service/SavingsEnumerationsTest.java | 162 ++++++++++++++++++ .../service/AuditReadPlatformServiceImpl.java | 2 +- 3 files changed, 179 insertions(+), 28 deletions(-) create mode 100644 fineract-core/src/test/java/org/apache/fineract/portfolio/savings/service/SavingsEnumerationsTest.java diff --git a/fineract-core/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsEnumerations.java b/fineract-core/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsEnumerations.java index 21c594362..7f4cab97b 100644 --- a/fineract-core/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsEnumerations.java +++ b/fineract-core/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsEnumerations.java @@ -59,33 +59,22 @@ public final class SavingsEnumerations { public static final String INTEREST_CALCULATION_DAYS_IN_YEAR = "interestCalculationDaysInYearType"; public static final String RECURRING_FREQUENCY_TYPE = "recurringFrequencyType"; - public static EnumOptionData savingEnumueration(final String typeName, final int id) { - if (typeName.equals(INTEREST_COMPOUNDING_PERIOD_TYPE)) { - return compoundingInterestPeriodType(id); - } else if (typeName.equals(INTEREST_POSTING_PERIOD_TYPE)) { - return interestPostingPeriodType(id); - } else if (typeName.equals(INTEREST_CALCULATION_TYPE)) { - return interestCalculationType(id); - } else if (typeName.equals(MIN_DEPOSIT_TERM_TYPE)) { - return depositTermFrequencyType(id); - } else if (typeName.equals(MAX_DEPOSIT_TERM_TYPE)) { - return depositTermFrequencyType(id); - } else if (typeName.equals(IN_MULTIPLES_OF_DEPOSIT_TERM_TYPE)) { - return inMultiplesOfDepositTermFrequencyType(id); - } else if (typeName.equals(DEPOSIT_PERIOD_FREQUNCY_TYPE)) { - return depositPeriodFrequency(id); - } else if (typeName.equals(LOCKIN_PERIOD_FREQUNCY_TYPE)) { - return lockinPeriodFrequencyType(id); - } else if (typeName.equals(ACCOUNTING_RULE_TYPE)) { - return AccountingEnumerations.accountingRuleType(id); - } else if (typeName.equals(PRE_CLOSURE_PENAL_INTEREST_TYPE)) { - return preClosurePenaltyInterestOnType(id); - } else if (typeName.equals(INTEREST_CALCULATION_DAYS_IN_YEAR)) { - return interestCalculationDaysInYearType(id); - } else if (typeName.equals(RECURRING_FREQUENCY_TYPE)) { - return depositPeriodFrequency(id); - } - return null; + public static EnumOptionData savingEnumeration(final String typeName, final int id) { + return switch (typeName) { + case INTEREST_COMPOUNDING_PERIOD_TYPE -> compoundingInterestPeriodType(id); + case INTEREST_POSTING_PERIOD_TYPE -> interestPostingPeriodType(id); + case INTEREST_CALCULATION_TYPE -> interestCalculationType(id); + case MIN_DEPOSIT_TERM_TYPE -> depositTermFrequencyType(id); + case MAX_DEPOSIT_TERM_TYPE -> depositTermFrequencyType(id); + case IN_MULTIPLES_OF_DEPOSIT_TERM_TYPE -> inMultiplesOfDepositTermFrequencyType(id); + case DEPOSIT_PERIOD_FREQUNCY_TYPE -> depositPeriodFrequency(id); + case LOCKIN_PERIOD_FREQUNCY_TYPE -> lockinPeriodFrequencyType(id); + case ACCOUNTING_RULE_TYPE -> AccountingEnumerations.accountingRuleType(id); + case PRE_CLOSURE_PENAL_INTEREST_TYPE -> preClosurePenaltyInterestOnType(id); + case INTEREST_CALCULATION_DAYS_IN_YEAR -> interestCalculationDaysInYearType(id); + case RECURRING_FREQUENCY_TYPE -> depositPeriodFrequency(id); + default -> null; + }; } public static EnumOptionData lockinPeriodFrequencyType(final int id) { diff --git a/fineract-core/src/test/java/org/apache/fineract/portfolio/savings/service/SavingsEnumerationsTest.java b/fineract-core/src/test/java/org/apache/fineract/portfolio/savings/service/SavingsEnumerationsTest.java new file mode 100644 index 000000000..4f0ea3a05 --- /dev/null +++ b/fineract-core/src/test/java/org/apache/fineract/portfolio/savings/service/SavingsEnumerationsTest.java @@ -0,0 +1,162 @@ +/** + * 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.portfolio.savings.service; + +import org.apache.fineract.accounting.common.AccountingEnumerations; +import org.apache.fineract.accounting.common.AccountingRuleType; +import org.apache.fineract.infrastructure.core.data.EnumOptionData; +import org.apache.fineract.portfolio.savings.PreClosurePenalInterestOnType; +import org.apache.fineract.portfolio.savings.SavingsCompoundingInterestPeriodType; +import org.apache.fineract.portfolio.savings.SavingsInterestCalculationDaysInYearType; +import org.apache.fineract.portfolio.savings.SavingsInterestCalculationType; +import org.apache.fineract.portfolio.savings.SavingsPeriodFrequencyType; +import org.apache.fineract.portfolio.savings.SavingsPostingInterestPeriodType; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class SavingsEnumerationsTest { + + @Test + void savingEnumerationMapsCompoundingInterestPeriodType() { + int id = SavingsCompoundingInterestPeriodType.MONTHLY.getValue(); + + EnumOptionData data = SavingsEnumerations.savingEnumeration(SavingsEnumerations.INTEREST_COMPOUNDING_PERIOD_TYPE, id); + EnumOptionData expected = SavingsEnumerations.compoundingInterestPeriodType(id); + + Assertions.assertEquals(data, expected); + } + + @Test + void savingEnumerationMapsPostingInterestPeriodType() { + int id = SavingsPostingInterestPeriodType.BIANNUAL.getValue(); + + EnumOptionData data = SavingsEnumerations.savingEnumeration(SavingsEnumerations.INTEREST_POSTING_PERIOD_TYPE, id); + EnumOptionData expected = SavingsEnumerations.interestPostingPeriodType(id); + + Assertions.assertEquals(data, expected); + } + + @Test + void savingEnumerationMapsInterestCalculationType() { + int id = SavingsInterestCalculationType.DAILY_BALANCE.getValue(); + + EnumOptionData data = SavingsEnumerations.savingEnumeration(SavingsEnumerations.INTEREST_CALCULATION_TYPE, id); + EnumOptionData expected = SavingsEnumerations.interestCalculationType(id); + + Assertions.assertEquals(data, expected); + } + + @Test + void savingEnumerationMapsMinDepositTermType() { + int id = SavingsPeriodFrequencyType.WEEKS.getValue(); + + EnumOptionData data = SavingsEnumerations.savingEnumeration(SavingsEnumerations.MIN_DEPOSIT_TERM_TYPE, id); + EnumOptionData expected = SavingsEnumerations.depositTermFrequencyType(id); + + Assertions.assertEquals(data, expected); + } + + @Test + void savingEnumerationMapsMaxDepositTermType() { + int id = SavingsPeriodFrequencyType.YEARS.getValue(); + + EnumOptionData data = SavingsEnumerations.savingEnumeration(SavingsEnumerations.MAX_DEPOSIT_TERM_TYPE, id); + EnumOptionData expected = SavingsEnumerations.depositTermFrequencyType(id); + + Assertions.assertEquals(data, expected); + } + + @Test + void savingEnumerationMapsInMultiplesOfDepositTermType() { + int id = SavingsPeriodFrequencyType.DAYS.getValue(); + + EnumOptionData data = SavingsEnumerations.savingEnumeration(SavingsEnumerations.IN_MULTIPLES_OF_DEPOSIT_TERM_TYPE, id); + EnumOptionData expected = SavingsEnumerations.inMultiplesOfDepositTermFrequencyType(id); + + Assertions.assertEquals(data, expected); + } + + @Test + void savingEnumerationMapsDepositPeriodFrequencyType() { + int id = SavingsPeriodFrequencyType.MONTHS.getValue(); + + EnumOptionData data = SavingsEnumerations.savingEnumeration(SavingsEnumerations.DEPOSIT_PERIOD_FREQUNCY_TYPE, id); + EnumOptionData expected = SavingsEnumerations.depositPeriodFrequency(id); + + Assertions.assertEquals(data, expected); + } + + @Test + void savingEnumerationMapsLockinPeriodFrequencyType() { + int id = SavingsPeriodFrequencyType.MONTHS.getValue(); + + EnumOptionData data = SavingsEnumerations.savingEnumeration(SavingsEnumerations.LOCKIN_PERIOD_FREQUNCY_TYPE, id); + EnumOptionData expected = SavingsEnumerations.lockinPeriodFrequencyType(id); + + Assertions.assertEquals(data, expected); + } + + @Test + void savingEnumerationMapsAccountingRuleType() { + int id = AccountingRuleType.CASH_BASED.getValue(); + + EnumOptionData data = SavingsEnumerations.savingEnumeration(SavingsEnumerations.ACCOUNTING_RULE_TYPE, id); + EnumOptionData expected = AccountingEnumerations.accountingRuleType(id); + + Assertions.assertEquals(data, expected); + } + + @Test + void savingEnumerationMapsPreClosurePenaltyInterestType() { + int id = PreClosurePenalInterestOnType.WHOLE_TERM.getValue(); + + EnumOptionData data = SavingsEnumerations.savingEnumeration(SavingsEnumerations.PRE_CLOSURE_PENAL_INTEREST_TYPE, id); + EnumOptionData expected = SavingsEnumerations.preClosurePenaltyInterestOnType(id); + + Assertions.assertEquals(data, expected); + } + + @Test + void savingEnumerationMapsInterestCalculationDaysInYearType() { + int id = SavingsInterestCalculationDaysInYearType.DAYS_365.getValue(); + + EnumOptionData data = SavingsEnumerations.savingEnumeration(SavingsEnumerations.INTEREST_CALCULATION_DAYS_IN_YEAR, id); + EnumOptionData expected = SavingsEnumerations.interestCalculationDaysInYearType(id); + + Assertions.assertEquals(data, expected); + } + + @Test + void savingEnumerationMapsRecurringFrequencyType() { + int id = SavingsPeriodFrequencyType.WEEKS.getValue(); + + EnumOptionData data = SavingsEnumerations.savingEnumeration(SavingsEnumerations.RECURRING_FREQUENCY_TYPE, id); + EnumOptionData expected = SavingsEnumerations.depositPeriodFrequency(id); + + Assertions.assertEquals(data, expected); + } + + @Test + void savingEnumerationReturnsNullForUnknownType() { + EnumOptionData data = SavingsEnumerations.savingEnumeration("unknownType", 1); + + Assertions.assertNull(data); + } + +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/commands/service/AuditReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/commands/service/AuditReadPlatformServiceImpl.java index 0feb1610a..40ce1284b 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/commands/service/AuditReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/commands/service/AuditReadPlatformServiceImpl.java @@ -393,7 +393,7 @@ public class AuditReadPlatformServiceImpl implements AuditReadPlatformService { commandAsJsonMap.remove(typeName); final Integer enumTypeId = auditObject.get(typeName).getAsInt(); - final String code = SavingsEnumerations.savingEnumueration(typeName, enumTypeId).getValue(); + final String code = SavingsEnumerations.savingEnumeration(typeName, enumTypeId).getValue(); if (code != null) { commandAsJsonMap.put(typeName, code); }