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 }