162 lines
4.3 KiB
Go
162 lines
4.3 KiB
Go
package cli_test
|
|
|
|
import (
|
|
"fmt"
|
|
"strconv"
|
|
"testing"
|
|
|
|
"github.com/cosmos/cosmos-sdk/client/flags"
|
|
clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli"
|
|
"github.com/stretchr/testify/require"
|
|
tmcli "github.com/tendermint/tendermint/libs/cli"
|
|
"google.golang.org/grpc/codes"
|
|
"google.golang.org/grpc/status"
|
|
|
|
"cosmos-test/testutil/network"
|
|
"cosmos-test/testutil/nullify"
|
|
"cosmos-test/x/cosmostest/client/cli"
|
|
"cosmos-test/x/cosmostest/types"
|
|
)
|
|
|
|
// Prevent strconv unused error
|
|
var _ = strconv.IntSize
|
|
|
|
func networkWithAuctionObjects(t *testing.T, n int) (*network.Network, []types.Auction) {
|
|
t.Helper()
|
|
cfg := network.DefaultConfig()
|
|
state := types.GenesisState{}
|
|
require.NoError(t, cfg.Codec.UnmarshalJSON(cfg.GenesisState[types.ModuleName], &state))
|
|
|
|
for i := 0; i < n; i++ {
|
|
auction := types.Auction{
|
|
Index: strconv.Itoa(i),
|
|
}
|
|
nullify.Fill(&auction)
|
|
state.AuctionList = append(state.AuctionList, auction)
|
|
}
|
|
buf, err := cfg.Codec.MarshalJSON(&state)
|
|
require.NoError(t, err)
|
|
cfg.GenesisState[types.ModuleName] = buf
|
|
return network.New(t, cfg), state.AuctionList
|
|
}
|
|
|
|
func TestShowAuction(t *testing.T) {
|
|
net, objs := networkWithAuctionObjects(t, 2)
|
|
|
|
ctx := net.Validators[0].ClientCtx
|
|
common := []string{
|
|
fmt.Sprintf("--%s=json", tmcli.OutputFlag),
|
|
}
|
|
for _, tc := range []struct {
|
|
desc string
|
|
idIndex string
|
|
|
|
args []string
|
|
err error
|
|
obj types.Auction
|
|
}{
|
|
{
|
|
desc: "found",
|
|
idIndex: objs[0].Index,
|
|
|
|
args: common,
|
|
obj: objs[0],
|
|
},
|
|
{
|
|
desc: "not found",
|
|
idIndex: strconv.Itoa(100000),
|
|
|
|
args: common,
|
|
err: status.Error(codes.NotFound, "not found"),
|
|
},
|
|
} {
|
|
t.Run(tc.desc, func(t *testing.T) {
|
|
args := []string{
|
|
tc.idIndex,
|
|
}
|
|
args = append(args, tc.args...)
|
|
out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdShowAuction(), args)
|
|
if tc.err != nil {
|
|
stat, ok := status.FromError(tc.err)
|
|
require.True(t, ok)
|
|
require.ErrorIs(t, stat.Err(), tc.err)
|
|
} else {
|
|
require.NoError(t, err)
|
|
var resp types.QueryGetAuctionResponse
|
|
require.NoError(t, net.Config.Codec.UnmarshalJSON(out.Bytes(), &resp))
|
|
require.NotNil(t, resp.Auction)
|
|
require.Equal(t,
|
|
nullify.Fill(&tc.obj),
|
|
nullify.Fill(&resp.Auction),
|
|
)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestListAuction(t *testing.T) {
|
|
net, objs := networkWithAuctionObjects(t, 5)
|
|
|
|
ctx := net.Validators[0].ClientCtx
|
|
request := func(next []byte, offset, limit uint64, total bool) []string {
|
|
args := []string{
|
|
fmt.Sprintf("--%s=json", tmcli.OutputFlag),
|
|
}
|
|
if next == nil {
|
|
args = append(args, fmt.Sprintf("--%s=%d", flags.FlagOffset, offset))
|
|
} else {
|
|
args = append(args, fmt.Sprintf("--%s=%s", flags.FlagPageKey, next))
|
|
}
|
|
args = append(args, fmt.Sprintf("--%s=%d", flags.FlagLimit, limit))
|
|
if total {
|
|
args = append(args, fmt.Sprintf("--%s", flags.FlagCountTotal))
|
|
}
|
|
return args
|
|
}
|
|
t.Run("ByOffset", func(t *testing.T) {
|
|
step := 2
|
|
for i := 0; i < len(objs); i += step {
|
|
args := request(nil, uint64(i), uint64(step), false)
|
|
out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdListAuction(), args)
|
|
require.NoError(t, err)
|
|
var resp types.QueryAllAuctionResponse
|
|
require.NoError(t, net.Config.Codec.UnmarshalJSON(out.Bytes(), &resp))
|
|
require.LessOrEqual(t, len(resp.Auction), step)
|
|
require.Subset(t,
|
|
nullify.Fill(objs),
|
|
nullify.Fill(resp.Auction),
|
|
)
|
|
}
|
|
})
|
|
t.Run("ByKey", func(t *testing.T) {
|
|
step := 2
|
|
var next []byte
|
|
for i := 0; i < len(objs); i += step {
|
|
args := request(next, 0, uint64(step), false)
|
|
out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdListAuction(), args)
|
|
require.NoError(t, err)
|
|
var resp types.QueryAllAuctionResponse
|
|
require.NoError(t, net.Config.Codec.UnmarshalJSON(out.Bytes(), &resp))
|
|
require.LessOrEqual(t, len(resp.Auction), step)
|
|
require.Subset(t,
|
|
nullify.Fill(objs),
|
|
nullify.Fill(resp.Auction),
|
|
)
|
|
next = resp.Pagination.NextKey
|
|
}
|
|
})
|
|
t.Run("Total", func(t *testing.T) {
|
|
args := request(nil, 0, uint64(len(objs)), true)
|
|
out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdListAuction(), args)
|
|
require.NoError(t, err)
|
|
var resp types.QueryAllAuctionResponse
|
|
require.NoError(t, net.Config.Codec.UnmarshalJSON(out.Bytes(), &resp))
|
|
require.NoError(t, err)
|
|
require.Equal(t, len(objs), int(resp.Pagination.Total))
|
|
require.ElementsMatch(t,
|
|
nullify.Fill(objs),
|
|
nullify.Fill(resp.Auction),
|
|
)
|
|
})
|
|
}
|