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  }