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

244 lines
5.6 KiB
Go

package keeper_test
import (
"cosmossdk.io/x/feegrant"
sdk "github.com/cosmos/cosmos-sdk/types"
)
const (
invalidGrantee = "invalid-grantee"
invalidGranter = "invalid-granter"
)
func (suite *KeeperTestSuite) TestFeeAllowance() {
testCases := []struct {
name string
req *feegrant.QueryAllowanceRequest
expectErr bool
preRun func()
postRun func(_ *feegrant.QueryAllowanceResponse)
}{
{
"nil request",
nil,
true,
func() {},
func(*feegrant.QueryAllowanceResponse) {},
},
{
"fail: invalid granter",
&feegrant.QueryAllowanceRequest{
Granter: invalidGranter,
Grantee: suite.encodedAddrs[0],
},
true,
func() {},
func(*feegrant.QueryAllowanceResponse) {},
},
{
"fail: invalid grantee",
&feegrant.QueryAllowanceRequest{
Granter: suite.encodedAddrs[0],
Grantee: invalidGrantee,
},
true,
func() {},
func(*feegrant.QueryAllowanceResponse) {},
},
{
"fail: no grants",
&feegrant.QueryAllowanceRequest{
Granter: suite.encodedAddrs[0],
Grantee: suite.encodedAddrs[1],
},
true,
func() {},
func(*feegrant.QueryAllowanceResponse) {},
},
{
"non existed grant",
&feegrant.QueryAllowanceRequest{
Granter: invalidGranter,
Grantee: invalidGrantee,
},
true,
func() {},
func(*feegrant.QueryAllowanceResponse) {},
},
{
"valid query: expect single grant",
&feegrant.QueryAllowanceRequest{
Granter: suite.encodedAddrs[0],
Grantee: suite.encodedAddrs[1],
},
false,
func() {
suite.grantFeeAllowance(suite.addrs[0], suite.addrs[1])
},
func(response *feegrant.QueryAllowanceResponse) {
suite.Require().Equal(response.Allowance.Granter, suite.encodedAddrs[0])
suite.Require().Equal(response.Allowance.Grantee, suite.encodedAddrs[1])
},
},
}
for _, tc := range testCases {
suite.Run(tc.name, func() {
tc.preRun()
resp, err := suite.feegrantKeeper.Allowance(suite.ctx, tc.req)
if tc.expectErr {
suite.Require().Error(err)
} else {
suite.Require().NoError(err)
tc.postRun(resp)
}
})
}
}
func (suite *KeeperTestSuite) TestFeeAllowances() {
testCases := []struct {
name string
req *feegrant.QueryAllowancesRequest
expectErr bool
preRun func()
postRun func(_ *feegrant.QueryAllowancesResponse)
}{
{
"nil request",
nil,
true,
func() {},
func(*feegrant.QueryAllowancesResponse) {},
},
{
"fail: invalid grantee",
&feegrant.QueryAllowancesRequest{
Grantee: invalidGrantee,
},
true,
func() {},
func(*feegrant.QueryAllowancesResponse) {},
},
{
"no grants",
&feegrant.QueryAllowancesRequest{
Grantee: suite.encodedAddrs[1],
},
false,
func() {},
func(resp *feegrant.QueryAllowancesResponse) {
suite.Require().Equal(len(resp.Allowances), 0)
},
},
{
"valid query: expect single grant",
&feegrant.QueryAllowancesRequest{
Grantee: suite.encodedAddrs[1],
},
false,
func() {
suite.grantFeeAllowance(suite.addrs[0], suite.addrs[1])
},
func(resp *feegrant.QueryAllowancesResponse) {
suite.Require().Equal(len(resp.Allowances), 1)
suite.Require().Equal(resp.Allowances[0].Granter, suite.encodedAddrs[0])
suite.Require().Equal(resp.Allowances[0].Grantee, suite.encodedAddrs[1])
},
},
}
for _, tc := range testCases {
suite.Run(tc.name, func() {
tc.preRun()
resp, err := suite.feegrantKeeper.Allowances(suite.ctx, tc.req)
if tc.expectErr {
suite.Require().Error(err)
} else {
suite.Require().NoError(err)
tc.postRun(resp)
}
})
}
}
func (suite *KeeperTestSuite) TestFeeAllowancesByGranter() {
testCases := []struct {
name string
req *feegrant.QueryAllowancesByGranterRequest
expectErr bool
preRun func()
postRun func(_ *feegrant.QueryAllowancesByGranterResponse)
}{
{
"nil request",
nil,
true,
func() {},
func(*feegrant.QueryAllowancesByGranterResponse) {},
},
{
"fail: invalid grantee",
&feegrant.QueryAllowancesByGranterRequest{
Granter: invalidGrantee,
},
true,
func() {},
func(*feegrant.QueryAllowancesByGranterResponse) {},
},
{
"no grants",
&feegrant.QueryAllowancesByGranterRequest{
Granter: suite.encodedAddrs[0],
},
false,
func() {},
func(resp *feegrant.QueryAllowancesByGranterResponse) {
suite.Require().Equal(len(resp.Allowances), 0)
},
},
{
"valid query: expect single grant",
&feegrant.QueryAllowancesByGranterRequest{
Granter: suite.encodedAddrs[0],
},
false,
func() {
suite.grantFeeAllowance(suite.addrs[0], suite.addrs[1])
// adding this allowance to check whether the pagination working fine.
suite.grantFeeAllowance(suite.addrs[1], suite.addrs[2])
},
func(resp *feegrant.QueryAllowancesByGranterResponse) {
suite.Require().Equal(len(resp.Allowances), 1)
suite.Require().Equal(resp.Allowances[0].Granter, suite.encodedAddrs[0])
suite.Require().Equal(resp.Allowances[0].Grantee, suite.encodedAddrs[1])
suite.Require().Equal(resp.Pagination.Total, uint64(1))
},
},
}
for _, tc := range testCases {
suite.Run(tc.name, func() {
tc.preRun()
resp, err := suite.feegrantKeeper.AllowancesByGranter(suite.ctx, tc.req)
if tc.expectErr {
suite.Require().Error(err)
} else {
suite.Require().NoError(err)
tc.postRun(resp)
}
})
}
}
func (suite *KeeperTestSuite) grantFeeAllowance(granter, grantee sdk.AccAddress) {
exp := suite.ctx.HeaderInfo().Time.AddDate(1, 0, 0)
err := suite.feegrantKeeper.GrantAllowance(suite.ctx, granter, grantee, &feegrant.BasicAllowance{
SpendLimit: sdk.NewCoins(sdk.NewInt64Coin("atom", 555)),
Expiration: &exp,
})
suite.Require().NoError(err)
}