converter/domain/services_test.go

72 lines
1.4 KiB
Go
Raw Permalink Normal View History

2025-09-06 11:40:00 +03:00
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)
}
})
}
}