service backend
This commit is contained in:
104
api/fx/storage/mongo/store/currency_test.go
Normal file
104
api/fx/storage/mongo/store/currency_test.go
Normal file
@@ -0,0 +1,104 @@
|
||||
package store
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"testing"
|
||||
|
||||
"github.com/tech/sendico/fx/storage/model"
|
||||
"github.com/tech/sendico/pkg/db/repository/builder"
|
||||
rd "github.com/tech/sendico/pkg/db/repository/decoder"
|
||||
"github.com/tech/sendico/pkg/db/storable"
|
||||
"github.com/tech/sendico/pkg/merrors"
|
||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
func TestCurrencyStoreGet(t *testing.T) {
|
||||
repo := &repoStub{
|
||||
findOneFn: func(_ context.Context, _ builder.Query, result storable.Storable) error {
|
||||
currency := result.(*model.Currency)
|
||||
currency.Code = "USD"
|
||||
return nil
|
||||
},
|
||||
}
|
||||
store := ¤cyStore{logger: zap.NewNop(), repo: repo}
|
||||
|
||||
res, err := store.Get(context.Background(), "USD")
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
if res.Code != "USD" {
|
||||
t.Fatalf("unexpected code: %s", res.Code)
|
||||
}
|
||||
}
|
||||
|
||||
func TestCurrencyStoreList(t *testing.T) {
|
||||
repo := &repoStub{
|
||||
findManyFn: func(_ context.Context, _ builder.Query, decode rd.DecodingFunc) error {
|
||||
return runDecoderWithDocs(t, decode, &model.Currency{Code: "USD"})
|
||||
},
|
||||
}
|
||||
store := ¤cyStore{logger: zap.NewNop(), repo: repo}
|
||||
|
||||
currencies, err := store.List(context.Background(), "USD")
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
if len(currencies) != 1 || currencies[0].Code != "USD" {
|
||||
t.Fatalf("unexpected list result: %+v", currencies)
|
||||
}
|
||||
}
|
||||
|
||||
func TestCurrencyStoreUpsertInsert(t *testing.T) {
|
||||
inserted := false
|
||||
repo := &repoStub{
|
||||
findOneFn: func(context.Context, builder.Query, storable.Storable) error {
|
||||
return merrors.ErrNoData
|
||||
},
|
||||
insertFn: func(_ context.Context, obj storable.Storable, _ builder.Query) error {
|
||||
_ = cloneCurrency(t, obj)
|
||||
inserted = true
|
||||
return nil
|
||||
},
|
||||
}
|
||||
store := ¤cyStore{logger: zap.NewNop(), repo: repo}
|
||||
|
||||
if err := store.Upsert(context.Background(), &model.Currency{Code: "USD"}); err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
if !inserted {
|
||||
t.Fatalf("expected insert to be called")
|
||||
}
|
||||
}
|
||||
|
||||
func TestCurrencyStoreGetInvalid(t *testing.T) {
|
||||
store := ¤cyStore{logger: zap.NewNop(), repo: &repoStub{}}
|
||||
if _, err := store.Get(context.Background(), ""); !errors.Is(err, merrors.ErrInvalidArg) {
|
||||
t.Fatalf("expected invalid argument error")
|
||||
}
|
||||
}
|
||||
|
||||
func TestCurrencyStoreUpsertUpdate(t *testing.T) {
|
||||
var updated *model.Currency
|
||||
repo := &repoStub{
|
||||
findOneFn: func(_ context.Context, _ builder.Query, result storable.Storable) error {
|
||||
currency := result.(*model.Currency)
|
||||
currency.SetID(primitive.NewObjectID())
|
||||
currency.Code = "USD"
|
||||
return nil
|
||||
},
|
||||
updateFn: func(_ context.Context, obj storable.Storable) error {
|
||||
updated = cloneCurrency(t, obj)
|
||||
return nil
|
||||
},
|
||||
}
|
||||
store := ¤cyStore{logger: zap.NewNop(), repo: repo}
|
||||
|
||||
if err := store.Upsert(context.Background(), &model.Currency{Code: "USD"}); err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
if updated == nil || updated.GetID() == nil {
|
||||
t.Fatalf("expected update to preserve ID")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user