package domain import ( "testing" "github.com/shopspring/decimal" ) func TestCurrencyConverter_Convert(t *testing.T) { converter := NewCurrencyConverter() usd, _ := NewCurrency("USD", "US Dollar", 2) btc, _ := NewCurrency("BTC", "Bitcoin", 8) eur, _ := NewCurrency("EUR", "Euro", 2) tests := []struct { name string money Money rate Rate wantErr bool wantCode string }{ { name: "successful conversion", money: func() Money { m, _ := NewMoney("100", usd) return m }(), rate: func() Rate { r, _ := NewRate(usd, btc, decimal.NewFromFloat(0.00002), "test") return r }(), wantErr: false, wantCode: "BTC", }, { name: "currency mismatch", money: func() Money { m, _ := NewMoney("100", eur) return m }(), rate: func() Rate { r, _ := NewRate(usd, btc, decimal.NewFromFloat(0.00002), "test") return r }(), wantErr: true, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { result, err := converter.Convert(tt.money, tt.rate) if tt.wantErr { if err == nil { t.Errorf("Convert() expected error but got none") } return } if err != nil { t.Errorf("Convert() unexpected error: %v", err) return } if result.Currency.Code != tt.wantCode { t.Errorf("Convert() currency = %s, want %s", result.Currency.Code, tt.wantCode) } }) } }