diff --git a/core-util/src/main/java/org/signal/core/util/money/FiatMoney.java b/core-util/src/main/java/org/signal/core/util/money/FiatMoney.java index c197596ab6..acdee2d2e8 100644 --- a/core-util/src/main/java/org/signal/core/util/money/FiatMoney.java +++ b/core-util/src/main/java/org/signal/core/util/money/FiatMoney.java @@ -5,10 +5,18 @@ import androidx.annotation.NonNull; import java.math.BigDecimal; import java.text.NumberFormat; import java.util.Currency; +import java.util.HashSet; import java.util.Locale; import java.util.Objects; +import java.util.Set; public class FiatMoney { + + private static final Set SPECIAL_CASE_MULTIPLICANDS = new HashSet<>() {{ + add("UGX"); + add("ISK"); + }}; + private final BigDecimal amount; private final Currency currency; private final long timestamp; @@ -54,7 +62,7 @@ public class FiatMoney { } /** - * Note: This special cases UGX to act as two decimal. + * Note: This special cases SPECIAL_CASE_MULTIPLICANDS members to act as two decimal. * * @return amount, in smallest possible units (cents, yen, etc.) */ @@ -63,7 +71,8 @@ public class FiatMoney { formatter.setMaximumFractionDigits(0); formatter.setGroupingUsed(false); - BigDecimal multiplicand = BigDecimal.TEN.pow(currency.getCurrencyCode().equals("UGX") ? 2 : currency.getDefaultFractionDigits()); + String currencyCode = currency.getCurrencyCode(); + BigDecimal multiplicand = BigDecimal.TEN.pow(SPECIAL_CASE_MULTIPLICANDS.contains(currencyCode) ? 2 : currency.getDefaultFractionDigits()); return formatter.format(amount.multiply(multiplicand)); } diff --git a/core-util/src/test/java/org/signal/core/util/money/FiatMoneyTest.java b/core-util/src/test/java/org/signal/core/util/money/FiatMoneyTest.java index bfb25a6ae6..a883c0e169 100644 --- a/core-util/src/test/java/org/signal/core/util/money/FiatMoneyTest.java +++ b/core-util/src/test/java/org/signal/core/util/money/FiatMoneyTest.java @@ -80,4 +80,28 @@ public class FiatMoneyTest { // THEN assertEquals("10000", result); } + + @Test + public void given100ISK_whenIGetDefaultPrecisionString_thenIExpect100() { + // GIVEN + FiatMoney fiatMoney = new FiatMoney(BigDecimal.valueOf(100), Currency.getInstance("ISK")); + + // WHEN + String result = fiatMoney.getDefaultPrecisionString(); + + // THEN + assertEquals("100", result); + } + + @Test + public void given100ISK_whenIGetMinimumUnitPrecisionString_thenIExpect10000() { + // GIVEN + FiatMoney fiatMoney = new FiatMoney(BigDecimal.valueOf(100), Currency.getInstance("ISK")); + + // WHEN + String result = fiatMoney.getMinimumUnitPrecisionString(); + + // THEN + assertEquals("10000", result); + } } \ No newline at end of file