cosmos-sdk/x/evidence/keeper/grpc_query_test.go

144 lines
3.0 KiB
Go

package keeper_test
import (
"fmt"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/types/query"
"github.com/cosmos/cosmos-sdk/x/evidence/exported"
"github.com/cosmos/cosmos-sdk/x/evidence/types"
tmbytes "github.com/tendermint/tendermint/libs/bytes"
)
func (suite *KeeperTestSuite) TestQueryEvidence() {
var (
req *types.QueryEvidenceRequest
evidence []exported.Evidence
)
testCases := []struct {
msg string
malleate func()
expPass bool
posttests func(res *types.QueryEvidenceResponse)
}{
{
"empty request",
func() {
req = &types.QueryEvidenceRequest{}
},
false,
func(res *types.QueryEvidenceResponse) {},
},
{
"invalid request with empty evidence hash",
func() {
req = &types.QueryEvidenceRequest{EvidenceHash: tmbytes.HexBytes{}}
},
false,
func(res *types.QueryEvidenceResponse) {},
},
{
"success",
func() {
numEvidence := 100
evidence = suite.populateEvidence(suite.ctx, numEvidence)
req = types.NewQueryEvidenceRequest(evidence[0].Hash())
},
true,
func(res *types.QueryEvidenceResponse) {
var evi exported.Evidence
err := suite.app.InterfaceRegistry().UnpackAny(res.Evidence, &evi)
suite.Require().NoError(err)
suite.Require().NotNil(evi)
suite.Require().Equal(evi, evidence[0])
},
},
}
for _, tc := range testCases {
suite.Run(fmt.Sprintf("Case %s", tc.msg), func() {
suite.SetupTest()
tc.malleate()
ctx := sdk.WrapSDKContext(suite.ctx)
res, err := suite.queryClient.Evidence(ctx, req)
if tc.expPass {
suite.Require().NoError(err)
suite.Require().NotNil(res)
} else {
suite.Require().Error(err)
suite.Require().Nil(res)
}
tc.posttests(res)
})
}
}
func (suite *KeeperTestSuite) TestQueryAllEvidence() {
var (
req *types.QueryAllEvidenceRequest
)
testCases := []struct {
msg string
malleate func()
expPass bool
posttests func(res *types.QueryAllEvidenceResponse)
}{
{
"success without evidence",
func() {
req = &types.QueryAllEvidenceRequest{}
},
true,
func(res *types.QueryAllEvidenceResponse) {
suite.Require().Empty(res.Evidence)
},
},
{
"success",
func() {
numEvidence := 100
_ = suite.populateEvidence(suite.ctx, numEvidence)
pageReq := &query.PageRequest{
Key: nil,
Limit: 50,
CountTotal: false,
}
req = types.NewQueryAllEvidenceRequest(pageReq)
},
true,
func(res *types.QueryAllEvidenceResponse) {
suite.Equal(len(res.Evidence), 50)
suite.NotNil(res.Res.NextKey)
},
},
}
for _, tc := range testCases {
suite.Run(fmt.Sprintf("Case %s", tc.msg), func() {
suite.SetupTest()
tc.malleate()
ctx := sdk.WrapSDKContext(suite.ctx)
res, err := suite.queryClient.AllEvidence(ctx, req)
if tc.expPass {
suite.Require().NoError(err)
suite.Require().NotNil(res)
} else {
suite.Require().Error(err)
suite.Require().Nil(res)
}
tc.posttests(res)
})
}
}