86 lines
2.5 KiB
Go
86 lines
2.5 KiB
Go
package accounts
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
gogoproto "github.com/cosmos/gogoproto/proto"
|
|
"github.com/stretchr/testify/require"
|
|
"google.golang.org/protobuf/reflect/protoregistry"
|
|
|
|
bankv1beta1 "cosmossdk.io/api/cosmos/bank/v1beta1"
|
|
"cosmossdk.io/core/address"
|
|
coretesting "cosmossdk.io/core/testing"
|
|
"cosmossdk.io/core/testing/msgrouter"
|
|
"cosmossdk.io/core/transaction"
|
|
"cosmossdk.io/math"
|
|
"cosmossdk.io/x/accounts/internal/implementation"
|
|
banktypes "cosmossdk.io/x/bank/types"
|
|
"cosmossdk.io/x/tx/signing"
|
|
|
|
"github.com/cosmos/cosmos-sdk/codec"
|
|
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
|
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
|
)
|
|
|
|
var _ address.Codec = (*addressCodec)(nil)
|
|
|
|
type addressCodec struct{}
|
|
|
|
func (a addressCodec) StringToBytes(text string) ([]byte, error) { return []byte(text), nil }
|
|
func (a addressCodec) BytesToString(bz []byte) (string, error) { return string(bz), nil }
|
|
|
|
func newKeeper(t *testing.T, accounts ...implementation.AccountCreatorFunc) (Keeper, context.Context) {
|
|
t.Helper()
|
|
|
|
addressCodec := addressCodec{}
|
|
ir, err := codectypes.NewInterfaceRegistryWithOptions(codectypes.InterfaceRegistryOptions{
|
|
ProtoFiles: gogoproto.HybridResolver,
|
|
SigningOptions: signing.Options{
|
|
FileResolver: gogoproto.HybridResolver,
|
|
TypeResolver: protoregistry.GlobalTypes,
|
|
AddressCodec: addressCodec,
|
|
ValidatorAddressCodec: addressCodec,
|
|
},
|
|
})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
ir.RegisterImplementations((*transaction.Msg)(nil),
|
|
&bankv1beta1.MsgSend{},
|
|
&bankv1beta1.MsgBurn{},
|
|
&bankv1beta1.MsgSetSendEnabled{},
|
|
&bankv1beta1.MsgMultiSend{},
|
|
&bankv1beta1.MsgUpdateParams{},
|
|
)
|
|
|
|
msgRouter := msgrouter.NewRouterService()
|
|
msgRouter.RegisterHandler(Send, gogoproto.MessageName(&banktypes.MsgSend{}))
|
|
|
|
queryRouter := msgrouter.NewRouterService()
|
|
queryRouter.RegisterHandler(Balance, gogoproto.MessageName(&banktypes.QueryBalanceRequest{}))
|
|
|
|
ctx, env := coretesting.NewTestEnvironment(coretesting.TestEnvironmentConfig{
|
|
ModuleName: "test",
|
|
Logger: coretesting.NewNopLogger(),
|
|
MsgRouter: msgRouter,
|
|
QueryRouter: queryRouter,
|
|
})
|
|
|
|
m, err := NewKeeper(codec.NewProtoCodec(ir), env.Environment, addressCodec, ir, nil, accounts...)
|
|
require.NoError(t, err)
|
|
return m, ctx
|
|
}
|
|
|
|
func Balance(context.Context, transaction.Msg) (transaction.Msg, error) {
|
|
return &banktypes.QueryBalanceResponse{Balance: &sdk.Coin{
|
|
Denom: "atom",
|
|
Amount: math.NewInt(1000),
|
|
}}, nil
|
|
}
|
|
|
|
func Send(context.Context, transaction.Msg) (transaction.Msg, error) {
|
|
return &bankv1beta1.MsgSendResponse{}, nil
|
|
}
|