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