github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/token/test_common.go (about)

     1  package token
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/codec"
     7  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/store"
     8  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/store/mpt"
     9  	sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types"
    10  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/auth"
    11  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/bank"
    12  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/supply"
    13  	abci "github.com/fibonacci-chain/fbc/libs/tendermint/abci/types"
    14  	"github.com/fibonacci-chain/fbc/libs/tendermint/libs/log"
    15  	dbm "github.com/fibonacci-chain/fbc/libs/tm-db"
    16  	"github.com/fibonacci-chain/fbc/x/params"
    17  	"github.com/fibonacci-chain/fbc/x/token/types"
    18  	"github.com/stretchr/testify/require"
    19  )
    20  
    21  // CreateParam create fbchainparm for test
    22  func CreateParam(t *testing.T, isCheckTx bool) (sdk.Context, Keeper, *sdk.KVStoreKey, []byte) {
    23  	keyAcc := sdk.NewKVStoreKey(auth.StoreKey)
    24  	keyMpt := sdk.NewKVStoreKey(mpt.StoreKey)
    25  	keyParams := sdk.NewKVStoreKey(params.StoreKey)
    26  	tkeyParams := sdk.NewTransientStoreKey(params.TStoreKey)
    27  	keySupply := sdk.NewKVStoreKey(supply.StoreKey)
    28  
    29  	keyToken := sdk.NewKVStoreKey("token")
    30  	keyLock := sdk.NewKVStoreKey("lock")
    31  
    32  	db := dbm.NewMemDB()
    33  	ms := store.NewCommitMultiStore(db)
    34  	ms.MountStoreWithDB(keyAcc, sdk.StoreTypeIAVL, db)
    35  	ms.MountStoreWithDB(keyMpt, sdk.StoreTypeMPT, db)
    36  	ms.MountStoreWithDB(keyParams, sdk.StoreTypeIAVL, db)
    37  	ms.MountStoreWithDB(tkeyParams, sdk.StoreTypeTransient, db)
    38  	ms.MountStoreWithDB(keyToken, sdk.StoreTypeIAVL, db)
    39  	ms.MountStoreWithDB(keyLock, sdk.StoreTypeIAVL, db)
    40  	ms.MountStoreWithDB(keySupply, sdk.StoreTypeIAVL, db)
    41  
    42  	err := ms.LoadLatestVersion()
    43  	require.Nil(t, err)
    44  
    45  	ctx := sdk.NewContext(ms, abci.Header{ChainID: "foochainid"}, isCheckTx, nil)
    46  
    47  	cdc := codec.New()
    48  	RegisterCodec(cdc)
    49  	codec.RegisterCrypto(cdc)
    50  
    51  	pk := params.NewKeeper(cdc, keyParams, tkeyParams, log.NewNopLogger())
    52  
    53  	accountKeeper := auth.NewAccountKeeper(
    54  		cdc,    // amino codec
    55  		keyAcc, // target store
    56  		keyMpt,
    57  		pk.Subspace(auth.DefaultParamspace),
    58  		auth.ProtoBaseAccount, // prototype
    59  	)
    60  	blacklistedAddrs := make(map[string]bool)
    61  
    62  	bk := bank.NewBaseKeeper(
    63  		accountKeeper,
    64  		pk.Subspace(bank.DefaultParamspace),
    65  		blacklistedAddrs,
    66  	)
    67  	maccPerms := map[string][]string{
    68  		auth.FeeCollectorName: nil,
    69  		types.ModuleName:      nil,
    70  	}
    71  	supplyKeeper := supply.NewKeeper(cdc, keySupply, accountKeeper, bank.NewBankKeeperAdapter(bk), maccPerms)
    72  	tk := NewKeeper(bk,
    73  		pk.Subspace(DefaultParamspace),
    74  		auth.FeeCollectorName,
    75  		supplyKeeper,
    76  		keyToken,
    77  		keyLock,
    78  		cdc,
    79  		true, accountKeeper)
    80  	tk.SetParams(ctx, types.DefaultParams())
    81  
    82  	return ctx, tk, keyParams, []byte("testToken")
    83  }
    84  
    85  func NewTestToken(t *testing.T, ctx sdk.Context, keeper Keeper, bankKeeper bank.Keeper, tokenName string, addrList []sdk.AccAddress) {
    86  	require.NotEqual(t, 0, len(addrList))
    87  	tokenObject := InitTestTokenWithOwner(tokenName, addrList[0])
    88  	keeper.NewToken(ctx, tokenObject)
    89  
    90  	initCoins := sdk.NewCoins(sdk.NewCoin(tokenName, sdk.NewInt(100000)))
    91  	for _, addr := range addrList {
    92  		_, err := bankKeeper.AddCoins(ctx, addr, initCoins)
    93  		if err != nil {
    94  			panic(err)
    95  		}
    96  	}
    97  }
    98  
    99  func InitTestToken(name string) types.Token {
   100  	return InitTestTokenWithOwner(name, supply.NewModuleAddress(ModuleName))
   101  }
   102  
   103  func InitTestTokenWithOwner(name string, owner sdk.AccAddress) types.Token {
   104  	return types.Token{
   105  		Description:         name,
   106  		Symbol:              name,
   107  		OriginalSymbol:      name,
   108  		WholeName:           name,
   109  		OriginalTotalSupply: sdk.NewDec(0),
   110  		Owner:               owner,
   111  		Type:                1,
   112  		Mintable:            true,
   113  	}
   114  }