diff --git a/changelog.md b/changelog.md index b21bef4cdc..f705c3e608 100644 --- a/changelog.md +++ b/changelog.md @@ -13,6 +13,8 @@ ### Changes +- [#4058](https://github.com/ignite/cli/pull/4058) Simplify scaffolded modules by including `ValidateBasic()` logic in message handler. +- [#4058](https://github.com/ignite/cli/pull/4058) Use `address.Codec` instead of `AccAddressFromBech32`. - [#3993](https://github.com/ignite/cli/pull/3993) Oracle scaffolding was deprecated and has been removed - [#3959](https://github.com/ignite/cli/pull/3959) Remove app name prefix from the `.gitignore` file - [#3962](https://github.com/ignite/cli/pull/3962) Rename all RPC endpoints and autocli commands generated for `map`/`list`/`single` types diff --git a/ignite/pkg/cosmostestutil/sample/sample_test.go b/ignite/pkg/cosmostestutil/sample/sample_test.go index 55a0aae31b..6fd158efe0 100644 --- a/ignite/pkg/cosmostestutil/sample/sample_test.go +++ b/ignite/pkg/cosmostestutil/sample/sample_test.go @@ -3,13 +3,14 @@ package cosmostestutilsample import ( "testing" - sdk "github.com/cosmos/cosmos-sdk/types" + addresscodec "github.com/cosmos/cosmos-sdk/codec/address" "github.com/stretchr/testify/require" ) func TestAccAddress(t *testing.T) { got := AccAddress() require.NotEmpty(t, got) - _, err := sdk.AccAddressFromBech32(got) + exampleAccountAddress := addresscodec.NewBech32Codec("cosmos") + _, err := exampleAccountAddress.StringToBytes(got) require.NoError(t, err) } diff --git a/ignite/templates/ibc/files/packet/component/x/{{moduleName}}/keeper/{{packetName}}.go.plush b/ignite/templates/ibc/files/packet/component/x/{{moduleName}}/keeper/{{packetName}}.go.plush index 5a6b588038..66a5d3a387 100644 --- a/ignite/templates/ibc/files/packet/component/x/{{moduleName}}/keeper/{{packetName}}.go.plush +++ b/ignite/templates/ibc/files/packet/component/x/{{moduleName}}/keeper/{{packetName}}.go.plush @@ -21,7 +21,7 @@ func (k Keeper) Transmit<%= packetName.UpperCamel %>Packet( timeoutHeight clienttypes.Height, timeoutTimestamp uint64, ) (uint64, error) { - channelCap, ok := k.scopedKeeper.GetCapability(ctx, host.ChannelCapabilityPath(sourcePort, sourceChannel)) + channelCap, ok := k.ScopedKeeper().GetCapability(ctx, host.ChannelCapabilityPath(sourcePort, sourceChannel)) if !ok { return 0, errorsmod.Wrap(channeltypes.ErrChannelCapabilityNotFound, "module does not own channel capability") } @@ -37,9 +37,6 @@ func (k Keeper) Transmit<%= packetName.UpperCamel %>Packet( // OnRecv<%= packetName.UpperCamel %>Packet processes packet reception func (k Keeper) OnRecv<%= packetName.UpperCamel %>Packet(ctx sdk.Context, packet channeltypes.Packet, data types.<%= packetName.UpperCamel %>PacketData) (packetAck types.<%= packetName.UpperCamel %>PacketAck, err error) { // validate packet data upon receiving - if err := data.ValidateBasic(); err != nil { - return packetAck, err - } // TODO: packet reception logic diff --git a/ignite/templates/ibc/files/packet/component/x/{{moduleName}}/types/packet_{{packetName}}.go.plush b/ignite/templates/ibc/files/packet/component/x/{{moduleName}}/types/packet_{{packetName}}.go.plush index da39f4e883..9082e531ba 100644 --- a/ignite/templates/ibc/files/packet/component/x/{{moduleName}}/types/packet_{{packetName}}.go.plush +++ b/ignite/templates/ibc/files/packet/component/x/{{moduleName}}/types/packet_{{packetName}}.go.plush @@ -1,13 +1,5 @@ package types -// ValidateBasic is used for validating the packet -func (p <%= packetName.UpperCamel %>PacketData) ValidateBasic() error { - - // TODO: Validate the packet data - - return nil -} - // GetBytes is a helper for serialising func (p <%= packetName.UpperCamel %>PacketData) GetBytes() ([]byte, error) { var modulePacket <%= title(moduleName) %>PacketData diff --git a/ignite/templates/ibc/files/packet/messages/x/{{moduleName}}/client/cli/tx_{{packetName}}.go.plush b/ignite/templates/ibc/files/packet/messages/x/{{moduleName}}/client/cli/tx_{{packetName}}.go.plush index 762e279b0d..54da787966 100644 --- a/ignite/templates/ibc/files/packet/messages/x/{{moduleName}}/client/cli/tx_{{packetName}}.go.plush +++ b/ignite/templates/ibc/files/packet/messages/x/{{moduleName}}/client/cli/tx_{{packetName}}.go.plush @@ -50,9 +50,7 @@ func CmdSend<%= packetName.UpperCamel %>() *cobra.Command { } msg := types.NewMsgSend<%= packetName.UpperCamel %>(<%= MsgSigner.LowerCamel %>, srcPort, srcChannel, timeoutTimestamp<%= for (i, field) in fields { %>, arg<%= field.Name.UpperCamel %><% } %>) - if err := msg.ValidateBasic(); err != nil { - return err - } + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) }, } diff --git a/ignite/templates/ibc/files/packet/messages/x/{{moduleName}}/keeper/msg_server_{{packetName}}.go.plush b/ignite/templates/ibc/files/packet/messages/x/{{moduleName}}/keeper/msg_server_{{packetName}}.go.plush index 53d141e4bb..e8e09f12f3 100644 --- a/ignite/templates/ibc/files/packet/messages/x/{{moduleName}}/keeper/msg_server_{{packetName}}.go.plush +++ b/ignite/templates/ibc/files/packet/messages/x/{{moduleName}}/keeper/msg_server_{{packetName}}.go.plush @@ -1,16 +1,34 @@ package keeper import ( + "fmt" "context" + errorsmod "cosmossdk.io/errors" "<%= ModulePath %>/x/<%= moduleName %>/types" sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" ) func (k msgServer) Send<%= packetName.UpperCamel %>(goCtx context.Context, msg *types.MsgSend<%= packetName.UpperCamel %>) (*types.MsgSend<%= packetName.UpperCamel %>Response, error) { - ctx := sdk.UnwrapSDKContext(goCtx) + // validate incoming message + if _, err := k.addressCodec.StringToBytes(msg.<%= MsgSigner.UpperCamel %>); err != nil { + return nil, errorsmod.Wrap(sdkerrors.ErrInvalidAddress, fmt.Sprintf("invalid address: %s", err)) + } + + if msg.Port == "" { + return nil, errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "invalid packet port") + } + + if msg.ChannelID == "" { + return nil, errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "invalid packet channel") + } + + if msg.TimeoutTimestamp == 0 { + return nil, errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "invalid packet timeout") + } // TODO: logic before transmitting the packet @@ -20,6 +38,7 @@ func (k msgServer) Send<%= packetName.UpperCamel %>(goCtx context.Context, msg packet.<%= field.Name.UpperCamel %> = msg.<%= field.Name.UpperCamel %><% } %> // Transmit the packet + ctx := sdk.UnwrapSDKContext(goCtx) _, err := k.Transmit<%= packetName.UpperCamel %>Packet( ctx, packet, @@ -33,4 +52,4 @@ func (k msgServer) Send<%= packetName.UpperCamel %>(goCtx context.Context, msg } return &types.MsgSend<%= packetName.UpperCamel %>Response{}, nil -} +} \ No newline at end of file diff --git a/ignite/templates/ibc/files/packet/messages/x/{{moduleName}}/keeper/msg_server_{{packetName}}_test.go.plush b/ignite/templates/ibc/files/packet/messages/x/{{moduleName}}/keeper/msg_server_{{packetName}}_test.go.plush new file mode 100644 index 0000000000..b42f57fc8a --- /dev/null +++ b/ignite/templates/ibc/files/packet/messages/x/{{moduleName}}/keeper/msg_server_{{packetName}}_test.go.plush @@ -0,0 +1,84 @@ +package keeper_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + + keepertest "<%= ModulePath %>/testutil/keeper" + "<%= ModulePath %>/x/<%= moduleName %>/keeper" + "<%= ModulePath %>/x/<%= moduleName %>/types" +) + +func TestMsgServerSend<%= packetName.UpperCamel %>(t *testing.T) { + k, ctx, addressCodec := keepertest.<%= title(moduleName) %>Keeper(t) + <%= MsgSigner.LowerCamel %>, err := addressCodec.BytesToString([]byte("signerAddr__________________")) + require.NoError(t, err) + srv := keeper.NewMsgServerImpl(k) + + tests := []struct { + name string + msg types.MsgSend<%= packetName.UpperCamel %> + err error + }{ + { + name: "invalid address", + msg: types.MsgSend<%= packetName.UpperCamel %>{ + <%= MsgSigner.UpperCamel %>: "invalid address", + Port: "port", + ChannelID: "channel-0", + TimeoutTimestamp: 100, + }, + err: sdkerrors.ErrInvalidAddress, + }, { + name: "invalid port", + msg: types.MsgSend<%= packetName.UpperCamel %>{ + <%= MsgSigner.UpperCamel %>: <%= MsgSigner.LowerCamel %>, + Port: "", + ChannelID: "channel-0", + TimeoutTimestamp: 100, + }, + err: sdkerrors.ErrInvalidRequest, + }, { + name: "invalid channel", + msg: types.MsgSend<%= packetName.UpperCamel %>{ + <%= MsgSigner.UpperCamel %>: <%= MsgSigner.LowerCamel %>, + Port: "port", + ChannelID: "", + TimeoutTimestamp: 100, + }, + err: sdkerrors.ErrInvalidRequest, + }, { + name: "invalid timeout", + msg: types.MsgSend<%= packetName.UpperCamel %>{ + <%= MsgSigner.UpperCamel %>: <%= MsgSigner.LowerCamel %>, + Port: "port", + ChannelID: "channel-0", + TimeoutTimestamp: 0, + }, + err: sdkerrors.ErrInvalidRequest, + }, { + name: "valid message", + msg: types.MsgSend<%= packetName.UpperCamel %>{ + <%= MsgSigner.UpperCamel %>: <%= MsgSigner.LowerCamel %>, + Port: "port", + ChannelID: "channel-0", + TimeoutTimestamp: 100, + }, + err: channeltypes.ErrChannelCapabilityNotFound, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + _, err = srv.Send<%= packetName.UpperCamel %>(ctx, &tt.msg) + if tt.err != nil { + require.ErrorContains(t, err, tt.err.Error()) + return + } + require.NoError(t, err) + }) + } +} diff --git a/ignite/templates/ibc/files/packet/messages/x/{{moduleName}}/types/messages_{{packetName}}.go.plush b/ignite/templates/ibc/files/packet/messages/x/{{moduleName}}/types/messages_{{packetName}}.go.plush index 4109489cc6..811e10d84a 100644 --- a/ignite/templates/ibc/files/packet/messages/x/{{moduleName}}/types/messages_{{packetName}}.go.plush +++ b/ignite/templates/ibc/files/packet/messages/x/{{moduleName}}/types/messages_{{packetName}}.go.plush @@ -1,13 +1,5 @@ package types -import ( - errorsmod "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" -) - -var _ sdk.Msg = &MsgSend<%= packetName.UpperCamel %>{} - func NewMsgSend<%= packetName.UpperCamel %>( <%= MsgSigner.LowerCamel %> string, port string, @@ -22,21 +14,4 @@ func NewMsgSend<%= packetName.UpperCamel %>( TimeoutTimestamp: timeoutTimestamp,<%= for (field) in fields { %> <%= field.Name.UpperCamel %>: <%= field.Name.LowerCamel %>,<% } %> } -} - -func (msg *MsgSend<%= packetName.UpperCamel %>) ValidateBasic() error { - _, err := sdk.AccAddressFromBech32(msg.<%= MsgSigner.UpperCamel %>) - if err != nil { - return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid <%= MsgSigner.LowerCamel %> address (%s)", err) - } - if msg.Port == "" { - return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "invalid packet port") - } - if msg.ChannelID == "" { - return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "invalid packet channel") - } - if msg.TimeoutTimestamp == 0 { - return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "invalid packet timeout") - } - return nil -} +} \ No newline at end of file diff --git a/ignite/templates/ibc/files/packet/messages/x/{{moduleName}}/types/messages_{{packetName}}_test.go.plush b/ignite/templates/ibc/files/packet/messages/x/{{moduleName}}/types/messages_{{packetName}}_test.go.plush deleted file mode 100644 index 5773ea4b8f..0000000000 --- a/ignite/templates/ibc/files/packet/messages/x/{{moduleName}}/types/messages_{{packetName}}_test.go.plush +++ /dev/null @@ -1,73 +0,0 @@ -package types - -import ( - "testing" - - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - "github.com/stretchr/testify/require" - "<%= ModulePath %>/testutil/sample" -) - -func TestMsgSend<%= packetName.UpperCamel %>_ValidateBasic(t *testing.T) { - tests := []struct { - name string - msg MsgSend<%= packetName.UpperCamel %> - err error - }{ - { - name: "invalid address", - msg: MsgSend<%= packetName.UpperCamel %>{ - <%= MsgSigner.UpperCamel %>: "invalid_address", - Port: "port", - ChannelID: "channel-0", - TimeoutTimestamp: 100, - }, - err: sdkerrors.ErrInvalidAddress, - }, { - name: "invalid port", - msg: MsgSend<%= packetName.UpperCamel %>{ - <%= MsgSigner.UpperCamel %>: sample.AccAddress(), - Port: "", - ChannelID: "channel-0", - TimeoutTimestamp: 100, - }, - err: sdkerrors.ErrInvalidRequest, - }, { - name: "invalid channel", - msg: MsgSend<%= packetName.UpperCamel %>{ - <%= MsgSigner.UpperCamel %>: sample.AccAddress(), - Port: "port", - ChannelID: "", - TimeoutTimestamp: 100, - }, - err: sdkerrors.ErrInvalidRequest, - }, { - name: "invalid timeout", - msg: MsgSend<%= packetName.UpperCamel %>{ - <%= MsgSigner.UpperCamel %>: sample.AccAddress(), - Port: "port", - ChannelID: "channel-0", - TimeoutTimestamp: 0, - }, - err: sdkerrors.ErrInvalidRequest, - }, { - name: "valid message", - msg: MsgSend<%= packetName.UpperCamel %>{ - <%= MsgSigner.UpperCamel %>: sample.AccAddress(), - Port: "port", - ChannelID: "channel-0", - TimeoutTimestamp: 100, - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := tt.msg.ValidateBasic() - if tt.err != nil { - require.ErrorIs(t, err, tt.err) - return - } - require.NoError(t, err) - }) - } -} diff --git a/ignite/templates/message/files/message/x/{{moduleName}}/keeper/msg_server_{{msgName}}.go.plush b/ignite/templates/message/files/message/x/{{moduleName}}/keeper/msg_server_{{msgName}}.go.plush index 7c1972a88a..5566655bd1 100644 --- a/ignite/templates/message/files/message/x/{{moduleName}}/keeper/msg_server_{{msgName}}.go.plush +++ b/ignite/templates/message/files/message/x/{{moduleName}}/keeper/msg_server_{{msgName}}.go.plush @@ -9,6 +9,10 @@ import ( func (k msgServer) <%= MsgName.UpperCamel %>(ctx context.Context, msg *types.Msg<%= MsgName.UpperCamel %>) (*types.Msg<%= MsgName.UpperCamel %>Response, error) { + if _, err := k.addressCodec.StringToBytes(msg.<%= MsgSigner.UpperCamel %>); err != nil { + return nil, errorsmod.Wrap(err, "invalid authority address") + } + // TODO: Handle the message return &types.Msg<%= MsgName.UpperCamel %>Response{}, nil diff --git a/ignite/templates/message/files/message/x/{{moduleName}}/types/message_{{msgName}}.go.plush b/ignite/templates/message/files/message/x/{{moduleName}}/types/message_{{msgName}}.go.plush index 1d73a30a9b..41c2a305bb 100644 --- a/ignite/templates/message/files/message/x/{{moduleName}}/types/message_{{msgName}}.go.plush +++ b/ignite/templates/message/files/message/x/{{moduleName}}/types/message_{{msgName}}.go.plush @@ -1,25 +1,8 @@ package types -import ( - errorsmod "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" -) - -var _ sdk.Msg = &Msg<%= MsgName.UpperCamel %>{} - func NewMsg<%= MsgName.UpperCamel %>(<%= MsgSigner.LowerCamel %> string<%= for (field) in Fields { %>, <%= field.Name.LowerCamel %> <%= field.DataType() %><% } %>) *Msg<%= MsgName.UpperCamel %> { return &Msg<%= MsgName.UpperCamel %>{ <%= MsgSigner.UpperCamel %>: <%= MsgSigner.LowerCamel %>,<%= for (field) in Fields { %> <%= field.Name.UpperCamel %>: <%= field.Name.LowerCamel %>,<% } %> } -} - -func (msg *Msg<%= MsgName.UpperCamel %>) ValidateBasic() error { - _, err := sdk.AccAddressFromBech32(msg.<%= MsgSigner.UpperCamel %>) - if err != nil { - return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid <%= MsgSigner.LowerCamel %> address (%s)", err) - } - return nil -} - +} \ No newline at end of file diff --git a/ignite/templates/message/files/message/x/{{moduleName}}/types/message_{{msgName}}_test.go.plush b/ignite/templates/message/files/message/x/{{moduleName}}/types/message_{{msgName}}_test.go.plush deleted file mode 100644 index aa1d555d4f..0000000000 --- a/ignite/templates/message/files/message/x/{{moduleName}}/types/message_{{msgName}}_test.go.plush +++ /dev/null @@ -1,40 +0,0 @@ -package types - -import ( - "testing" - - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - "github.com/stretchr/testify/require" - "<%= ModulePath %>/testutil/sample" -) - -func TestMsg<%= MsgName.UpperCamel %>_ValidateBasic(t *testing.T) { - tests := []struct { - name string - msg Msg<%= MsgName.UpperCamel %> - err error - }{ - { - name: "invalid address", - msg: Msg<%= MsgName.UpperCamel %>{ - <%= MsgSigner.UpperCamel %>: "invalid_address", - }, - err: sdkerrors.ErrInvalidAddress, - }, { - name: "valid address", - msg: Msg<%= MsgName.UpperCamel %>{ - <%= MsgSigner.UpperCamel %>: sample.AccAddress(), - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := tt.msg.ValidateBasic() - if tt.err != nil { - require.ErrorIs(t, err, tt.err) - return - } - require.NoError(t, err) - }) - } -} diff --git a/ignite/templates/module/create/files/base/testutil/keeper/{{moduleName}}.go.plush b/ignite/templates/module/create/files/base/testutil/keeper/{{moduleName}}.go.plush index 468f72d8ee..cceee94878 100644 --- a/ignite/templates/module/create/files/base/testutil/keeper/{{moduleName}}.go.plush +++ b/ignite/templates/module/create/files/base/testutil/keeper/{{moduleName}}.go.plush @@ -3,6 +3,7 @@ package keeper import ( "testing" + "cosmossdk.io/core/address" "cosmossdk.io/log" "cosmossdk.io/store" "cosmossdk.io/store/metrics" @@ -10,6 +11,7 @@ import ( cmtproto "github.com/cometbft/cometbft/proto/tendermint/types" dbm "github.com/cosmos/cosmos-db" "github.com/cosmos/cosmos-sdk/codec" + addresscodec "github.com/cosmos/cosmos-sdk/codec/address" codectypes "github.com/cosmos/cosmos-sdk/codec/types" "github.com/cosmos/cosmos-sdk/runtime" sdk "github.com/cosmos/cosmos-sdk/types" @@ -21,7 +23,7 @@ import ( "<%= modulePath %>/x/<%= moduleName %>/types" ) -func <%= title(moduleName) %>Keeper(t testing.TB) (keeper.Keeper, sdk.Context) { +func <%= title(moduleName) %>Keeper(t testing.TB) (keeper.Keeper, sdk.Context, address.Codec) { storeKey := storetypes.NewKVStoreKey(types.StoreKey) db := dbm.NewMemDB() @@ -32,9 +34,11 @@ func <%= title(moduleName) %>Keeper(t testing.TB) (keeper.Keeper, sdk.Context) { registry := codectypes.NewInterfaceRegistry() cdc := codec.NewProtoCodec(registry) authority := authtypes.NewModuleAddress(govtypes.ModuleName) + addressCodec := addresscodec.NewBech32Codec(sdk.GetConfig().GetBech32AccountAddrPrefix()) k := keeper.NewKeeper( cdc, + addressCodec, runtime.NewKVStoreService(storeKey), log.NewNopLogger(), authority.String(), <%= for (dependency) in dependencies { %> @@ -45,8 +49,8 @@ func <%= title(moduleName) %>Keeper(t testing.TB) (keeper.Keeper, sdk.Context) { // Initialize params if err := k.Params.Set(ctx, types.DefaultParams()); err != nil { - panic(err) + t.Fatalf("failed to set params: %v", err) } - return k, ctx -} + return k, ctx, addressCodec +} \ No newline at end of file diff --git a/ignite/templates/module/create/files/base/x/{{moduleName}}/keeper/keeper.go.plush b/ignite/templates/module/create/files/base/x/{{moduleName}}/keeper/keeper.go.plush index 0eb09a08d7..1c5bd2b24d 100644 --- a/ignite/templates/module/create/files/base/x/{{moduleName}}/keeper/keeper.go.plush +++ b/ignite/templates/module/create/files/base/x/{{moduleName}}/keeper/keeper.go.plush @@ -5,6 +5,7 @@ import ( "cosmossdk.io/collections" "cosmossdk.io/core/store" + "cosmossdk.io/core/address" "cosmossdk.io/log" "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" @@ -24,6 +25,7 @@ import ( type ( Keeper struct { cdc codec.BinaryCodec + addressCodec address.Codec storeService store.KVStoreService logger log.Logger @@ -46,6 +48,7 @@ type ( func NewKeeper( cdc codec.BinaryCodec, + addressCodec address.Codec, storeService store.KVStoreService, logger log.Logger, authority string,<%= if (isIBC) { %> @@ -54,14 +57,15 @@ func NewKeeper( <%= for (dependency) in dependencies { %> <%= toVariableName(dependency.KeeperName()) %> types.<%= dependency.KeeperName() %>,<% } %> ) Keeper { - if _, err := sdk.AccAddressFromBech32(authority); err != nil { - panic(fmt.Sprintf("invalid authority address: %s", authority)) + if _, err := addressCodec.StringToBytes(authority); err != nil { + panic(fmt.Sprintf("invalid authority address %s: %s", authority, err)) } sb := collections.NewSchemaBuilder(storeService) k := Keeper{ cdc: cdc, + addressCodec: addressCodec, storeService: storeService, authority: authority, logger: logger,<%= if (isIBC) { %> diff --git a/ignite/templates/module/create/files/base/x/{{moduleName}}/keeper/msg_update_params.go.plush b/ignite/templates/module/create/files/base/x/{{moduleName}}/keeper/msg_update_params.go.plush index 2a29e4e669..f93f75b12c 100644 --- a/ignite/templates/module/create/files/base/x/{{moduleName}}/keeper/msg_update_params.go.plush +++ b/ignite/templates/module/create/files/base/x/{{moduleName}}/keeper/msg_update_params.go.plush @@ -9,10 +9,18 @@ import ( ) func (k msgServer) UpdateParams(ctx context.Context, req *types.MsgUpdateParams) (*types.MsgUpdateParamsResponse, error) { + if _, err := k.addressCodec.StringToBytes(req.Authority); err != nil { + return nil, errorsmod.Wrap(err, "invalid authority address") + } + if k.GetAuthority() != req.Authority { return nil, errorsmod.Wrapf(types.ErrInvalidSigner, "invalid authority; expected %s, got %s", k.GetAuthority(), req.Authority) } + if err := req.Params.Validate(); err != nil { + return nil, err + } + if err := k.Params.Set(ctx, req.Params); err != nil { return nil, err } diff --git a/ignite/templates/module/create/files/base/x/{{moduleName}}/keeper/msg_update_params_test.go.plush b/ignite/templates/module/create/files/base/x/{{moduleName}}/keeper/msg_update_params_test.go.plush index a773e24e01..2bd5ea45d5 100644 --- a/ignite/templates/module/create/files/base/x/{{moduleName}}/keeper/msg_update_params_test.go.plush +++ b/ignite/templates/module/create/files/base/x/{{moduleName}}/keeper/msg_update_params_test.go.plush @@ -6,11 +6,15 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" + keepertest "<%= modulePath %>/testutil/keeper" + "<%= modulePath %>/x/<%= moduleName %>/keeper" "<%= modulePath %>/x/<%= moduleName %>/types" ) func TestMsgUpdateParams(t *testing.T) { - k, ms, ctx := setupMsgServer(t) + k, ctx, _ := keepertest.<%= title(moduleName) %>Keeper(t) + ms := keeper.NewMsgServerImpl(k) + params := types.DefaultParams() require.NoError(t, k.Params.Set(ctx, params)) diff --git a/ignite/templates/module/create/files/base/x/{{moduleName}}/keeper/query_params_test.go.plush b/ignite/templates/module/create/files/base/x/{{moduleName}}/keeper/query_params_test.go.plush index a17c8ebba1..3d3d30dabe 100644 --- a/ignite/templates/module/create/files/base/x/{{moduleName}}/keeper/query_params_test.go.plush +++ b/ignite/templates/module/create/files/base/x/{{moduleName}}/keeper/query_params_test.go.plush @@ -12,7 +12,7 @@ import ( ) func TestParamsQuery(t *testing.T) { - k, ctx := keepertest.<%= title(moduleName) %>Keeper(t) + k, ctx, _ := keepertest.<%= title(moduleName) %>Keeper(t) qs := keeper.NewQueryServerImpl(k) params := types.DefaultParams() diff --git a/ignite/templates/module/create/files/base/x/{{moduleName}}/module/genesis_test.go.plush b/ignite/templates/module/create/files/base/x/{{moduleName}}/module/genesis_test.go.plush index dd61abf11d..a305e68e7f 100644 --- a/ignite/templates/module/create/files/base/x/{{moduleName}}/module/genesis_test.go.plush +++ b/ignite/templates/module/create/files/base/x/{{moduleName}}/module/genesis_test.go.plush @@ -17,7 +17,7 @@ func TestGenesis(t *testing.T) { // this line is used by starport scaffolding # genesis/test/state } - k, ctx := keepertest.<%= title(moduleName) %>Keeper(t) + k, ctx, _ := keepertest.<%= title(moduleName) %>Keeper(t) <%= moduleName %>.InitGenesis(ctx, k, genesisState) got := <%= moduleName %>.ExportGenesis(ctx, k) require.NotNil(t, got) diff --git a/ignite/templates/module/create/files/base/x/{{moduleName}}/module/module.go.plush b/ignite/templates/module/create/files/base/x/{{moduleName}}/module/module.go.plush index e604d32f69..beed984303 100644 --- a/ignite/templates/module/create/files/base/x/{{moduleName}}/module/module.go.plush +++ b/ignite/templates/module/create/files/base/x/{{moduleName}}/module/module.go.plush @@ -5,6 +5,7 @@ import ( "encoding/json" "fmt" + "cosmossdk.io/core/address" "cosmossdk.io/core/appmodule" "cosmossdk.io/core/store" "cosmossdk.io/depinject" @@ -189,6 +190,7 @@ func init() { type ModuleInputs struct { depinject.In + AddressCodec address.Codec StoreService store.KVStoreService Cdc codec.Codec Config *modulev1.Module @@ -217,6 +219,7 @@ func ProvideModule(in ModuleInputs) ModuleOutputs { } k := keeper.NewKeeper( in.Cdc, + in.AddressCodec, in.StoreService, in.Logger, authority.String(), <%= if (isIBC) { %> diff --git a/ignite/templates/module/create/files/base/x/{{moduleName}}/types/msg_update_params.go.plush b/ignite/templates/module/create/files/base/x/{{moduleName}}/types/msg_update_params.go.plush deleted file mode 100644 index e36d023de6..0000000000 --- a/ignite/templates/module/create/files/base/x/{{moduleName}}/types/msg_update_params.go.plush +++ /dev/null @@ -1,21 +0,0 @@ -package types - -import ( - errorsmod "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" -) - -var _ sdk.Msg = &MsgUpdateParams{} - -// ValidateBasic does a sanity check on the provided data. -func (m *MsgUpdateParams) ValidateBasic() error { - if _, err := sdk.AccAddressFromBech32(m.Authority); err != nil { - return errorsmod.Wrap(err, "invalid authority address") - } - - if err := m.Params.Validate(); err != nil { - return err - } - - return nil -} diff --git a/ignite/templates/module/create/files/ibc/testutil/keeper/{{moduleName}}.go.plush b/ignite/templates/module/create/files/ibc/testutil/keeper/{{moduleName}}.go.plush index 27be965d00..3d47d53500 100644 --- a/ignite/templates/module/create/files/ibc/testutil/keeper/{{moduleName}}.go.plush +++ b/ignite/templates/module/create/files/ibc/testutil/keeper/{{moduleName}}.go.plush @@ -3,6 +3,7 @@ package keeper import ( "testing" + "cosmossdk.io/core/address" "cosmossdk.io/log" "cosmossdk.io/store" "cosmossdk.io/store/metrics" @@ -25,7 +26,7 @@ import ( "<%= modulePath %>/x/<%= moduleName %>/types" ) -func <%= title(moduleName) %>Keeper(t testing.TB) (keeper.Keeper, sdk.Context) { +func <%= title(moduleName) %>Keeper(t testing.TB) (keeper.Keeper, sdk.Context, address.Codec) { storeKey := storetypes.NewKVStoreKey(types.StoreKey) memStoreKey := storetypes.NewMemoryStoreKey(types.MemStoreKey) @@ -39,6 +40,7 @@ func <%= title(moduleName) %>Keeper(t testing.TB) (keeper.Keeper, sdk.Context) { appCodec := codec.NewProtoCodec(registry) capabilityKeeper := capabilitykeeper.NewKeeper(appCodec, storeKey, memStoreKey) authority := authtypes.NewModuleAddress(govtypes.ModuleName) + addressCodec := addresscodec.NewBech32Codec(sdk.GetConfig().GetBech32AccountAddrPrefix()) scopedKeeper := capabilityKeeper.ScopeToModule(ibcexported.ModuleName) portKeeper := portkeeper.NewKeeper(scopedKeeper) @@ -46,6 +48,7 @@ func <%= title(moduleName) %>Keeper(t testing.TB) (keeper.Keeper, sdk.Context) { k := keeper.NewKeeper( appCodec, + addressCodec, runtime.NewKVStoreService(storeKey), log.NewNopLogger(), authority.String(), @@ -64,8 +67,8 @@ func <%= title(moduleName) %>Keeper(t testing.TB) (keeper.Keeper, sdk.Context) { // Initialize params if err := k.Params.Set(ctx, types.DefaultParams()); err != nil { - panic(err) + t.Fatalf("failed to set params: %v", err) } - return k, ctx + return k, ctx, addressCodec } diff --git a/ignite/templates/module/create/files/msgserver/x/{{moduleName}}/keeper/msg_server_test.go.plush b/ignite/templates/module/create/files/msgserver/x/{{moduleName}}/keeper/msg_server_test.go.plush deleted file mode 100644 index 1b3e9e1283..0000000000 --- a/ignite/templates/module/create/files/msgserver/x/{{moduleName}}/keeper/msg_server_test.go.plush +++ /dev/null @@ -1,24 +0,0 @@ -package keeper_test - -import ( - "context" - "testing" - - "github.com/stretchr/testify/require" - - keepertest "<%= modulePath %>/testutil/keeper" - "<%= modulePath %>/x/<%= moduleName %>/types" - "<%= modulePath %>/x/<%= moduleName %>/keeper" -) - -func setupMsgServer(t testing.TB) (keeper.Keeper, types.MsgServer, context.Context) { - k, ctx := keepertest.<%= title(moduleName) %>Keeper(t) - return k, keeper.NewMsgServerImpl(k), ctx -} - -func TestMsgServer(t *testing.T) { - k, ms, ctx := setupMsgServer(t) - require.NotNil(t, ms) - require.NotNil(t, ctx) - require.NotEmpty(t, k) -} \ No newline at end of file diff --git a/ignite/templates/typed/list/files/component/x/{{moduleName}}/keeper/query_{{typeName}}_test.go.plush b/ignite/templates/typed/list/files/component/x/{{moduleName}}/keeper/query_{{typeName}}_test.go.plush index 5d3f7af765..7ad32d4fc0 100644 --- a/ignite/templates/typed/list/files/component/x/{{moduleName}}/keeper/query_{{typeName}}_test.go.plush +++ b/ignite/templates/typed/list/files/component/x/{{moduleName}}/keeper/query_{{typeName}}_test.go.plush @@ -28,7 +28,7 @@ func createN<%= TypeName.UpperCamel %>(keeper keeper.Keeper, ctx context.Context } func Test<%= TypeName.UpperCamel %>QuerySingle(t *testing.T) { - k, ctx := keepertest.<%= title(ModuleName) %>Keeper(t) + k, ctx, _ := keepertest.<%= title(ModuleName) %>Keeper(t) qs := keeper.NewQueryServerImpl(k) msgs := createN<%= TypeName.UpperCamel %>(k, ctx, 2) tests := []struct { @@ -74,7 +74,7 @@ func Test<%= TypeName.UpperCamel %>QuerySingle(t *testing.T) { } func Test<%= TypeName.UpperCamel %>QueryPaginated(t *testing.T) { - k, ctx := keepertest.<%= title(ModuleName) %>Keeper(t) + k, ctx, _ := keepertest.<%= title(ModuleName) %>Keeper(t) qs := keeper.NewQueryServerImpl(k) msgs := createN<%= TypeName.UpperCamel %>(k, ctx, 5) diff --git a/ignite/templates/typed/list/files/messages/x/{{moduleName}}/keeper/msg_server_{{typeName}}.go.plush b/ignite/templates/typed/list/files/messages/x/{{moduleName}}/keeper/msg_server_{{typeName}}.go.plush index 2c18318736..101c8b0ce0 100644 --- a/ignite/templates/typed/list/files/messages/x/{{moduleName}}/keeper/msg_server_{{typeName}}.go.plush +++ b/ignite/templates/typed/list/files/messages/x/{{moduleName}}/keeper/msg_server_{{typeName}}.go.plush @@ -11,6 +11,10 @@ import ( func (k msgServer) Create<%= TypeName.UpperCamel %>(ctx context.Context, msg *types.MsgCreate<%= TypeName.UpperCamel %>) (*types.MsgCreate<%= TypeName.UpperCamel %>Response, error) { + if _, err := k.addressCodec.StringToBytes(msg.<%= MsgSigner.UpperCamel %>); err != nil { + return nil, errorsmod.Wrap(sdkerrors.ErrInvalidAddress, fmt.Sprintf("invalid address: %s", err)) + } + nextId, err := k.<%= TypeName.UpperCamel %>Seq.Next(ctx) if err != nil { return nil, errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "failed to get next id") @@ -36,6 +40,10 @@ func (k msgServer) Create<%= TypeName.UpperCamel %>(ctx context.Context, msg *t } func (k msgServer) Update<%= TypeName.UpperCamel %>(ctx context.Context, msg *types.MsgUpdate<%= TypeName.UpperCamel %>) (*types.MsgUpdate<%= TypeName.UpperCamel %>Response, error) { + if _, err := k.addressCodec.StringToBytes(msg.<%= MsgSigner.UpperCamel %>); err != nil { + return nil, errorsmod.Wrap(sdkerrors.ErrInvalidAddress, fmt.Sprintf("invalid address: %s", err)) + } + var <%= TypeName.LowerCamel %> = types.<%= TypeName.UpperCamel %>{ <%= MsgSigner.UpperCamel %>: msg.<%= MsgSigner.UpperCamel %>, Id: msg.Id,<%= for (field) in Fields { %> @@ -65,6 +73,10 @@ func (k msgServer) Update<%= TypeName.UpperCamel %>(ctx context.Context, msg *t } func (k msgServer) Delete<%= TypeName.UpperCamel %>(ctx context.Context, msg *types.MsgDelete<%= TypeName.UpperCamel %>) (*types.MsgDelete<%= TypeName.UpperCamel %>Response, error) { + if _, err := k.addressCodec.StringToBytes(msg.<%= MsgSigner.UpperCamel %>); err != nil { + return nil, errorsmod.Wrap(sdkerrors.ErrInvalidAddress, fmt.Sprintf("invalid address: %s", err)) + } + // Checks that the element exists val, err := k.<%= TypeName.UpperCamel %>.Get(ctx, msg.Id) if err != nil { diff --git a/ignite/templates/typed/list/files/messages/x/{{moduleName}}/keeper/msg_server_{{typeName}}_test.go.plush b/ignite/templates/typed/list/files/messages/x/{{moduleName}}/keeper/msg_server_{{typeName}}_test.go.plush index 0d516e2af8..8297f5f246 100644 --- a/ignite/templates/typed/list/files/messages/x/{{moduleName}}/keeper/msg_server_{{typeName}}_test.go.plush +++ b/ignite/templates/typed/list/files/messages/x/{{moduleName}}/keeper/msg_server_{{typeName}}_test.go.plush @@ -7,13 +7,18 @@ import ( sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/stretchr/testify/require" + keepertest "<%= ModulePath %>/testutil/keeper" + "<%= ModulePath %>/x/<%= ModuleName %>/keeper" "<%= ModulePath %>/x/<%= ModuleName %>/types" ) func Test<%= TypeName.UpperCamel %>MsgServerCreate(t *testing.T) { - _, srv, ctx := setupMsgServer(t) + k, ctx, addressCodec := keepertest.<%= title(ModuleName) %>Keeper(t) + srv := keeper.NewMsgServerImpl(k) + + <%= MsgSigner.LowerCamel %>, err := addressCodec.BytesToString([]byte("signerAddr__________________")) + require.NoError(t, err) - <%= MsgSigner.LowerCamel %> := "A" for i := 0; i < 5; i++ { resp, err := srv.Create<%= TypeName.UpperCamel %>(ctx, &types.MsgCreate<%= TypeName.UpperCamel %>{<%= MsgSigner.UpperCamel %>: <%= MsgSigner.LowerCamel %>}) require.NoError(t, err) @@ -22,7 +27,17 @@ func Test<%= TypeName.UpperCamel %>MsgServerCreate(t *testing.T) { } func Test<%= TypeName.UpperCamel %>MsgServerUpdate(t *testing.T) { - <%= MsgSigner.LowerCamel %> := "A" + k, ctx, addressCodec := keepertest.<%= title(ModuleName) %>Keeper(t) + srv := keeper.NewMsgServerImpl(k) + + <%= MsgSigner.LowerCamel %>, err := addressCodec.BytesToString([]byte("signerAddr__________________")) + require.NoError(t, err) + + unauthorizedAddr, err := addressCodec.BytesToString([]byte("unauthorizedAddr___________")) + require.NoError(t, err) + + _, err = srv.Create<%= TypeName.UpperCamel %>(ctx, &types.MsgCreate<%= TypeName.UpperCamel %>{<%= MsgSigner.UpperCamel %>: <%= MsgSigner.LowerCamel %>}) + require.NoError(t, err) tests := []struct { desc string @@ -30,27 +45,27 @@ func Test<%= TypeName.UpperCamel %>MsgServerUpdate(t *testing.T) { err error }{ { - desc: "Completed", - request: &types.MsgUpdate<%= TypeName.UpperCamel %>{<%= MsgSigner.UpperCamel %>: <%= MsgSigner.LowerCamel %>}, + desc: "invalid address", + request: &types.MsgUpdate<%= TypeName.UpperCamel %>{<%= MsgSigner.UpperCamel %>: "invalid"}, + err: sdkerrors.ErrInvalidAddress, }, { - desc: "Unauthorized", - request: &types.MsgUpdate<%= TypeName.UpperCamel %>{<%= MsgSigner.UpperCamel %>: "B"}, + desc: "unauthorized", + request: &types.MsgUpdate<%= TypeName.UpperCamel %>{<%= MsgSigner.UpperCamel %>: unauthorizedAddr}, err: sdkerrors.ErrUnauthorized, }, { - desc: "Unauthorized", + desc: "key not found", request: &types.MsgUpdate<%= TypeName.UpperCamel %>{<%= MsgSigner.UpperCamel %>: <%= MsgSigner.LowerCamel %>, Id: 10}, err: sdkerrors.ErrKeyNotFound, }, + { + desc: "completed", + request: &types.MsgUpdate<%= TypeName.UpperCamel %>{<%= MsgSigner.UpperCamel %>: <%= MsgSigner.LowerCamel %>}, + }, } for _, tc := range tests { t.Run(tc.desc, func(t *testing.T) { - _, srv, ctx := setupMsgServer(t) - - _, err := srv.Create<%= TypeName.UpperCamel %>(ctx, &types.MsgCreate<%= TypeName.UpperCamel %>{<%= MsgSigner.UpperCamel %>: <%= MsgSigner.LowerCamel %>}) - require.NoError(t, err) - _, err = srv.Update<%= TypeName.UpperCamel %>(ctx, tc.request) if tc.err != nil { require.ErrorIs(t, err, tc.err) @@ -62,7 +77,17 @@ func Test<%= TypeName.UpperCamel %>MsgServerUpdate(t *testing.T) { } func Test<%= TypeName.UpperCamel %>MsgServerDelete(t *testing.T) { - <%= MsgSigner.LowerCamel %> := "A" + k, ctx, addressCodec := keepertest.<%= title(ModuleName) %>Keeper(t) + srv := keeper.NewMsgServerImpl(k) + + <%= MsgSigner.LowerCamel %>, err := addressCodec.BytesToString([]byte("signerAddr__________________")) + require.NoError(t, err) + + unauthorizedAddr, err := addressCodec.BytesToString([]byte("unauthorizedAddr___________")) + require.NoError(t, err) + + _, err = srv.Create<%= TypeName.UpperCamel %>(ctx, &types.MsgCreate<%= TypeName.UpperCamel %>{<%= MsgSigner.UpperCamel %>: <%= MsgSigner.LowerCamel %>}) + require.NoError(t, err) tests := []struct { desc string @@ -70,26 +95,27 @@ func Test<%= TypeName.UpperCamel %>MsgServerDelete(t *testing.T) { err error }{ { - desc: "Completed", - request: &types.MsgDelete<%= TypeName.UpperCamel %>{<%= MsgSigner.UpperCamel %>: <%= MsgSigner.LowerCamel %>}, + desc: "invalid address", + request: &types.MsgDelete<%= TypeName.UpperCamel %>{<%= MsgSigner.UpperCamel %>: "invalid"}, + err: sdkerrors.ErrInvalidAddress, }, { - desc: "Unauthorized", - request: &types.MsgDelete<%= TypeName.UpperCamel %>{<%= MsgSigner.UpperCamel %>: "B"}, + desc: "unauthorized", + request: &types.MsgDelete<%= TypeName.UpperCamel %>{<%= MsgSigner.UpperCamel %>: unauthorizedAddr}, err: sdkerrors.ErrUnauthorized, }, { - desc: "KeyNotFound", + desc: "key not found", request: &types.MsgDelete<%= TypeName.UpperCamel %>{<%= MsgSigner.UpperCamel %>: <%= MsgSigner.LowerCamel %>, Id: 10}, err: sdkerrors.ErrKeyNotFound, }, + { + desc: "completed", + request: &types.MsgDelete<%= TypeName.UpperCamel %>{<%= MsgSigner.UpperCamel %>: <%= MsgSigner.LowerCamel %>}, + }, } for _, tc := range tests { t.Run(tc.desc, func(t *testing.T) { - _, srv, ctx := setupMsgServer(t) - - _, err := srv.Create<%= TypeName.UpperCamel %>(ctx, &types.MsgCreate<%= TypeName.UpperCamel %>{<%= MsgSigner.UpperCamel %>: <%= MsgSigner.LowerCamel %>}) - require.NoError(t, err) _, err = srv.Delete<%= TypeName.UpperCamel %>(ctx, tc.request) if tc.err != nil { require.ErrorIs(t, err, tc.err) diff --git a/ignite/templates/typed/list/files/messages/x/{{moduleName}}/types/messages_{{typeName}}.go.plush b/ignite/templates/typed/list/files/messages/x/{{moduleName}}/types/messages_{{typeName}}.go.plush index eaa9b53508..2055e0ee35 100644 --- a/ignite/templates/typed/list/files/messages/x/{{moduleName}}/types/messages_{{typeName}}.go.plush +++ b/ignite/templates/typed/list/files/messages/x/{{moduleName}}/types/messages_{{typeName}}.go.plush @@ -1,13 +1,5 @@ package types -import ( - errorsmod "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" -) - -var _ sdk.Msg = &MsgCreate<%= TypeName.UpperCamel %>{} - func NewMsgCreate<%= TypeName.UpperCamel %>(<%= MsgSigner.LowerCamel %> string<%= for (field) in Fields { %>, <%= field.Name.LowerCamel %> <%= field.DataType() %><% } %>) *MsgCreate<%= TypeName.UpperCamel %> { return &MsgCreate<%= TypeName.UpperCamel %>{ <%= MsgSigner.UpperCamel %>: <%= MsgSigner.LowerCamel %>,<%= for (field) in Fields { %> @@ -15,16 +7,6 @@ func NewMsgCreate<%= TypeName.UpperCamel %>(<%= MsgSigner.LowerCamel %> string<% } } -func (msg *MsgCreate<%= TypeName.UpperCamel %>) ValidateBasic() error { - _, err := sdk.AccAddressFromBech32(msg.<%= MsgSigner.UpperCamel %>) - if err != nil { - return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid <%= MsgSigner.LowerCamel %> address (%s)", err) - } - return nil -} - -var _ sdk.Msg = &MsgUpdate<%= TypeName.UpperCamel %>{} - func NewMsgUpdate<%= TypeName.UpperCamel %>(<%= MsgSigner.LowerCamel %> string, id uint64<%= for (field) in Fields { %>, <%= field.Name.LowerCamel %> <%= field.DataType() %><% } %>) *MsgUpdate<%= TypeName.UpperCamel %> { return &MsgUpdate<%= TypeName.UpperCamel%>{ Id: id, @@ -33,27 +15,9 @@ func NewMsgUpdate<%= TypeName.UpperCamel %>(<%= MsgSigner.LowerCamel %> string, } } -func (msg *MsgUpdate<%= TypeName.UpperCamel %>) ValidateBasic() error { - _, err := sdk.AccAddressFromBech32(msg.<%= MsgSigner.UpperCamel %>) - if err != nil { - return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid <%= MsgSigner.LowerCamel %> address (%s)", err) - } - return nil -} - -var _ sdk.Msg = &MsgDelete<%= TypeName.UpperCamel %>{} - func NewMsgDelete<%= TypeName.UpperCamel %>(<%= MsgSigner.LowerCamel %> string, id uint64) *MsgDelete<%= TypeName.UpperCamel %> { return &MsgDelete<%= TypeName.UpperCamel %>{ Id: id, <%= MsgSigner.UpperCamel %>: <%= MsgSigner.LowerCamel %>, } -} - -func (msg *MsgDelete<%= TypeName.UpperCamel %>) ValidateBasic() error { - _, err := sdk.AccAddressFromBech32(msg.<%= MsgSigner.UpperCamel %>) - if err != nil { - return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid <%= MsgSigner.LowerCamel %> address (%s)", err) - } - return nil -} +} \ No newline at end of file diff --git a/ignite/templates/typed/list/files/messages/x/{{moduleName}}/types/messages_{{typeName}}_test.go.plush b/ignite/templates/typed/list/files/messages/x/{{moduleName}}/types/messages_{{typeName}}_test.go.plush deleted file mode 100644 index e71d4e5780..0000000000 --- a/ignite/templates/typed/list/files/messages/x/{{moduleName}}/types/messages_{{typeName}}_test.go.plush +++ /dev/null @@ -1,102 +0,0 @@ -package types - -import ( - "testing" - - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - "github.com/stretchr/testify/require" - "<%= ModulePath %>/testutil/sample" -) - -func TestMsgCreate<%= TypeName.UpperCamel %>_ValidateBasic(t *testing.T) { - tests := []struct { - name string - msg MsgCreate<%= TypeName.UpperCamel %> - err error - }{ - { - name: "invalid address", - msg: MsgCreate<%= TypeName.UpperCamel %>{ - <%= MsgSigner.UpperCamel %>: "invalid_address", - }, - err: sdkerrors.ErrInvalidAddress, - }, { - name: "valid address", - msg: MsgCreate<%= TypeName.UpperCamel %>{ - <%= MsgSigner.UpperCamel %>: sample.AccAddress(), - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := tt.msg.ValidateBasic() - if tt.err != nil { - require.ErrorIs(t, err, tt.err) - return - } - require.NoError(t, err) - }) - } -} - -func TestMsgUpdate<%= TypeName.UpperCamel %>_ValidateBasic(t *testing.T) { - tests := []struct { - name string - msg MsgUpdate<%= TypeName.UpperCamel %> - err error - }{ - { - name: "invalid address", - msg: MsgUpdate<%= TypeName.UpperCamel %>{ - <%= MsgSigner.UpperCamel %>: "invalid_address", - }, - err: sdkerrors.ErrInvalidAddress, - }, { - name: "valid address", - msg: MsgUpdate<%= TypeName.UpperCamel %>{ - <%= MsgSigner.UpperCamel %>: sample.AccAddress(), - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := tt.msg.ValidateBasic() - if tt.err != nil { - require.ErrorIs(t, err, tt.err) - return - } - require.NoError(t, err) - }) - } -} - -func TestMsgDelete<%= TypeName.UpperCamel %>_ValidateBasic(t *testing.T) { - tests := []struct { - name string - msg MsgDelete<%= TypeName.UpperCamel %> - err error - }{ - { - name: "invalid address", - msg: MsgDelete<%= TypeName.UpperCamel %>{ - <%= MsgSigner.UpperCamel %>: "invalid_address", - }, - err: sdkerrors.ErrInvalidAddress, - }, { - name: "valid address", - msg: MsgDelete<%= TypeName.UpperCamel %>{ - <%= MsgSigner.UpperCamel %>: sample.AccAddress(), - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := tt.msg.ValidateBasic() - if tt.err != nil { - require.ErrorIs(t, err, tt.err) - return - } - require.NoError(t, err) - }) - } -} diff --git a/ignite/templates/typed/map/files/messages/x/{{moduleName}}/keeper/msg_server_{{typeName}}.go.plush b/ignite/templates/typed/map/files/messages/x/{{moduleName}}/keeper/msg_server_{{typeName}}.go.plush index 7de02e781f..db68eab1f9 100644 --- a/ignite/templates/typed/map/files/messages/x/{{moduleName}}/keeper/msg_server_{{typeName}}.go.plush +++ b/ignite/templates/typed/map/files/messages/x/{{moduleName}}/keeper/msg_server_{{typeName}}.go.plush @@ -1,6 +1,7 @@ package keeper import ( + "fmt" "context" "<%= ModulePath %>/x/<%= ModuleName %>/types" @@ -10,6 +11,10 @@ import ( func (k msgServer) Create<%= TypeName.UpperCamel %>(ctx context.Context, msg *types.MsgCreate<%= TypeName.UpperCamel %>) (*types.MsgCreate<%= TypeName.UpperCamel %>Response, error) { + if _, err := k.addressCodec.StringToBytes(msg.<%= MsgSigner.UpperCamel %>); err != nil { + return nil, errorsmod.Wrap(sdkerrors.ErrInvalidAddress, fmt.Sprintf("invalid address: %s", err)) + } + // Check if the value already exists _, isFound := k.Get<%= TypeName.UpperCamel %>( ctx, @@ -34,6 +39,10 @@ func (k msgServer) Create<%= TypeName.UpperCamel %>(ctx context.Context, msg *t } func (k msgServer) Update<%= TypeName.UpperCamel %>(ctx context.Context, msg *types.MsgUpdate<%= TypeName.UpperCamel %>) (*types.MsgUpdate<%= TypeName.UpperCamel %>Response, error) { + if _, err := k.addressCodec.StringToBytes(msg.<%= MsgSigner.UpperCamel %>); err != nil { + return nil, errorsmod.Wrap(sdkerrors.ErrInvalidAddress, fmt.Sprintf("invalid signer address: %s", err)) + } + // Check if the value exists valFound, isFound := k.Get<%= TypeName.UpperCamel %>( ctx, @@ -61,6 +70,10 @@ func (k msgServer) Update<%= TypeName.UpperCamel %>(ctx context.Context, msg *t } func (k msgServer) Delete<%= TypeName.UpperCamel %>(ctx context.Context, msg *types.MsgDelete<%= TypeName.UpperCamel %>) (*types.MsgDelete<%= TypeName.UpperCamel %>Response, error) { + if _, err := k.addressCodec.StringToBytes(msg.<%= MsgSigner.UpperCamel %>); err != nil { + return nil, errorsmod.Wrap(sdkerrors.ErrInvalidAddress, fmt.Sprintf("invalid signer address: %s", err)) + } + // Check if the value exists valFound, isFound := k.Get<%= TypeName.UpperCamel %>( ctx, diff --git a/ignite/templates/typed/map/files/messages/x/{{moduleName}}/types/messages_{{typeName}}.go.plush b/ignite/templates/typed/map/files/messages/x/{{moduleName}}/types/messages_{{typeName}}.go.plush index 1acf8e534b..3348d22847 100644 --- a/ignite/templates/typed/map/files/messages/x/{{moduleName}}/types/messages_{{typeName}}.go.plush +++ b/ignite/templates/typed/map/files/messages/x/{{moduleName}}/types/messages_{{typeName}}.go.plush @@ -1,13 +1,5 @@ package types -import ( - errorsmod "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" -) - -var _ sdk.Msg = &MsgCreate<%= TypeName.UpperCamel %>{} - func NewMsgCreate<%= TypeName.UpperCamel %>( <%= MsgSigner.LowerCamel %> string, <%= for (i, index) in Indexes { %><%= index.Name.LowerCamel %> <%= index.DataType() %>, @@ -22,16 +14,6 @@ func NewMsgCreate<%= TypeName.UpperCamel %>( } } -func (msg *MsgCreate<%= TypeName.UpperCamel %>) ValidateBasic() error { - _, err := sdk.AccAddressFromBech32(msg.<%= MsgSigner.UpperCamel %>) - if err != nil { - return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid <%= MsgSigner.LowerCamel %> address (%s)", err) - } - return nil -} - -var _ sdk.Msg = &MsgUpdate<%= TypeName.UpperCamel %>{} - func NewMsgUpdate<%= TypeName.UpperCamel %>( <%= MsgSigner.LowerCamel %> string, <%= for (i, index) in Indexes { %><%= index.Name.LowerCamel %> <%= index.DataType() %>, @@ -46,16 +28,6 @@ func NewMsgUpdate<%= TypeName.UpperCamel %>( } } -func (msg *MsgUpdate<%= TypeName.UpperCamel %>) ValidateBasic() error { - _, err := sdk.AccAddressFromBech32(msg.<%= MsgSigner.UpperCamel %>) - if err != nil { - return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid <%= MsgSigner.LowerCamel %> address (%s)", err) - } - return nil -} - -var _ sdk.Msg = &MsgDelete<%= TypeName.UpperCamel %>{} - func NewMsgDelete<%= TypeName.UpperCamel %>( <%= MsgSigner.LowerCamel %> string, <%= for (i, index) in Indexes { %><%= index.Name.LowerCamel %> <%= index.DataType() %>, @@ -66,12 +38,4 @@ func NewMsgDelete<%= TypeName.UpperCamel %>( <%= for (index) in Indexes { %><%= index.Name.UpperCamel %>: <%= index.Name.LowerCamel %>, <% } %> } -} - -func (msg *MsgDelete<%= TypeName.UpperCamel %>) ValidateBasic() error { - _, err := sdk.AccAddressFromBech32(msg.<%= MsgSigner.UpperCamel %>) - if err != nil { - return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid <%= MsgSigner.LowerCamel %> address (%s)", err) - } - return nil -} +} \ No newline at end of file diff --git a/ignite/templates/typed/map/files/messages/x/{{moduleName}}/types/messages_{{typeName}}_test.go.plush b/ignite/templates/typed/map/files/messages/x/{{moduleName}}/types/messages_{{typeName}}_test.go.plush deleted file mode 100644 index e71d4e5780..0000000000 --- a/ignite/templates/typed/map/files/messages/x/{{moduleName}}/types/messages_{{typeName}}_test.go.plush +++ /dev/null @@ -1,102 +0,0 @@ -package types - -import ( - "testing" - - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - "github.com/stretchr/testify/require" - "<%= ModulePath %>/testutil/sample" -) - -func TestMsgCreate<%= TypeName.UpperCamel %>_ValidateBasic(t *testing.T) { - tests := []struct { - name string - msg MsgCreate<%= TypeName.UpperCamel %> - err error - }{ - { - name: "invalid address", - msg: MsgCreate<%= TypeName.UpperCamel %>{ - <%= MsgSigner.UpperCamel %>: "invalid_address", - }, - err: sdkerrors.ErrInvalidAddress, - }, { - name: "valid address", - msg: MsgCreate<%= TypeName.UpperCamel %>{ - <%= MsgSigner.UpperCamel %>: sample.AccAddress(), - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := tt.msg.ValidateBasic() - if tt.err != nil { - require.ErrorIs(t, err, tt.err) - return - } - require.NoError(t, err) - }) - } -} - -func TestMsgUpdate<%= TypeName.UpperCamel %>_ValidateBasic(t *testing.T) { - tests := []struct { - name string - msg MsgUpdate<%= TypeName.UpperCamel %> - err error - }{ - { - name: "invalid address", - msg: MsgUpdate<%= TypeName.UpperCamel %>{ - <%= MsgSigner.UpperCamel %>: "invalid_address", - }, - err: sdkerrors.ErrInvalidAddress, - }, { - name: "valid address", - msg: MsgUpdate<%= TypeName.UpperCamel %>{ - <%= MsgSigner.UpperCamel %>: sample.AccAddress(), - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := tt.msg.ValidateBasic() - if tt.err != nil { - require.ErrorIs(t, err, tt.err) - return - } - require.NoError(t, err) - }) - } -} - -func TestMsgDelete<%= TypeName.UpperCamel %>_ValidateBasic(t *testing.T) { - tests := []struct { - name string - msg MsgDelete<%= TypeName.UpperCamel %> - err error - }{ - { - name: "invalid address", - msg: MsgDelete<%= TypeName.UpperCamel %>{ - <%= MsgSigner.UpperCamel %>: "invalid_address", - }, - err: sdkerrors.ErrInvalidAddress, - }, { - name: "valid address", - msg: MsgDelete<%= TypeName.UpperCamel %>{ - <%= MsgSigner.UpperCamel %>: sample.AccAddress(), - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := tt.msg.ValidateBasic() - if tt.err != nil { - require.ErrorIs(t, err, tt.err) - return - } - require.NoError(t, err) - }) - } -} diff --git a/ignite/templates/typed/map/files/tests/component/x/{{moduleName}}/keeper/query_{{typeName}}_test.go.plush b/ignite/templates/typed/map/files/tests/component/x/{{moduleName}}/keeper/query_{{typeName}}_test.go.plush index cbf15f77d8..5860d4a3f1 100644 --- a/ignite/templates/typed/map/files/tests/component/x/{{moduleName}}/keeper/query_{{typeName}}_test.go.plush +++ b/ignite/templates/typed/map/files/tests/component/x/{{moduleName}}/keeper/query_{{typeName}}_test.go.plush @@ -19,7 +19,7 @@ import ( var _ = strconv.IntSize func Test<%= TypeName.UpperCamel %>QuerySingle(t *testing.T) { - k, ctx := keepertest.<%= title(ModuleName) %>Keeper(t) + k, ctx, _ := keepertest.<%= title(ModuleName) %>Keeper(t) qs := keeper.NewQueryServerImpl(k) msgs := createN<%= TypeName.UpperCamel %>(k, ctx, 2) tests := []struct { @@ -74,7 +74,7 @@ func Test<%= TypeName.UpperCamel %>QuerySingle(t *testing.T) { } func Test<%= TypeName.UpperCamel %>QueryPaginated(t *testing.T) { - k, ctx := keepertest.<%= title(ModuleName) %>Keeper(t) + k, ctx, _ := keepertest.<%= title(ModuleName) %>Keeper(t) qs := keeper.NewQueryServerImpl(k) msgs := createN<%= TypeName.UpperCamel %>(k, ctx, 5) diff --git a/ignite/templates/typed/map/files/tests/component/x/{{moduleName}}/keeper/{{typeName}}_test.go.plush b/ignite/templates/typed/map/files/tests/component/x/{{moduleName}}/keeper/{{typeName}}_test.go.plush index 13f9c5e404..1952fe6519 100644 --- a/ignite/templates/typed/map/files/tests/component/x/{{moduleName}}/keeper/{{typeName}}_test.go.plush +++ b/ignite/templates/typed/map/files/tests/component/x/{{moduleName}}/keeper/{{typeName}}_test.go.plush @@ -26,7 +26,7 @@ func createN<%= TypeName.UpperCamel %>(keeper keeper.Keeper, ctx context.Context } func Test<%= TypeName.UpperCamel %>Get(t *testing.T) { - keeper, ctx := keepertest.<%= title(ModuleName) %>Keeper(t) + keeper, ctx, _ := keepertest.<%= title(ModuleName) %>Keeper(t) items := createN<%= TypeName.UpperCamel %>(keeper, ctx, 10) for _, item := range items { rst, found := keeper.Get<%= TypeName.UpperCamel %>(ctx, @@ -41,7 +41,7 @@ func Test<%= TypeName.UpperCamel %>Get(t *testing.T) { } } func Test<%= TypeName.UpperCamel %>Remove(t *testing.T) { - keeper, ctx := keepertest.<%= title(ModuleName) %>Keeper(t) + keeper, ctx, _ := keepertest.<%= title(ModuleName) %>Keeper(t) items := createN<%= TypeName.UpperCamel %>(keeper, ctx, 10) for _, item := range items { keeper.Remove<%= TypeName.UpperCamel %>(ctx, @@ -57,7 +57,7 @@ func Test<%= TypeName.UpperCamel %>Remove(t *testing.T) { } func Test<%= TypeName.UpperCamel %>GetAll(t *testing.T) { - keeper, ctx := keepertest.<%= title(ModuleName) %>Keeper(t) + keeper, ctx, _ := keepertest.<%= title(ModuleName) %>Keeper(t) items := createN<%= TypeName.UpperCamel %>(keeper, ctx, 10) require.ElementsMatch(t, nullify.Fill(items), diff --git a/ignite/templates/typed/map/files/tests/messages/x/{{moduleName}}/keeper/msg_server_{{typeName}}_test.go.plush b/ignite/templates/typed/map/files/tests/messages/x/{{moduleName}}/keeper/msg_server_{{typeName}}_test.go.plush index d7160bc455..3cef7ce4bb 100644 --- a/ignite/templates/typed/map/files/tests/messages/x/{{moduleName}}/keeper/msg_server_{{typeName}}_test.go.plush +++ b/ignite/templates/typed/map/files/tests/messages/x/{{moduleName}}/keeper/msg_server_{{typeName}}_test.go.plush @@ -16,9 +16,11 @@ import ( var _ = strconv.IntSize func Test<%= TypeName.UpperCamel %>MsgServerCreate(t *testing.T) { - k, ctx := keepertest.<%= title(ModuleName) %>Keeper(t) + k, ctx, addressCodec := keepertest.<%= title(ModuleName) %>Keeper(t) srv := keeper.NewMsgServerImpl(k) - <%= MsgSigner.LowerCamel %> := "A" + <%= MsgSigner.LowerCamel %>, err := addressCodec.BytesToString([]byte("signerAddr__________________")) + require.NoError(t, err) + for i := 0; i < 5; i++ { expected := &types.MsgCreate<%= TypeName.UpperCamel %>{<%= MsgSigner.UpperCamel %>: <%= MsgSigner.LowerCamel %>, <%= for (i, index) in Indexes { %><%= index.Name.UpperCamel %>: <%= index.ValueLoop() %>, @@ -36,7 +38,20 @@ func Test<%= TypeName.UpperCamel %>MsgServerCreate(t *testing.T) { } func Test<%= TypeName.UpperCamel %>MsgServerUpdate(t *testing.T) { - <%= MsgSigner.LowerCamel %> := "A" + k, ctx, addressCodec := keepertest.<%= title(ModuleName) %>Keeper(t) + <%= MsgSigner.LowerCamel %>, err := addressCodec.BytesToString([]byte("signerAddr__________________")) + require.NoError(t, err) + + unauthorizedAddr, err := addressCodec.BytesToString([]byte("unauthorizedAddr___________")) + require.NoError(t, err) + + srv := keeper.NewMsgServerImpl(k) + expected := &types.MsgCreate<%= TypeName.UpperCamel %>{<%= MsgSigner.UpperCamel %>: <%= MsgSigner.LowerCamel %>, + <%= for (i, index) in Indexes { %><%= index.Name.UpperCamel %>: <%= index.ValueIndex() %>, + <% } %> + } + _, err = srv.Create<%= TypeName.UpperCamel %>(ctx, expected) + require.NoError(t, err) tests := []struct { desc string @@ -44,40 +59,39 @@ func Test<%= TypeName.UpperCamel %>MsgServerUpdate(t *testing.T) { err error }{ { - desc: "Completed", - request: &types.MsgUpdate<%= TypeName.UpperCamel %>{<%= MsgSigner.UpperCamel %>: <%= MsgSigner.LowerCamel %>, + desc: "invalid address", + request: &types.MsgUpdate<%= TypeName.UpperCamel %>{<%= MsgSigner.UpperCamel %>: "invalid", <%= for (i, index) in Indexes { %><%= index.Name.UpperCamel %>: <%= index.ValueIndex() %>, <% } %> }, + err: sdkerrors.ErrInvalidAddress, }, { - desc: "Unauthorized", - request: &types.MsgUpdate<%= TypeName.UpperCamel %>{<%= MsgSigner.UpperCamel %>: "B", + desc: "unauthorized", + request: &types.MsgUpdate<%= TypeName.UpperCamel %>{<%= MsgSigner.UpperCamel %>: unauthorizedAddr, <%= for (i, index) in Indexes { %><%= index.Name.UpperCamel %>: <%= index.ValueIndex() %>, <% } %> }, err: sdkerrors.ErrUnauthorized, }, { - desc: "KeyNotFound", + desc: "key not found", request: &types.MsgUpdate<%= TypeName.UpperCamel %>{<%= MsgSigner.UpperCamel %>: <%= MsgSigner.LowerCamel %>, <%= for (i, index) in Indexes { %><%= index.Name.UpperCamel %>: <%= index.ValueInvalidIndex() %>, <% } %> }, err: sdkerrors.ErrKeyNotFound, }, + { + desc: "completed", + request: &types.MsgUpdate<%= TypeName.UpperCamel %>{<%= MsgSigner.UpperCamel %>: <%= MsgSigner.LowerCamel %>, + <%= for (i, index) in Indexes { %><%= index.Name.UpperCamel %>: <%= index.ValueIndex() %>, + <% } %> + }, + }, } for _, tc := range tests { t.Run(tc.desc, func(t *testing.T) { - k, ctx := keepertest.<%= title(ModuleName) %>Keeper(t) - srv := keeper.NewMsgServerImpl(k) - expected := &types.MsgCreate<%= TypeName.UpperCamel %>{<%= MsgSigner.UpperCamel %>: <%= MsgSigner.LowerCamel %>, - <%= for (i, index) in Indexes { %><%= index.Name.UpperCamel %>: <%= index.ValueIndex() %>, - <% } %> - } - _, err := srv.Create<%= TypeName.UpperCamel %>(ctx, expected) - require.NoError(t, err) - _, err = srv.Update<%= TypeName.UpperCamel %>(ctx, tc.request) if tc.err != nil { require.ErrorIs(t, err, tc.err) @@ -95,7 +109,19 @@ func Test<%= TypeName.UpperCamel %>MsgServerUpdate(t *testing.T) { } func Test<%= TypeName.UpperCamel %>MsgServerDelete(t *testing.T) { - <%= MsgSigner.LowerCamel %> := "A" + k, ctx, addressCodec := keepertest.<%= title(ModuleName) %>Keeper(t) + <%= MsgSigner.LowerCamel %>, err := addressCodec.BytesToString([]byte("signerAddr__________________")) + require.NoError(t, err) + + unauthorizedAddr, err := addressCodec.BytesToString([]byte("unauthorizedAddr___________")) + require.NoError(t, err) + + srv := keeper.NewMsgServerImpl(k) + _, err = srv.Create<%= TypeName.UpperCamel %>(ctx, &types.MsgCreate<%= TypeName.UpperCamel %>{<%= MsgSigner.UpperCamel %>: <%= MsgSigner.LowerCamel %>, + <%= for (i, index) in Indexes { %><%= index.Name.UpperCamel %>: <%= index.ValueIndex() %>, + <% } %> + }) + require.NoError(t, err) tests := []struct { desc string @@ -103,39 +129,39 @@ func Test<%= TypeName.UpperCamel %>MsgServerDelete(t *testing.T) { err error }{ { - desc: "Completed", - request: &types.MsgDelete<%= TypeName.UpperCamel %>{<%= MsgSigner.UpperCamel %>: <%= MsgSigner.LowerCamel %>, + desc: "invalid address", + request: &types.MsgDelete<%= TypeName.UpperCamel %>{<%= MsgSigner.UpperCamel %>: "invalid", <%= for (i, index) in Indexes { %><%= index.Name.UpperCamel %>: <%= index.ValueIndex() %>, <% } %> }, + err: sdkerrors.ErrInvalidAddress, }, { - desc: "Unauthorized", - request: &types.MsgDelete<%= TypeName.UpperCamel %>{<%= MsgSigner.UpperCamel %>: "B", + desc: "unauthorized", + request: &types.MsgDelete<%= TypeName.UpperCamel %>{<%= MsgSigner.UpperCamel %>: unauthorizedAddr, <%= for (i, index) in Indexes { %><%= index.Name.UpperCamel %>: <%= index.ValueIndex() %>, <% } %> }, err: sdkerrors.ErrUnauthorized, }, { - desc: "KeyNotFound", + desc: "key not found", request: &types.MsgDelete<%= TypeName.UpperCamel %>{<%= MsgSigner.UpperCamel %>: <%= MsgSigner.LowerCamel %>, <%= for (i, index) in Indexes { %><%= index.Name.UpperCamel %>: <%= index.ValueInvalidIndex() %>, <% } %> }, err: sdkerrors.ErrKeyNotFound, }, + { + desc: "completed", + request: &types.MsgDelete<%= TypeName.UpperCamel %>{<%= MsgSigner.UpperCamel %>: <%= MsgSigner.LowerCamel %>, + <%= for (i, index) in Indexes { %><%= index.Name.UpperCamel %>: <%= index.ValueIndex() %>, + <% } %> + }, + }, } for _, tc := range tests { t.Run(tc.desc, func(t *testing.T) { - k, ctx := keepertest.<%= title(ModuleName) %>Keeper(t) - srv := keeper.NewMsgServerImpl(k) - - _, err := srv.Create<%= TypeName.UpperCamel %>(ctx, &types.MsgCreate<%= TypeName.UpperCamel %>{<%= MsgSigner.UpperCamel %>: <%= MsgSigner.LowerCamel %>, - <%= for (i, index) in Indexes { %><%= index.Name.UpperCamel %>: <%= index.ValueIndex() %>, - <% } %> - }) - require.NoError(t, err) _, err = srv.Delete<%= TypeName.UpperCamel %>(ctx, tc.request) if tc.err != nil { require.ErrorIs(t, err, tc.err) diff --git a/ignite/templates/typed/singleton/files/component/x/{{moduleName}}/keeper/query_{{typeName}}_test.go.plush b/ignite/templates/typed/singleton/files/component/x/{{moduleName}}/keeper/query_{{typeName}}_test.go.plush index 363223802a..6115f12326 100644 --- a/ignite/templates/typed/singleton/files/component/x/{{moduleName}}/keeper/query_{{typeName}}_test.go.plush +++ b/ignite/templates/typed/singleton/files/component/x/{{moduleName}}/keeper/query_{{typeName}}_test.go.plush @@ -14,7 +14,7 @@ import ( ) func Test<%= TypeName.UpperCamel %>Query(t *testing.T) { - k, ctx := keepertest.<%= title(ModuleName) %>Keeper(t) + k, ctx, _ := keepertest.<%= title(ModuleName) %>Keeper(t) qs := keeper.NewQueryServerImpl(k) item := types.<%= TypeName.UpperCamel %>{} err := k.<%= TypeName.UpperCamel %>.Set(ctx, item) diff --git a/ignite/templates/typed/singleton/files/messages/x/{{moduleName}}/keeper/msg_server_{{typeName}}.go.plush b/ignite/templates/typed/singleton/files/messages/x/{{moduleName}}/keeper/msg_server_{{typeName}}.go.plush index 9ee1bfa336..4b23e0e3fc 100644 --- a/ignite/templates/typed/singleton/files/messages/x/{{moduleName}}/keeper/msg_server_{{typeName}}.go.plush +++ b/ignite/templates/typed/singleton/files/messages/x/{{moduleName}}/keeper/msg_server_{{typeName}}.go.plush @@ -1,16 +1,20 @@ package keeper import ( + "fmt" "context" "<%= ModulePath %>/x/<%= ModuleName %>/types" errorsmod "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" ) func (k msgServer) Create<%= TypeName.UpperCamel %>(ctx context.Context, msg *types.MsgCreate<%= TypeName.UpperCamel %>) (*types.MsgCreate<%= TypeName.UpperCamel %>Response, error) { + if _, err := k.addressCodec.StringToBytes(msg.<%= MsgSigner.UpperCamel %>); err != nil { + return nil, errorsmod.Wrap(sdkerrors.ErrInvalidAddress, fmt.Sprintf("invalid address: %s", err)) + } + // Check if the value already exists found, err := k.<%= TypeName.UpperCamel %>.Has(ctx) if err != nil { @@ -36,6 +40,10 @@ func (k msgServer) Create<%= TypeName.UpperCamel %>(ctx context.Context, msg *t } func (k msgServer) Update<%= TypeName.UpperCamel %>(ctx context.Context, msg *types.MsgUpdate<%= TypeName.UpperCamel %>) (*types.MsgUpdate<%= TypeName.UpperCamel %>Response, error) { + if _, err := k.addressCodec.StringToBytes(msg.<%= MsgSigner.UpperCamel %>); err != nil { + return nil, errorsmod.Wrap(sdkerrors.ErrInvalidAddress, fmt.Sprintf("invalid address: %s", err)) + } + // Check if the value exists valFound, err := k.<%= TypeName.UpperCamel %>.Get(ctx) if err != nil { @@ -60,6 +68,10 @@ func (k msgServer) Update<%= TypeName.UpperCamel %>(ctx context.Context, msg *t } func (k msgServer) Delete<%= TypeName.UpperCamel %>(ctx context.Context, msg *types.MsgDelete<%= TypeName.UpperCamel %>) (*types.MsgDelete<%= TypeName.UpperCamel %>Response, error) { + if _, err := k.addressCodec.StringToBytes(msg.<%= MsgSigner.UpperCamel %>); err != nil { + return nil, errorsmod.Wrap(sdkerrors.ErrInvalidAddress, fmt.Sprintf("invalid address: %s", err)) + } + // Check if the value exists val, err := k.<%= TypeName.UpperCamel %>.Get(ctx) if err != nil { diff --git a/ignite/templates/typed/singleton/files/messages/x/{{moduleName}}/keeper/msg_server_{{typeName}}_test.go.plush b/ignite/templates/typed/singleton/files/messages/x/{{moduleName}}/keeper/msg_server_{{typeName}}_test.go.plush index ce2b490e35..cdccb1842a 100644 --- a/ignite/templates/typed/singleton/files/messages/x/{{moduleName}}/keeper/msg_server_{{typeName}}_test.go.plush +++ b/ignite/templates/typed/singleton/files/messages/x/{{moduleName}}/keeper/msg_server_{{typeName}}_test.go.plush @@ -12,11 +12,12 @@ import ( ) func Test<%= TypeName.UpperCamel %>MsgServerCreate(t *testing.T) { - k, ctx := keepertest.<%= title(ModuleName) %>Keeper(t) + k, ctx, addressCodec := keepertest.<%= title(ModuleName) %>Keeper(t) srv := keeper.NewMsgServerImpl(k) - <%= MsgSigner.LowerCamel %> := "A" + <%= MsgSigner.LowerCamel %>, err := addressCodec.BytesToString([]byte("signerAddr__________________")) + require.NoError(t, err) expected := &types.MsgCreate<%= TypeName.UpperCamel %>{<%= MsgSigner.UpperCamel %>: <%= MsgSigner.LowerCamel %>} - _, err := srv.Create<%= TypeName.UpperCamel %>(ctx, expected) + _, err = srv.Create<%= TypeName.UpperCamel %>(ctx, expected) require.NoError(t, err) rst, err := k.<%= TypeName.UpperCamel %>.Get(ctx) require.Nil(t, err) @@ -24,7 +25,17 @@ func Test<%= TypeName.UpperCamel %>MsgServerCreate(t *testing.T) { } func Test<%= TypeName.UpperCamel %>MsgServerUpdate(t *testing.T) { - <%= MsgSigner.LowerCamel %> := "A" + k, ctx, addressCodec := keepertest.<%= title(ModuleName) %>Keeper(t) + <%= MsgSigner.LowerCamel %>, err := addressCodec.BytesToString([]byte("signerAddr__________________")) + require.NoError(t, err) + + unauthorizedAddr, err := addressCodec.BytesToString([]byte("unauthorizedAddr___________")) + require.NoError(t, err) + + srv := keeper.NewMsgServerImpl(k) + expected := &types.MsgCreate<%= TypeName.UpperCamel %>{<%= MsgSigner.UpperCamel %>: <%= MsgSigner.LowerCamel %>} + _, err = srv.Create<%= TypeName.UpperCamel %>(ctx, expected) + require.NoError(t, err) tests := []struct { desc string @@ -32,23 +43,22 @@ func Test<%= TypeName.UpperCamel %>MsgServerUpdate(t *testing.T) { err error }{ { - desc: "Completed", - request: &types.MsgUpdate<%= TypeName.UpperCamel %>{<%= MsgSigner.UpperCamel %>: <%= MsgSigner.LowerCamel %>}, + desc: "invalid address", + request: &types.MsgUpdate<%= TypeName.UpperCamel %>{<%= MsgSigner.UpperCamel %>: "invalid"}, + err: sdkerrors.ErrInvalidAddress, }, { - desc: "Unauthorized", - request: &types.MsgUpdate<%= TypeName.UpperCamel %>{<%= MsgSigner.UpperCamel %>: "B"}, + desc: "unauthorized", + request: &types.MsgUpdate<%= TypeName.UpperCamel %>{<%= MsgSigner.UpperCamel %>: unauthorizedAddr}, err: sdkerrors.ErrUnauthorized, }, + { + desc: "completed", + request: &types.MsgUpdate<%= TypeName.UpperCamel %>{<%= MsgSigner.UpperCamel %>: <%= MsgSigner.LowerCamel %>}, + }, } for _, tc := range tests { t.Run(tc.desc, func(t *testing.T) { - k, ctx := keepertest.<%= title(ModuleName) %>Keeper(t) - srv := keeper.NewMsgServerImpl(k) - expected := &types.MsgCreate<%= TypeName.UpperCamel %>{<%= MsgSigner.UpperCamel %>: <%= MsgSigner.LowerCamel %>} - _, err := srv.Create<%= TypeName.UpperCamel %>(ctx, expected) - require.NoError(t, err) - _, err = srv.Update<%= TypeName.UpperCamel %>(ctx, tc.request) if tc.err != nil { require.ErrorIs(t, err, tc.err) @@ -63,7 +73,16 @@ func Test<%= TypeName.UpperCamel %>MsgServerUpdate(t *testing.T) { } func Test<%= TypeName.UpperCamel %>MsgServerDelete(t *testing.T) { - <%= MsgSigner.LowerCamel %> := "A" + k, ctx, addressCodec := keepertest.<%= title(ModuleName) %>Keeper(t) + <%= MsgSigner.LowerCamel %>, err := addressCodec.BytesToString([]byte("signerAddr__________________")) + require.NoError(t, err) + + unauthorizedAddr, err := addressCodec.BytesToString([]byte("unauthorizedAddr___________")) + require.NoError(t, err) + + srv := keeper.NewMsgServerImpl(k) + _, err = srv.Create<%= TypeName.UpperCamel %>(ctx, &types.MsgCreate<%= TypeName.UpperCamel %>{<%= MsgSigner.UpperCamel %>: <%= MsgSigner.LowerCamel %>}) + require.NoError(t, err) tests := []struct { desc string @@ -71,22 +90,22 @@ func Test<%= TypeName.UpperCamel %>MsgServerDelete(t *testing.T) { err error }{ { - desc: "Completed", - request: &types.MsgDelete<%= TypeName.UpperCamel %>{<%= MsgSigner.UpperCamel %>: <%= MsgSigner.LowerCamel %>}, + desc: "invalid address", + request: &types.MsgDelete<%= TypeName.UpperCamel %>{<%= MsgSigner.UpperCamel %>: "invalid"}, + err: sdkerrors.ErrInvalidAddress, }, { - desc: "Unauthorized", - request: &types.MsgDelete<%= TypeName.UpperCamel %>{<%= MsgSigner.UpperCamel %>: "B"}, + desc: "unauthorized", + request: &types.MsgDelete<%= TypeName.UpperCamel %>{<%= MsgSigner.UpperCamel %>: unauthorizedAddr}, err: sdkerrors.ErrUnauthorized, }, + { + desc: "completed", + request: &types.MsgDelete<%= TypeName.UpperCamel %>{<%= MsgSigner.UpperCamel %>: <%= MsgSigner.LowerCamel %>}, + }, } for _, tc := range tests { t.Run(tc.desc, func(t *testing.T) { - k, ctx := keepertest.<%= title(ModuleName) %>Keeper(t) - srv := keeper.NewMsgServerImpl(k) - - _, err := srv.Create<%= TypeName.UpperCamel %>(ctx, &types.MsgCreate<%= TypeName.UpperCamel %>{<%= MsgSigner.UpperCamel %>: <%= MsgSigner.LowerCamel %>}) - require.NoError(t, err) _, err = srv.Delete<%= TypeName.UpperCamel %>(ctx, tc.request) if tc.err != nil { require.ErrorIs(t, err, tc.err) diff --git a/ignite/templates/typed/singleton/files/messages/x/{{moduleName}}/types/messages_{{typeName}}.go.plush b/ignite/templates/typed/singleton/files/messages/x/{{moduleName}}/types/messages_{{typeName}}.go.plush index 38291c9ba6..f8547d0a15 100644 --- a/ignite/templates/typed/singleton/files/messages/x/{{moduleName}}/types/messages_{{typeName}}.go.plush +++ b/ignite/templates/typed/singleton/files/messages/x/{{moduleName}}/types/messages_{{typeName}}.go.plush @@ -1,13 +1,5 @@ package types -import ( - errorsmod "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" -) - -var _ sdk.Msg = &MsgCreate<%= TypeName.UpperCamel %>{} - func NewMsgCreate<%= TypeName.UpperCamel %>(<%= MsgSigner.LowerCamel %> string<%= for (field) in Fields { %>, <%= field.Name.LowerCamel %> <%= field.DataType() %><% } %>) *MsgCreate<%= TypeName.UpperCamel %> { return &MsgCreate<%= TypeName.UpperCamel %>{ <%= MsgSigner.UpperCamel %>: <%= MsgSigner.LowerCamel %>,<%= for (field) in Fields { %> @@ -15,16 +7,6 @@ func NewMsgCreate<%= TypeName.UpperCamel %>(<%= MsgSigner.LowerCamel %> string<% } } -func (msg *MsgCreate<%= TypeName.UpperCamel %>) ValidateBasic() error { - _, err := sdk.AccAddressFromBech32(msg.<%= MsgSigner.UpperCamel %>) - if err != nil { - return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid <%= MsgSigner.LowerCamel %> address (%s)", err) - } - return nil -} - -var _ sdk.Msg = &MsgUpdate<%= TypeName.UpperCamel %>{} - func NewMsgUpdate<%= TypeName.UpperCamel %>(<%= MsgSigner.LowerCamel %> string<%= for (field) in Fields { %>, <%= field.Name.LowerCamel %> <%= field.DataType() %><% } %>) *MsgUpdate<%= TypeName.UpperCamel %> { return &MsgUpdate<%= TypeName.UpperCamel %>{ <%= MsgSigner.UpperCamel %>: <%= MsgSigner.LowerCamel %>,<%= for (field) in Fields { %> @@ -32,26 +14,8 @@ func NewMsgUpdate<%= TypeName.UpperCamel %>(<%= MsgSigner.LowerCamel %> string<% } } -func (msg *MsgUpdate<%= TypeName.UpperCamel %>) ValidateBasic() error { - _, err := sdk.AccAddressFromBech32(msg.<%= MsgSigner.UpperCamel %>) - if err != nil { - return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid <%= MsgSigner.LowerCamel %> address (%s)", err) - } - return nil -} - -var _ sdk.Msg = &MsgDelete<%= TypeName.UpperCamel %>{} - func NewMsgDelete<%= TypeName.UpperCamel %>(<%= MsgSigner.LowerCamel %> string) *MsgDelete<%= TypeName.UpperCamel %> { return &MsgDelete<%= TypeName.UpperCamel %>{ <%= MsgSigner.UpperCamel %>: <%= MsgSigner.LowerCamel %>, } -} - -func (msg *MsgDelete<%= TypeName.UpperCamel %>) ValidateBasic() error { - _, err := sdk.AccAddressFromBech32(msg.<%= MsgSigner.UpperCamel %>) - if err != nil { - return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid <%= MsgSigner.LowerCamel %> address (%s)", err) - } - return nil -} +} \ No newline at end of file diff --git a/ignite/templates/typed/singleton/files/messages/x/{{moduleName}}/types/messages_{{typeName}}_test.go.plush b/ignite/templates/typed/singleton/files/messages/x/{{moduleName}}/types/messages_{{typeName}}_test.go.plush deleted file mode 100644 index e71d4e5780..0000000000 --- a/ignite/templates/typed/singleton/files/messages/x/{{moduleName}}/types/messages_{{typeName}}_test.go.plush +++ /dev/null @@ -1,102 +0,0 @@ -package types - -import ( - "testing" - - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - "github.com/stretchr/testify/require" - "<%= ModulePath %>/testutil/sample" -) - -func TestMsgCreate<%= TypeName.UpperCamel %>_ValidateBasic(t *testing.T) { - tests := []struct { - name string - msg MsgCreate<%= TypeName.UpperCamel %> - err error - }{ - { - name: "invalid address", - msg: MsgCreate<%= TypeName.UpperCamel %>{ - <%= MsgSigner.UpperCamel %>: "invalid_address", - }, - err: sdkerrors.ErrInvalidAddress, - }, { - name: "valid address", - msg: MsgCreate<%= TypeName.UpperCamel %>{ - <%= MsgSigner.UpperCamel %>: sample.AccAddress(), - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := tt.msg.ValidateBasic() - if tt.err != nil { - require.ErrorIs(t, err, tt.err) - return - } - require.NoError(t, err) - }) - } -} - -func TestMsgUpdate<%= TypeName.UpperCamel %>_ValidateBasic(t *testing.T) { - tests := []struct { - name string - msg MsgUpdate<%= TypeName.UpperCamel %> - err error - }{ - { - name: "invalid address", - msg: MsgUpdate<%= TypeName.UpperCamel %>{ - <%= MsgSigner.UpperCamel %>: "invalid_address", - }, - err: sdkerrors.ErrInvalidAddress, - }, { - name: "valid address", - msg: MsgUpdate<%= TypeName.UpperCamel %>{ - <%= MsgSigner.UpperCamel %>: sample.AccAddress(), - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := tt.msg.ValidateBasic() - if tt.err != nil { - require.ErrorIs(t, err, tt.err) - return - } - require.NoError(t, err) - }) - } -} - -func TestMsgDelete<%= TypeName.UpperCamel %>_ValidateBasic(t *testing.T) { - tests := []struct { - name string - msg MsgDelete<%= TypeName.UpperCamel %> - err error - }{ - { - name: "invalid address", - msg: MsgDelete<%= TypeName.UpperCamel %>{ - <%= MsgSigner.UpperCamel %>: "invalid_address", - }, - err: sdkerrors.ErrInvalidAddress, - }, { - name: "valid address", - msg: MsgDelete<%= TypeName.UpperCamel %>{ - <%= MsgSigner.UpperCamel %>: sample.AccAddress(), - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := tt.msg.ValidateBasic() - if tt.err != nil { - require.ErrorIs(t, err, tt.err) - return - } - require.NoError(t, err) - }) - } -}