diff --git a/x/ecocredit/server/basket/query_basket.go b/x/ecocredit/server/basket/query_basket.go index 66d4a6a48f..c05fe513d0 100644 --- a/x/ecocredit/server/basket/query_basket.go +++ b/x/ecocredit/server/basket/query_basket.go @@ -2,11 +2,27 @@ package basket import ( "context" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" baskettypes "github.com/regen-network/regen-ledger/x/ecocredit/basket" ) func (k Keeper) Basket(ctx context.Context, request *baskettypes.QueryBasketRequest) (*baskettypes.QueryBasketResponse, error) { - //TODO implement me - panic("implement me") + if request == nil { + return nil, status.Errorf(codes.InvalidArgument, "empty request") + } + + basket, err := k.stateStore.BasketStore().GetByBasketDenom(ctx, request.BasketDenom) + if err != nil { + return nil, err + } + + basketGogo := &baskettypes.Basket{} + err = PulsarToGogoSlow(basket, basketGogo) + if err != nil { + return nil, err + } + + return &baskettypes.QueryBasketResponse{Basket: basketGogo}, nil } diff --git a/x/ecocredit/server/basket/query_basket_test.go b/x/ecocredit/server/basket/query_basket_test.go new file mode 100644 index 0000000000..a7c4976828 --- /dev/null +++ b/x/ecocredit/server/basket/query_basket_test.go @@ -0,0 +1,55 @@ +package basket_test + +import ( + "testing" + + "github.com/golang/mock/gomock" + "github.com/stretchr/testify/require" + + "github.com/cosmos/cosmos-sdk/orm/model/ormdb" + "github.com/cosmos/cosmos-sdk/orm/model/ormtable" + "github.com/cosmos/cosmos-sdk/orm/testing/ormtest" + + basketv1 "github.com/regen-network/regen-ledger/api/regen/ecocredit/basket/v1" + baskettypes "github.com/regen-network/regen-ledger/x/ecocredit/basket" + "github.com/regen-network/regen-ledger/x/ecocredit/server" + "github.com/regen-network/regen-ledger/x/ecocredit/server/basket" + "github.com/regen-network/regen-ledger/x/ecocredit/server/basket/mocks" +) + +func TestKeeper_Basket(t *testing.T) { + ctx := ormtable.WrapContextDefault(ormtest.NewMemoryBackend()) + + // prepare database + db, err := ormdb.NewModuleDB(server.ModuleSchema, ormdb.ModuleDBOptions{}) + stateStore, err := basketv1.NewStateStore(db) + require.NoError(t, err) + + // setup test keeper + ctrl := gomock.NewController(t) + require.NoError(t, err) + bankKeeper := mocks.NewMockBankKeeper(ctrl) + ecocreditKeeper := mocks.NewMockEcocreditKeeper(ctrl) + k := basket.NewKeeper(db, ecocreditKeeper, bankKeeper) + + // add a basket + basketDenom := "foo" + batchDenom := "bar" + err = stateStore.BasketStore().Insert(ctx, &basketv1.Basket{ + BasketDenom: basketDenom, + }) + require.NoError(t, err) + + // query + res, err := k.Basket(ctx, &baskettypes.QueryBasketRequest{ + BasketDenom: basketDenom, + }) + require.NoError(t, err) + require.Equal(t, basketDenom, res.Basket.BasketDenom) + + // bad query + res, err = k.Basket(ctx, &baskettypes.QueryBasketRequest{ + BasketDenom: batchDenom, + }) + require.Error(t, err) +}