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

     1  package dex
     2  
     3  import (
     4  	"fmt"
     5  	"time"
     6  
     7  	sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types"
     8  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/mock"
     9  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/supply"
    10  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/supply/exported"
    11  	abci "github.com/fibonacci-chain/fbc/libs/tendermint/abci/types"
    12  	"github.com/fibonacci-chain/fbc/x/common"
    13  	ordertypes "github.com/fibonacci-chain/fbc/x/order/types"
    14  )
    15  
    16  type mockTokenKeeper struct {
    17  	exist bool
    18  }
    19  
    20  // TokenExist return true if token exist
    21  func (k *mockTokenKeeper) TokenExist(ctx sdk.Context, symbol string) bool {
    22  	return k.exist
    23  }
    24  
    25  // nolint
    26  func newMockTokenKeeper() *mockTokenKeeper {
    27  	return &mockTokenKeeper{
    28  		exist: true,
    29  	}
    30  }
    31  
    32  type mockSupplyKeeper struct {
    33  	behaveEvil    bool
    34  	moduleAccount exported.ModuleAccountI
    35  }
    36  
    37  func (k *mockSupplyKeeper) behave() sdk.Error {
    38  	if k.behaveEvil {
    39  		return sdk.ErrInternal("raise an mock exception here")
    40  	}
    41  	return nil
    42  }
    43  
    44  // SendCoinsFromAccountToModule mocks SendCoinsFromAccountToModule of supply.Keeper
    45  func (k *mockSupplyKeeper) SendCoinsFromAccountToModule(
    46  	ctx sdk.Context, senderAddr sdk.AccAddress, recipientModule string, amt sdk.Coins) sdk.Error {
    47  	return k.behave()
    48  }
    49  
    50  // SendCoinsFromModuleToAccount mocks SendCoinsFromModuleToAccount of supply.Keeper
    51  func (k *mockSupplyKeeper) SendCoinsFromModuleToAccount(
    52  	ctx sdk.Context, senderModule string, recipientAddr sdk.AccAddress, amt sdk.Coins) sdk.Error {
    53  	return k.behave()
    54  }
    55  
    56  // GetModuleAccount returns the ModuleAccount
    57  func (k *mockSupplyKeeper) GetModuleAccount(
    58  	ctx sdk.Context, moduleName string) exported.ModuleAccountI {
    59  	return k.moduleAccount
    60  }
    61  
    62  // GetModuleAddress returns address of the ModuleAccount
    63  func (k *mockSupplyKeeper) GetModuleAddress(moduleName string) sdk.AccAddress {
    64  	return k.moduleAccount.GetAddress()
    65  }
    66  
    67  // MintCoins mocks MintCoins of supply.Keeper
    68  func (k *mockSupplyKeeper) MintCoins(ctx sdk.Context, moduleName string, amt sdk.Coins) sdk.Error {
    69  	return k.behave()
    70  }
    71  
    72  // nolint
    73  func newMockSupplyKeeper() *mockSupplyKeeper {
    74  	return &mockSupplyKeeper{
    75  		behaveEvil:    true,
    76  		moduleAccount: supply.NewEmptyModuleAccount(ModuleName),
    77  	}
    78  }
    79  
    80  type mockDexKeeper struct {
    81  	*Keeper
    82  	getFakeTokenPair      bool
    83  	failToDeleteTokenPair bool
    84  	failToWithdraw        bool
    85  	failToDeposit         bool
    86  	failToMarshal         bool
    87  }
    88  
    89  // LockTokenPair mocks LockTokenPair of dex.Keeper
    90  func (k *mockDexKeeper) LockTokenPair(ctx sdk.Context, product string, lock *ordertypes.ProductLock) {
    91  	k.Keeper.LockTokenPair(ctx, product, lock)
    92  }
    93  
    94  // GetLockedProductsCopy returns map with product locked
    95  func (k *mockDexKeeper) GetLockedProductsCopy(ctx sdk.Context) *ordertypes.ProductLockMap {
    96  	return ordertypes.NewProductLockMap()
    97  }
    98  
    99  // LockTokenPair mocks LockTokenPair of dex.Keeper
   100  func (k *mockDexKeeper) GetTokenPair(ctx sdk.Context, product string) *TokenPair {
   101  	if k.getFakeTokenPair {
   102  		return GetBuiltInTokenPair()
   103  	}
   104  	return k.Keeper.GetTokenPair(ctx, product)
   105  }
   106  
   107  // Deposit mocks Deposit of dex.Keeper
   108  func (k *mockDexKeeper) Deposit(ctx sdk.Context, product string, from sdk.AccAddress, amount sdk.SysCoin) sdk.Error {
   109  	if k.failToDeposit {
   110  		return sdk.ErrInternal("raise an mock exception here")
   111  	}
   112  	return nil
   113  }
   114  
   115  // Withdraw mocks Withdraw of dex.Keeper
   116  func (k *mockDexKeeper) Withdraw(ctx sdk.Context, product string, from sdk.AccAddress, amount sdk.SysCoin) sdk.Error {
   117  	if k.failToWithdraw {
   118  		return sdk.ErrInternal("raise an mock exception here")
   119  	}
   120  	return nil
   121  }
   122  
   123  // DeleteTokenPairByName mocks DeleteTokenPairByName of dex.Keeper
   124  func (k *mockDexKeeper) DeleteTokenPairByName(ctx sdk.Context, owner sdk.AccAddress, tokenPairName string) {
   125  }
   126  
   127  func newMockDexKeeper(baseDexKeeper *Keeper) *mockDexKeeper {
   128  	m := mockDexKeeper{
   129  		baseDexKeeper,
   130  		true,
   131  		false,
   132  		false,
   133  		false,
   134  		false,
   135  	}
   136  	return &m
   137  }
   138  
   139  type mockApp struct {
   140  	*mock.App
   141  
   142  	// expected keeper
   143  	tokenKeeper   TokenKeeper
   144  	suppleyKeeper SupplyKeeper
   145  	dexKeeper     IKeeper
   146  
   147  	bankKeeper    BankKeeper
   148  	stakingKeeper StakingKeeper
   149  
   150  	// expected KVStoreKey to mount
   151  	storeKey     *sdk.KVStoreKey
   152  	keyTokenPair *sdk.KVStoreKey
   153  	keySupply    *sdk.KVStoreKey
   154  }
   155  
   156  // nolint
   157  func newMockApp(tokenKeeper TokenKeeper, supplyKeeper SupplyKeeper, accountsInGenisis int) (
   158  	app *mockApp, mockDexKeeper *mockDexKeeper, err error) {
   159  
   160  	mApp := mock.NewApp()
   161  	RegisterCodec(mApp.Cdc.GetCdc())
   162  
   163  	storeKey := sdk.NewKVStoreKey(StoreKey)
   164  	keyTokenPair := sdk.NewKVStoreKey(TokenPairStoreKey)
   165  	supplyKvStoreKey := sdk.NewKVStoreKey(supply.StoreKey)
   166  
   167  	paramsKeeper := mApp.ParamsKeeper
   168  	paramsSubspace := paramsKeeper.Subspace(DefaultParamspace)
   169  
   170  	dexKeeper := NewKeeper(AuthFeeCollector, supplyKeeper, paramsSubspace, tokenKeeper, nil, nil,
   171  		storeKey, keyTokenPair, mApp.Cdc.GetCdc())
   172  
   173  	dexKeeper.SetGovKeeper(mockGovKeeper{})
   174  
   175  	fakeDexKeeper := newMockDexKeeper(&dexKeeper)
   176  
   177  	app = &mockApp{
   178  		App:           mApp,
   179  		storeKey:      storeKey,
   180  		bankKeeper:    nil,
   181  		keyTokenPair:  keyTokenPair,
   182  		stakingKeeper: nil,
   183  		keySupply:     supplyKvStoreKey,
   184  		suppleyKeeper: supplyKeeper,
   185  		tokenKeeper:   tokenKeeper,
   186  		dexKeeper:     fakeDexKeeper,
   187  	}
   188  
   189  	dexHandler := NewHandler(fakeDexKeeper)
   190  	dexQuerier := NewQuerier(fakeDexKeeper)
   191  	app.Router().AddRoute(RouterKey, dexHandler)
   192  	app.QueryRouter().AddRoute(QuerierRoute, dexQuerier)
   193  
   194  	app.SetEndBlocker(getEndBlocker())
   195  	app.SetInitChainer(getInitChainer(mApp, dexKeeper))
   196  
   197  	initQuantity := 10000000
   198  	var decCoins sdk.SysCoins
   199  	decCoins, err = sdk.ParseDecCoins(fmt.Sprintf("%d%s,%d%s",
   200  		initQuantity, common.NativeToken, initQuantity, common.TestToken))
   201  	if err != nil {
   202  		return nil, nil, err
   203  	}
   204  	genAccs, _, _, _ := mock.CreateGenAccounts(accountsInGenisis, decCoins)
   205  	app.SetAnteHandler(nil)
   206  
   207  	app.MountStores(app.storeKey, app.keyTokenPair, app.keySupply)
   208  
   209  	err = app.CompleteSetup()
   210  	if err == nil {
   211  		mock.SetGenesis(app.App, genAccs)
   212  	}
   213  
   214  	return app, fakeDexKeeper, err
   215  }
   216  
   217  func getEndBlocker() sdk.EndBlocker {
   218  	return func(_ sdk.Context, _ abci.RequestEndBlock) abci.ResponseEndBlock {
   219  		return abci.ResponseEndBlock{}
   220  	}
   221  }
   222  
   223  func getInitChainer(mapp *mock.App, keeper IKeeper) sdk.InitChainer {
   224  	return func(ctx sdk.Context, req abci.RequestInitChain) abci.ResponseInitChain {
   225  		mapp.InitChainer(ctx, req)
   226  		InitGenesis(ctx, keeper, DefaultGenesisState())
   227  		return abci.ResponseInitChain{}
   228  	}
   229  }
   230  
   231  type mockGovKeeper struct{}
   232  
   233  // RemoveFromActiveProposalQueue mocks RemoveFromActiveProposalQueue of gov.Keeper
   234  func (k mockGovKeeper) RemoveFromActiveProposalQueue(ctx sdk.Context, proposalID uint64, endTime time.Time) {
   235  }