github.com/Finschia/finschia-sdk@v0.49.1/x/feegrant/keeper/genesis_test.go (about) 1 package keeper_test 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/suite" 7 tmproto "github.com/tendermint/tendermint/proto/tendermint/types" 8 9 codectypes "github.com/Finschia/finschia-sdk/codec/types" 10 "github.com/Finschia/finschia-sdk/crypto/keys/secp256k1" 11 "github.com/Finschia/finschia-sdk/simapp" 12 "github.com/Finschia/finschia-sdk/testutil/testdata" 13 sdk "github.com/Finschia/finschia-sdk/types" 14 "github.com/Finschia/finschia-sdk/x/feegrant" 15 "github.com/Finschia/finschia-sdk/x/feegrant/keeper" 16 ) 17 18 type GenesisTestSuite struct { 19 suite.Suite 20 ctx sdk.Context 21 keeper keeper.Keeper 22 } 23 24 func (suite *GenesisTestSuite) SetupTest() { 25 checkTx := false 26 app := simapp.Setup(checkTx) 27 suite.ctx = app.BaseApp.NewContext(checkTx, tmproto.Header{Height: 1}) 28 suite.keeper = app.FeeGrantKeeper 29 } 30 31 var ( 32 granteePub = secp256k1.GenPrivKey().PubKey() 33 granterPub = secp256k1.GenPrivKey().PubKey() 34 granteeAddr = sdk.AccAddress(granteePub.Address()) 35 granterAddr = sdk.AccAddress(granterPub.Address()) 36 ) 37 38 func (suite *GenesisTestSuite) TestImportExportGenesis() { 39 coins := sdk.NewCoins(sdk.NewCoin("foo", sdk.NewInt(1_000))) 40 now := suite.ctx.BlockHeader().Time 41 oneYear := now.AddDate(1, 0, 0) 42 msgSrvr := keeper.NewMsgServerImpl(suite.keeper) 43 44 allowance := &feegrant.BasicAllowance{SpendLimit: coins, Expiration: &oneYear} 45 err := suite.keeper.GrantAllowance(suite.ctx, granterAddr, granteeAddr, allowance) 46 suite.Require().NoError(err) 47 48 genesis, err := suite.keeper.ExportGenesis(suite.ctx) 49 suite.Require().NoError(err) 50 // revoke fee allowance 51 _, err = msgSrvr.RevokeAllowance(sdk.WrapSDKContext(suite.ctx), &feegrant.MsgRevokeAllowance{ 52 Granter: granterAddr.String(), 53 Grantee: granteeAddr.String(), 54 }) 55 suite.Require().NoError(err) 56 err = suite.keeper.InitGenesis(suite.ctx, genesis) 57 suite.Require().NoError(err) 58 59 newGenesis, err := suite.keeper.ExportGenesis(suite.ctx) 60 suite.Require().NoError(err) 61 suite.Require().Equal(genesis, newGenesis) 62 } 63 64 func (suite *GenesisTestSuite) TestInitGenesis() { 65 any, err := codectypes.NewAnyWithValue(&testdata.Dog{}) 66 suite.Require().NoError(err) 67 68 testCases := []struct { 69 name string 70 feeAllowances []feegrant.Grant 71 }{ 72 { 73 "invalid granter", 74 []feegrant.Grant{ 75 { 76 Granter: "invalid granter", 77 Grantee: granteeAddr.String(), 78 }, 79 }, 80 }, 81 { 82 "invalid grantee", 83 []feegrant.Grant{ 84 { 85 Granter: granterAddr.String(), 86 Grantee: "invalid grantee", 87 }, 88 }, 89 }, 90 { 91 "invalid allowance", 92 []feegrant.Grant{ 93 { 94 Granter: granterAddr.String(), 95 Grantee: granteeAddr.String(), 96 Allowance: any, 97 }, 98 }, 99 }, 100 } 101 102 for _, tc := range testCases { 103 suite.Run(tc.name, func() { 104 err := suite.keeper.InitGenesis(suite.ctx, &feegrant.GenesisState{Allowances: tc.feeAllowances}) 105 suite.Require().Error(err) 106 }) 107 } 108 } 109 110 func TestGenesisTestSuite(t *testing.T) { 111 suite.Run(t, new(GenesisTestSuite)) 112 }