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  }