github.com/Finschia/finschia-sdk@v0.49.1/x/feegrant/grant_test.go (about) 1 package feegrant_test 2 3 import ( 4 "testing" 5 "time" 6 7 "github.com/stretchr/testify/require" 8 tmproto "github.com/tendermint/tendermint/proto/tendermint/types" 9 10 "github.com/Finschia/finschia-sdk/simapp" 11 sdk "github.com/Finschia/finschia-sdk/types" 12 "github.com/Finschia/finschia-sdk/x/feegrant" 13 ) 14 15 func TestGrant(t *testing.T) { 16 app := simapp.Setup(false) 17 addr, err := sdk.AccAddressFromBech32("link1qyqszqgpqyqszqgpqyqszqgpqyqszqgp8apuk5") 18 require.NoError(t, err) 19 addr2, err := sdk.AccAddressFromBech32("link1ghekyjucln7y67ntx7cf27m9dpuxxemnqk82wt") 20 require.NoError(t, err) 21 atom := sdk.NewCoins(sdk.NewInt64Coin("atom", 555)) 22 ctx := app.BaseApp.NewContext(false, tmproto.Header{ 23 Time: time.Now(), 24 }) 25 now := ctx.BlockTime() 26 oneYear := now.AddDate(1, 0, 0) 27 28 zeroAtoms := sdk.NewCoins(sdk.NewInt64Coin("atom", 0)) 29 cdc := app.AppCodec() 30 31 cases := map[string]struct { 32 granter sdk.AccAddress 33 grantee sdk.AccAddress 34 limit sdk.Coins 35 expires time.Time 36 valid bool 37 }{ 38 "good": { 39 granter: addr2, 40 grantee: addr, 41 limit: atom, 42 expires: oneYear, 43 valid: true, 44 }, 45 "no grantee": { 46 granter: addr2, 47 grantee: nil, 48 limit: atom, 49 expires: oneYear, 50 valid: false, 51 }, 52 "no granter": { 53 granter: nil, 54 grantee: addr, 55 limit: atom, 56 expires: oneYear, 57 valid: false, 58 }, 59 "self-grant": { 60 granter: addr2, 61 grantee: addr2, 62 limit: atom, 63 expires: oneYear, 64 valid: false, 65 }, 66 "zero allowance": { 67 granter: addr2, 68 grantee: addr, 69 limit: zeroAtoms, 70 expires: oneYear, 71 valid: false, 72 }, 73 } 74 75 for name, tc := range cases { 76 t.Run(name, func(t *testing.T) { 77 grant, err := feegrant.NewGrant(tc.granter, tc.grantee, &feegrant.BasicAllowance{ 78 SpendLimit: tc.limit, 79 Expiration: &tc.expires, 80 }) 81 require.NoError(t, err) 82 err = grant.ValidateBasic() 83 84 if !tc.valid { 85 require.Error(t, err) 86 return 87 } 88 require.NoError(t, err) 89 90 // if it is valid, let's try to serialize, deserialize, and make sure it matches 91 bz, err := cdc.Marshal(&grant) 92 require.NoError(t, err) 93 var loaded feegrant.Grant 94 err = cdc.Unmarshal(bz, &loaded) 95 require.NoError(t, err) 96 97 err = loaded.ValidateBasic() 98 require.NoError(t, err) 99 100 require.Equal(t, grant, loaded) 101 }) 102 } 103 }