Files
sure/test/models/concerns/currency_normalizable_test.rb
2026-01-09 11:54:38 +01:00

70 lines
2.4 KiB
Ruby

require "test_helper"
class CurrencyNormalizableTest < ActiveSupport::TestCase
# Create a test class that includes the concern
class TestClass
include CurrencyNormalizable
# Expose private method for testing
def test_parse_currency(value)
parse_currency(value)
end
end
setup do
@parser = TestClass.new
end
test "parse_currency normalizes lowercase to uppercase" do
assert_equal "USD", @parser.test_parse_currency("usd")
assert_equal "EUR", @parser.test_parse_currency("eur")
assert_equal "GBP", @parser.test_parse_currency("gbp")
end
test "parse_currency handles whitespace" do
assert_equal "USD", @parser.test_parse_currency(" usd ")
assert_equal "EUR", @parser.test_parse_currency("\teur\n")
end
test "parse_currency returns nil for blank values" do
assert_nil @parser.test_parse_currency(nil)
assert_nil @parser.test_parse_currency("")
assert_nil @parser.test_parse_currency(" ")
end
test "parse_currency returns nil for invalid format" do
assert_nil @parser.test_parse_currency("US") # Too short
assert_nil @parser.test_parse_currency("USDD") # Too long
assert_nil @parser.test_parse_currency("123") # Numbers
assert_nil @parser.test_parse_currency("US1") # Mixed
end
test "parse_currency returns nil for XXX (no currency code)" do
# XXX is ISO 4217 for "no currency" but not valid for monetary operations
assert_nil @parser.test_parse_currency("XXX")
assert_nil @parser.test_parse_currency("xxx")
end
test "parse_currency returns nil for unknown 3-letter codes" do
# These are 3 letters but not recognized currencies
assert_nil @parser.test_parse_currency("ZZZ")
assert_nil @parser.test_parse_currency("ABC")
end
test "parse_currency accepts valid ISO currencies" do
# Common currencies
assert_equal "USD", @parser.test_parse_currency("USD")
assert_equal "EUR", @parser.test_parse_currency("EUR")
assert_equal "GBP", @parser.test_parse_currency("GBP")
assert_equal "JPY", @parser.test_parse_currency("JPY")
assert_equal "CHF", @parser.test_parse_currency("CHF")
assert_equal "CAD", @parser.test_parse_currency("CAD")
assert_equal "AUD", @parser.test_parse_currency("AUD")
# Less common but valid currencies
assert_equal "PLN", @parser.test_parse_currency("PLN")
assert_equal "SEK", @parser.test_parse_currency("SEK")
assert_equal "NOK", @parser.test_parse_currency("NOK")
end
end