diff --git a/src/main/kotlin/net/thauvin/erik/mobibot/modules/CurrencyConverter.kt b/src/main/kotlin/net/thauvin/erik/mobibot/modules/CurrencyConverter.kt index ecf214d..e0b7088 100644 --- a/src/main/kotlin/net/thauvin/erik/mobibot/modules/CurrencyConverter.kt +++ b/src/main/kotlin/net/thauvin/erik/mobibot/modules/CurrencyConverter.kt @@ -31,7 +31,6 @@ */ package net.thauvin.erik.mobibot.modules -import net.thauvin.erik.mobibot.Constants import net.thauvin.erik.mobibot.Mobibot import net.thauvin.erik.mobibot.Utils.bold import net.thauvin.erik.mobibot.Utils.buildCmdSyntax @@ -45,10 +44,12 @@ import org.jdom2.input.SAXBuilder import java.io.IOException import java.net.URL import java.text.NumberFormat +import java.util.Currency +import java.util.Locale import javax.xml.XMLConstants /** - * The CurrentConverter module. + * The CurrencyConverter module. */ class CurrencyConverter(bot: Mobibot) : ThreadedModule(bot) { override fun commandResponse( @@ -87,9 +88,9 @@ class CurrencyConverter(bot: Mobibot) : ThreadedModule(bot) { helpResponse(sender, isPrivate) } } else if (args.contains(CURRENCY_RATES_KEYWORD)) { - send(sender, "The currency rates for ${bold(pubDate)} are:", isPrivate) + send(sender, "The reference rates for ${bold(pubDate)} are:", isPrivate) @Suppress("MagicNumber") - sendList(sender, currencyRates(), 3, isPrivate, isIndent = true) + sendList(sender, currencyRates(), 3, " ", isPrivate, isIndent = true) } else { helpResponse(sender, isPrivate) } @@ -116,7 +117,7 @@ class CurrencyConverter(bot: Mobibot) : ThreadedModule(bot) { ), isPrivate ) - send(sender, "For a listing of current rates:", isPrivate) + send(sender, "For a listing of current reference rates:", isPrivate) send( sender, helpFormat( @@ -126,7 +127,7 @@ class CurrencyConverter(bot: Mobibot) : ThreadedModule(bot) { ) send(sender, "The supported currencies are: ", isPrivate) @Suppress("MagicNumber") - sendList(sender, ArrayList(EXCHANGE_RATES.keys), 11, isPrivate, isIndent = true) + sendList(sender, ArrayList(EXCHANGE_RATES.keys), 11, isPrivate = isPrivate, isIndent = true) } } return true @@ -151,8 +152,11 @@ class CurrencyConverter(bot: Mobibot) : ThreadedModule(bot) { // Last exchange rates table publication date private var pubDate = "" - private fun Double.formatCurrency(): String = - NumberFormat.getCurrencyInstance(Constants.LOCALE).format(this).substring(1) + private fun Double.formatCurrency(currency: String): String = + NumberFormat.getCurrencyInstance(Locale.getDefault(Locale.Category.FORMAT)).let { + it.currency = Currency.getInstance(currency) + it.format(this) + } /** * Converts from a currency to another. @@ -173,8 +177,7 @@ class CurrencyConverter(bot: Mobibot) : ThreadedModule(bot) { val doubleFrom = EXCHANGE_RATES[to]!!.toDouble() val doubleTo = EXCHANGE_RATES[from]!!.toDouble() PublicMessage( - amt.formatCurrency() + " ${cmds[1].uppercase()} = " - + (amt * doubleTo / doubleFrom).formatCurrency() + " ${cmds[3].uppercase()}" + amt.formatCurrency(to) + " = " + (amt * doubleTo / doubleFrom).formatCurrency(from) ) } catch (e: NumberFormatException) { ErrorMessage("Let's try with some real numbers next time, okay?") @@ -192,7 +195,7 @@ class CurrencyConverter(bot: Mobibot) : ThreadedModule(bot) { val rates = mutableListOf() for ((key, value) in EXCHANGE_RATES.toSortedMap()) { @Suppress("MagicNumber") - rates.add(" $key: ${value.padStart(8)}") + rates.add("$key: ${value.padStart(8)}") } return rates } diff --git a/src/test/kotlin/net/thauvin/erik/mobibot/modules/CurrencyConverterTest.kt b/src/test/kotlin/net/thauvin/erik/mobibot/modules/CurrencyConverterTest.kt index 5d509d3..88515cc 100644 --- a/src/test/kotlin/net/thauvin/erik/mobibot/modules/CurrencyConverterTest.kt +++ b/src/test/kotlin/net/thauvin/erik/mobibot/modules/CurrencyConverterTest.kt @@ -51,11 +51,14 @@ class CurrencyConverterTest { @Test fun testConvertCurrency() { assertThat(convertCurrency("100 USD to EUR").msg) - .describedAs("100 USD to EUR").matches("100\\.00 USD = \\d{2,3}\\.\\d{2} EUR") + .describedAs("100 USD to EUR").matches("\\$100\\.00 = €\\d{2,3}\\.\\d{2}") assertThat(convertCurrency("100 USD to USD").msg).describedAs("100 USD to USD") .contains("You're kidding, right?") assertThat(convertCurrency("100 USD").msg).describedAs("100 USD").contains("Invalid query.") - assertThat(currencyRates().size).describedAs("currencyRates().size() == 33").isEqualTo(33) - assertThat(currencyRates()).describedAs("currencyRates().get(EUR)").contains(" EUR: 1") + val rates = currencyRates() + assertThat(rates.size).describedAs("currencyRates.size == 33").isEqualTo(33) + assertThat(rates).describedAs("currencyRates(EUR)").contains("EUR: 1") + assertThat(rates.stream().anyMatch { it.matches("USD: .*".toRegex()) }) + .describedAs("currencyRates(USD)").isTrue } }