Skip to content

Commit d833b2d

Browse files
fix: rabbit comment and tests
1 parent 7d26845 commit d833b2d

3 files changed

Lines changed: 44 additions & 6 deletions

File tree

openmeter/currencies/service/service_test.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package service
22

33
import (
44
"context"
5+
"errors"
56
"testing"
67
"time"
78

@@ -51,19 +52,19 @@ func (f *fakeAdapter) ListCustomCurrencies(_ context.Context, params currencies.
5152
}
5253

5354
func (f *fakeAdapter) CreateCurrency(_ context.Context, _ currencies.CreateCurrencyInput) (currencies.Currency, error) {
54-
panic("not implemented")
55+
return currencies.Currency{}, errors.New("fakeAdapter.CreateCurrency is not implemented")
5556
}
5657

5758
func (f *fakeAdapter) CreateCostBasis(ctx context.Context, input currencies.CreateCostBasisInput) (currencies.CostBasis, error) {
5859
if f.createCostBasis != nil {
5960
return f.createCostBasis(ctx, input)
6061
}
6162

62-
panic("not implemented")
63+
return currencies.CostBasis{}, errors.New("fakeAdapter.CreateCostBasis is not implemented")
6364
}
6465

6566
func (f *fakeAdapter) ListCostBases(_ context.Context, _ currencies.ListCostBasesInput) (pagination.Result[currencies.CostBasis], error) {
66-
panic("not implemented")
67+
return pagination.Result[currencies.CostBasis]{}, errors.New("fakeAdapter.ListCostBases is not implemented")
6768
}
6869

6970
// newTestService creates a Service backed by a fake adapter seeded with custom currencies.

pkg/currencyx/fiat.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ func NewCalculator(cur Currency) (Calculator, error) {
6161
}
6262

6363
def := currency.Get(currency.Code(code))
64-
if def == nil {
64+
if def == nil || def.ISONumeric == "" {
6565
return Calculator{}, fmt.Errorf("fiat currency definition is required for %s", code)
6666
}
6767

@@ -143,8 +143,8 @@ func (c Calculator) Validate() error {
143143
if err := c.currency.Validate(); err != nil {
144144
errs = append(errs, err)
145145
}
146-
if c.def == nil {
147-
errs = append(errs, errors.New("fiat currency definition is required"))
146+
if c.def == nil || c.def.ISONumeric == "" {
147+
errs = append(errs, fmt.Errorf("fiat currency definition is required for %s", c.currency))
148148
}
149149
if c.def != nil && c.precision != int32(c.def.Subunits) {
150150
errs = append(errs, errors.New("fiat currency precision must match currency definition"))

pkg/currencyx/fiat_test.go

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package currencyx
2+
3+
import (
4+
"testing"
5+
6+
"github.com/invopop/gobl/currency"
7+
"github.com/stretchr/testify/require"
8+
9+
"github.com/openmeterio/openmeter/pkg/models"
10+
)
11+
12+
func TestNewCalculatorRequiresISOFiatDefinition(t *testing.T) {
13+
calculator, err := NewCalculator(Code("USD"))
14+
require.NoError(t, err)
15+
require.Equal(t, Code("USD"), calculator.CurrencyCode())
16+
17+
_, err = NewCalculator(Code("BTC"))
18+
require.Error(t, err)
19+
require.Contains(t, err.Error(), "fiat currency definition is required for BTC")
20+
}
21+
22+
func TestCalculatorValidateRequiresISOFiatDefinition(t *testing.T) {
23+
def := currency.Get(currency.Code("BTC"))
24+
require.NotNil(t, def)
25+
require.Empty(t, def.ISONumeric)
26+
27+
err := Calculator{
28+
currency: Code("BTC"),
29+
def: def,
30+
currencyType: CurrencyTypeFiat,
31+
precision: int32(def.Subunits),
32+
roundingMode: RoundingModeHalfAwayFromZero,
33+
}.Validate()
34+
require.Error(t, err)
35+
require.True(t, models.IsGenericValidationError(err), "error must be a validation error")
36+
require.Contains(t, err.Error(), "fiat currency definition is required for BTC")
37+
}

0 commit comments

Comments
 (0)