From f941eb7a03092687f44bf60d593db2dccf4768c1 Mon Sep 17 00:00:00 2001 From: Savely Krendelhoff Date: Sat, 6 Sep 2025 15:40:00 +0700 Subject: [PATCH] Add service test --- domain/services_test.go | 71 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 domain/services_test.go diff --git a/domain/services_test.go b/domain/services_test.go new file mode 100644 index 0000000..b70f259 --- /dev/null +++ b/domain/services_test.go @@ -0,0 +1,71 @@ +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) + } + }) + } +}