| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- package unit
- import (
- "strings"
- "testing"
- )
- func TestParseCurrency(t *testing.T) {
- tests := []struct {
- name string
- input string
- expect Currency
- expectErr bool
- }{
- // Valid currencies - exact case
- {name: "AUD", input: "AUD", expect: AUD, expectErr: false},
- {name: "BRL", input: "BRL", expect: BRL, expectErr: false},
- {name: "CAD", input: "CAD", expect: CAD, expectErr: false},
- {name: "CHF", input: "CHF", expect: CHF, expectErr: false},
- {name: "CNY", input: "CNY", expect: CNY, expectErr: false},
- {name: "DKK", input: "DKK", expect: DKK, expectErr: false},
- {name: "EUR", input: "EUR", expect: EUR, expectErr: false},
- {name: "GBP", input: "GBP", expect: GBP, expectErr: false},
- {name: "IDR", input: "IDR", expect: IDR, expectErr: false},
- {name: "INR", input: "INR", expect: INR, expectErr: false},
- {name: "JPY", input: "JPY", expect: JPY, expectErr: false},
- {name: "NOK", input: "NOK", expect: NOK, expectErr: false},
- {name: "PLN", input: "PLN", expect: PLN, expectErr: false},
- {name: "SEK", input: "SEK", expect: SEK, expectErr: false},
- {name: "USD", input: "USD", expect: USD, expectErr: false},
- // Case insensitive tests
- {name: "lowercase usd", input: "usd", expect: USD, expectErr: false},
- {name: "lowercase eur", input: "eur", expect: EUR, expectErr: false},
- {name: "lowercase gbp", input: "gbp", expect: GBP, expectErr: false},
- {name: "mixed case Usd", input: "Usd", expect: USD, expectErr: false},
- {name: "mixed case eUr", input: "eUr", expect: EUR, expectErr: false},
- // Invalid currencies
- {name: "invalid empty", input: "", expect: "", expectErr: true},
- {name: "invalid unknown", input: "XYZ", expect: "", expectErr: true},
- {name: "invalid number", input: "123", expect: "", expectErr: true},
- {name: "invalid partial", input: "US", expect: "", expectErr: true},
- {name: "invalid too long", input: "USDD", expect: "", expectErr: true},
- {name: "invalid with space", input: "U SD", expect: "", expectErr: true},
- {name: "invalid symbol", input: "$", expect: "", expectErr: true},
- {name: "invalid symbol euro", input: "€", expect: "", expectErr: true},
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- got, err := ParseCurrency(tt.input)
- if (err != nil) != tt.expectErr {
- t.Errorf("ParseCurrency(%q) error = %v, expectErr %v", tt.input, err, tt.expectErr)
- return
- }
- if got != tt.expect {
- t.Errorf("ParseCurrency(%q) = %v, expect %v", tt.input, got, tt.expect)
- }
- })
- }
- }
- func TestParseCurrency_AllConstants(t *testing.T) {
- // Ensure all defined currency constants can be parsed
- allCurrencies := []Currency{
- AUD, BRL, CAD, CHF, CNY, DKK, EUR, GBP,
- IDR, INR, JPY, NOK, PLN, SEK, USD,
- }
- for _, currency := range allCurrencies {
- t.Run(string(currency), func(t *testing.T) {
- parsed, err := ParseCurrency(string(currency))
- if err != nil {
- t.Errorf("ParseCurrency(%q) unexpected error: %v", currency, err)
- }
- if parsed != currency {
- t.Errorf("ParseCurrency(%q) = %v, expected %v", currency, parsed, currency)
- }
- })
- }
- }
- func TestParseCurrency_CaseInsensitiveAllConstants(t *testing.T) {
- // Ensure all defined currency constants can be parsed in lowercase
- allCurrencies := []Currency{
- AUD, BRL, CAD, CHF, CNY, DKK, EUR, GBP,
- IDR, INR, JPY, NOK, PLN, SEK, USD,
- }
- for _, currency := range allCurrencies {
- lowercase := strings.ToLower(string(currency))
- t.Run(lowercase, func(t *testing.T) {
- parsed, err := ParseCurrency(lowercase)
- if err != nil {
- t.Errorf("ParseCurrency(%q) unexpected error: %v", lowercase, err)
- }
- if parsed != currency {
- t.Errorf("ParseCurrency(%q) = %v, expect %v", lowercase, parsed, currency)
- }
- })
- }
- }
|