github.com/Finschia/finschia-sdk@v0.49.1/x/auth/keeper/keeper_test.go (about) 1 package keeper_test 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/require" 7 "github.com/stretchr/testify/suite" 8 9 "github.com/Finschia/finschia-sdk/baseapp" 10 "github.com/Finschia/finschia-sdk/simapp" 11 sdk "github.com/Finschia/finschia-sdk/types" 12 "github.com/Finschia/finschia-sdk/x/auth/keeper" 13 "github.com/Finschia/finschia-sdk/x/auth/types" 14 ) 15 16 const ( 17 holder = "holder" 18 multiPerm = "multiple permissions account" 19 randomPerm = "random permission" 20 ) 21 22 var ( 23 multiPermAcc = types.NewEmptyModuleAccount(multiPerm, types.Burner, types.Minter, types.Staking) 24 randomPermAcc = types.NewEmptyModuleAccount(randomPerm, "random") 25 ) 26 27 type KeeperTestSuite struct { 28 suite.Suite 29 30 app *simapp.SimApp 31 ctx sdk.Context 32 33 queryClient types.QueryClient 34 } 35 36 func (suite *KeeperTestSuite) SetupTest() { 37 suite.app, suite.ctx = createTestApp(true) 38 39 queryHelper := baseapp.NewQueryServerTestHelper(suite.ctx, suite.app.InterfaceRegistry()) 40 types.RegisterQueryServer(queryHelper, suite.app.AccountKeeper) 41 suite.queryClient = types.NewQueryClient(queryHelper) 42 } 43 44 func TestKeeperTestSuite(t *testing.T) { 45 suite.Run(t, new(KeeperTestSuite)) 46 } 47 48 func TestAccountMapperGetSet(t *testing.T) { 49 app, ctx := createTestApp(true) 50 addr := sdk.AccAddress([]byte("some---------address")) 51 52 // no account before its created 53 acc := app.AccountKeeper.GetAccount(ctx, addr) 54 require.Nil(t, acc) 55 56 // create account and check default values 57 acc = app.AccountKeeper.NewAccountWithAddress(ctx, addr) 58 require.NotNil(t, acc) 59 require.Equal(t, addr, acc.GetAddress()) 60 require.EqualValues(t, nil, acc.GetPubKey()) 61 require.EqualValues(t, 0, acc.GetSequence()) 62 63 // NewAccount doesn't call Set, so it's still nil 64 require.Nil(t, app.AccountKeeper.GetAccount(ctx, addr)) 65 66 // set some values on the account and save it 67 newSequence := uint64(20) 68 err := acc.SetSequence(newSequence) 69 require.NoError(t, err) 70 app.AccountKeeper.SetAccount(ctx, acc) 71 72 // check the new values 73 acc = app.AccountKeeper.GetAccount(ctx, addr) 74 require.NotNil(t, acc) 75 require.Equal(t, newSequence, acc.GetSequence()) 76 } 77 78 func TestAccountMapperRemoveAccount(t *testing.T) { 79 app, ctx := createTestApp(true) 80 addr1 := sdk.AccAddress([]byte("addr1---------------")) 81 addr2 := sdk.AccAddress([]byte("addr2---------------")) 82 83 // create accounts 84 acc1 := app.AccountKeeper.NewAccountWithAddress(ctx, addr1) 85 acc2 := app.AccountKeeper.NewAccountWithAddress(ctx, addr2) 86 87 accSeq1 := uint64(20) 88 accSeq2 := uint64(40) 89 90 err := acc1.SetSequence(accSeq1) 91 require.NoError(t, err) 92 err = acc2.SetSequence(accSeq2) 93 require.NoError(t, err) 94 app.AccountKeeper.SetAccount(ctx, acc1) 95 app.AccountKeeper.SetAccount(ctx, acc2) 96 97 acc1 = app.AccountKeeper.GetAccount(ctx, addr1) 98 require.NotNil(t, acc1) 99 require.Equal(t, accSeq1, acc1.GetSequence()) 100 101 // remove one account 102 app.AccountKeeper.RemoveAccount(ctx, acc1) 103 acc1 = app.AccountKeeper.GetAccount(ctx, addr1) 104 require.Nil(t, acc1) 105 106 acc2 = app.AccountKeeper.GetAccount(ctx, addr2) 107 require.NotNil(t, acc2) 108 require.Equal(t, accSeq2, acc2.GetSequence()) 109 } 110 111 func TestGetSetParams(t *testing.T) { 112 app, ctx := createTestApp(true) 113 params := types.DefaultParams() 114 115 app.AccountKeeper.SetParams(ctx, params) 116 117 actualParams := app.AccountKeeper.GetParams(ctx) 118 require.Equal(t, params, actualParams) 119 } 120 121 func TestSupply_ValidatePermissions(t *testing.T) { 122 app, _ := createTestApp(true) 123 124 // add module accounts to supply keeper 125 maccPerms := simapp.GetMaccPerms() 126 maccPerms[holder] = nil 127 maccPerms[types.Burner] = []string{types.Burner} 128 maccPerms[types.Minter] = []string{types.Minter} 129 maccPerms[multiPerm] = []string{types.Burner, types.Minter, types.Staking} 130 maccPerms[randomPerm] = []string{"random"} 131 132 cdc := simapp.MakeTestEncodingConfig().Marshaler 133 keeper := keeper.NewAccountKeeper( 134 cdc, app.GetKey(types.StoreKey), app.GetSubspace(types.ModuleName), 135 types.ProtoBaseAccount, maccPerms, 136 ) 137 138 err := keeper.ValidatePermissions(multiPermAcc) 139 require.NoError(t, err) 140 141 err = keeper.ValidatePermissions(randomPermAcc) 142 require.NoError(t, err) 143 144 // unregistered permissions 145 otherAcc := types.NewEmptyModuleAccount("other", "other") 146 err = app.AccountKeeper.ValidatePermissions(otherAcc) 147 require.Error(t, err) 148 } 149 150 func TestQueryNextAccountNumber(t *testing.T) { 151 app, ctx := createTestApp(true) 152 addr := sdk.AccAddress([]byte("some---------address")) 153 154 // check next account number 155 accNum := app.AccountKeeper.QueryNextAccountNumber(ctx) 156 require.Equal(t, uint64(0), accNum) 157 158 acc := app.AccountKeeper.GetAccount(ctx, addr) 159 require.Nil(t, acc) 160 161 // create account and check default value 162 acc = app.AccountKeeper.NewAccountWithAddress(ctx, addr) 163 require.NotNil(t, acc) 164 require.Equal(t, addr, acc.GetAddress()) 165 require.EqualValues(t, nil, acc.GetPubKey()) 166 require.EqualValues(t, 0, acc.GetSequence()) 167 168 // check next account number 169 accNum = app.AccountKeeper.QueryNextAccountNumber(ctx) 170 require.Equal(t, uint64(1), accNum) 171 }