mirror of
https://github.com/we-promise/sure.git
synced 2026-04-18 19:44:09 +00:00
FIX providers invalid currency handling (#589)
This commit is contained in:
69
test/models/concerns/currency_normalizable_test.rb
Normal file
69
test/models/concerns/currency_normalizable_test.rb
Normal file
@@ -0,0 +1,69 @@
|
||||
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
|
||||
Reference in New Issue
Block a user