cosmos-sdk/x/evidence/keeper/grpc_query_test.go
2023-05-04 17:23:40 +00:00

159 lines
3.5 KiB
Go

package keeper_test
import (
"encoding/hex"
"fmt"
"strings"
"cosmossdk.io/x/evidence/exported"
"cosmossdk.io/x/evidence/types"
"github.com/cosmos/cosmos-sdk/types/query"
)
func (suite *KeeperTestSuite) TestQueryEvidence() {
var (
req *types.QueryEvidenceRequest
evidence []exported.Evidence
)
testCases := []struct {
msg string
malleate func()
expPass bool
expErrMsg string
posttests func(res *types.QueryEvidenceResponse)
}{
{
"invalid request with empty evidence hash",
func() {
req = &types.QueryEvidenceRequest{Hash: ""}
},
false,
"invalid request; hash is empty",
func(res *types.QueryEvidenceResponse) {},
},
{
"evidence not found",
func() {
numEvidence := 1
evidence = suite.populateEvidence(suite.ctx, numEvidence)
evidenceHash := strings.ToUpper(hex.EncodeToString(evidence[0].Hash()))
reqHash := strings.Repeat("a", len(evidenceHash))
req = types.NewQueryEvidenceRequest(reqHash)
},
false,
"not found",
func(res *types.QueryEvidenceResponse) {
},
},
{
"non-existent evidence",
func() {
reqHash := "DF0C23E8634E480F84B9D5674A7CDC9816466DEC28A3358F73260F68D28D7660"
req = types.NewQueryEvidenceRequest(reqHash)
},
false,
"evidence DF0C23E8634E480F84B9D5674A7CDC9816466DEC28A3358F73260F68D28D7660 not found",
func(res *types.QueryEvidenceResponse) {
},
},
{
"success",
func() {
numEvidence := 100
evidence = suite.populateEvidence(suite.ctx, numEvidence)
req = types.NewQueryEvidenceRequest(strings.ToUpper(hex.EncodeToString(evidence[0].Hash())))
},
true,
"",
func(res *types.QueryEvidenceResponse) {
var evi exported.Evidence
err := suite.encCfg.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()
res, err := suite.queryClient.Evidence(suite.ctx, req)
if tc.expPass {
suite.Require().NoError(err)
suite.Require().NotNil(res)
} else {
suite.Require().Error(err)
suite.Require().Contains(err.Error(), tc.expErrMsg)
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.Pagination.NextKey)
},
},
}
for _, tc := range testCases {
suite.Run(fmt.Sprintf("Case %s", tc.msg), func() {
suite.SetupTest()
tc.malleate()
res, err := suite.queryClient.AllEvidence(suite.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)
})
}
}