diff --git a/CHANGELOG.md b/CHANGELOG.md index d74ae50ec1..ba8674924b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ * [\#78](https://github.com/Finschia/wasmd/pull/78) add the check for TestMigrateContract * [\#69](https://github.com/Finschia/wasmd/pull/69) refactor: refactor test cases for Params * [\#71](https://github.com/Finschia/wasmd/pull/71) add test cases in ContractsByCode +* [\#82](https://github.com/Finschia/wasmd/pull/82) add test case to QueryInactiveContracts ### Bug Fixes * [\#62](https://github.com/Finschia/wasmd/pull/62) fill ContractHistory querier result's Updated field diff --git a/x/wasmplus/keeper/querier_test.go b/x/wasmplus/keeper/querier_test.go index 7d445a0bf3..1574c0c7e1 100644 --- a/x/wasmplus/keeper/querier_test.go +++ b/x/wasmplus/keeper/querier_test.go @@ -1,6 +1,9 @@ package keeper import ( + "encoding/base64" + "fmt" + "github.com/Finschia/finschia-sdk/types/query" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "google.golang.org/grpc/codes" @@ -20,20 +23,85 @@ func TestQueryInactiveContracts(t *testing.T) { ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 1) example2 := InstantiateHackatomExampleContract(t, ctx, keepers) ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 1) + example3 := InstantiateHackatomExampleContract(t, ctx, keepers) + ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 1) + + // Address order of contracts is ascending order of byte array whose address is decoded by bech32 + expAddrs := GenerateSortedBech32Address(example1.Contract.Bytes(), example2.Contract.Bytes(), example3.Contract.Bytes()) // set inactive err := keeper.deactivateContract(ctx, example1.Contract) require.NoError(t, err) err = keeper.deactivateContract(ctx, example2.Contract) require.NoError(t, err) + err = keeper.deactivateContract(ctx, example3.Contract) + require.NoError(t, err) q := Querier(keeper) - rq := types.QueryInactiveContractsRequest{} - res, err := q.InactiveContracts(sdk.WrapSDKContext(ctx), &rq) - require.NoError(t, err) - expect := []string{example1.Contract.String(), example2.Contract.String()} - for _, exp := range expect { - assert.Contains(t, res.Addresses, exp) + specs := map[string]struct { + srcQuery *types.QueryInactiveContractsRequest + expAddrs []string + expPaginationTotal uint64 + expErr error + }{ + "req nil": { + srcQuery: nil, + expErr: status.Error(codes.InvalidArgument, "empty request"), + }, + "query all": { + srcQuery: &types.QueryInactiveContractsRequest{}, + expAddrs: expAddrs, + expPaginationTotal: 3, + }, + "with pagination offset": { + srcQuery: &types.QueryInactiveContractsRequest{ + Pagination: &query.PageRequest{ + Offset: 1, + }, + }, + expAddrs: []string{expAddrs[1], expAddrs[2]}, + expPaginationTotal: 3, + }, + "with invalid pagination key": { + srcQuery: &types.QueryInactiveContractsRequest{ + Pagination: &query.PageRequest{ + Offset: 1, + Key: []byte("test"), + }, + }, + expErr: fmt.Errorf("invalid request, either offset or key is expected, got both"), + }, + "with pagination limit": { + srcQuery: &types.QueryInactiveContractsRequest{ + Pagination: &query.PageRequest{ + Limit: 1, + }, + }, + expAddrs: []string{expAddrs[0]}, + expPaginationTotal: 0, + }, + "with pagination next key": { + srcQuery: &types.QueryInactiveContractsRequest{ + Pagination: &query.PageRequest{ + Key: fromBase64("reSl9YA6Q5g1xjY5Wo1kje5XsvyQ2Y3Bf6iHFZtpY4s="), + }, + }, + expAddrs: []string{expAddrs[1], expAddrs[2]}, + expPaginationTotal: 0, + }, + } + + for msg, spec := range specs { + t.Run(msg, func(t *testing.T) { + got, err := q.InactiveContracts(sdk.WrapSDKContext(ctx), spec.srcQuery) + if spec.expErr != nil { + require.Equal(t, spec.expErr, err, "but got %+v", err) + return + } + require.NoError(t, err) + assert.Equal(t, spec.expAddrs, got.Addresses) + assert.EqualValues(t, spec.expPaginationTotal, got.Pagination.Total) + }) } } @@ -88,3 +156,11 @@ func TestQueryInactiveContract(t *testing.T) { }) } } + +func fromBase64(s string) []byte { + r, err := base64.StdEncoding.DecodeString(s) + if err != nil { + panic(err) + } + return r +} diff --git a/x/wasmplus/keeper/test_common.go b/x/wasmplus/keeper/test_common.go index 5e9a5d44a2..875db8485c 100644 --- a/x/wasmplus/keeper/test_common.go +++ b/x/wasmplus/keeper/test_common.go @@ -6,6 +6,7 @@ import ( "encoding/json" "fmt" "os" + "sort" "testing" "time" @@ -688,3 +689,16 @@ func keyPubAddr() (crypto.PrivKey, crypto.PubKey, sdk.AccAddress) { addr := sdk.AccAddress(pub.Address()) return key, pub, addr } + +func GenerateSortedBech32Address(addrs ...[]byte) []string { + sort.Slice(addrs, func(i, j int) bool { + return string(addrs[i]) < string(addrs[j]) + }) + + expAddrs := make([]string, len(addrs)) + for i, b := range addrs { + expAddrs[i] = sdk.AccAddress(b).String() + } + + return expAddrs +}