1+ jest . mock ( '@human-protocol/sdk' ) ;
2+
13import { faker } from '@faker-js/faker' ;
24import { createMock } from '@golevelup/ts-jest' ;
5+ import { StakingClient } from '@human-protocol/sdk' ;
36import { Test , TestingModule } from '@nestjs/testing' ;
47import { ethers } from 'ethers' ;
58
69import { SupportedExchange } from '@/common/constants' ;
710import { StakingConfigService , Web3ConfigService } from '@/config' ;
11+ import { type ExchangeClient } from '@/modules/exchange' ;
812import { ExchangeClientFactory } from '@/modules/exchange/exchange-client.factory' ;
913import {
1014 ExchangeApiKeyNotFoundError ,
@@ -15,19 +19,7 @@ import { WalletWithProvider, Web3Service } from '@/modules/web3';
1519import { mockWeb3ConfigService } from '@/modules/web3/fixtures' ;
1620
1721import { StakingService } from './staking.service' ;
18- import { ExchangeClient } from '../exchange/types' ;
19-
20- jest . mock ( '@human-protocol/sdk' , ( ) => {
21- const actual = jest . requireActual ( '@human-protocol/sdk' ) ;
22- return {
23- ...actual ,
24- StakingClient : {
25- build : jest . fn ( ) ,
26- } ,
27- } ;
28- } ) ;
2922
30- const { StakingClient } = jest . requireMock ( '@human-protocol/sdk' ) ;
3123const mockExchangeApiKeysService = createMock < ExchangeApiKeysService > ( ) ;
3224const mockExchangeClientFactory = {
3325 create : jest . fn ( ) ,
@@ -41,14 +33,14 @@ const mockStakingConfigService: Omit<StakingConfigService, 'configService'> = {
4133 asset : 'HMT' ,
4234 timeoutMs : faker . number . int ( { min : 1000 , max : 10000 } ) ,
4335} ;
36+ const mockedStakingClient = jest . mocked ( StakingClient ) ;
4437
4538describe ( 'StakingService' , ( ) => {
4639 let stakingService : StakingService ;
4740
48- beforeEach ( async ( ) => {
41+ beforeAll ( async ( ) => {
4942 mockExchangeClientFactory . create . mockResolvedValue ( mockExchangeClient ) ;
5043 mockExchangeClient . getAccountBalance . mockReset ( ) ;
51- ( StakingClient . build as jest . Mock ) . mockReset ( ) ;
5244 mockWeb3Service . getSigner . mockReturnValue ( {
5345 provider : { } ,
5446 } as never ) ;
@@ -74,7 +66,7 @@ describe('StakingService', () => {
7466 stakingService = module . get ( StakingService ) ;
7567 } ) ;
7668
77- afterEach ( ( ) => {
69+ afterAll ( ( ) => {
7870 jest . clearAllMocks ( ) ;
7971 } ) ;
8072
@@ -121,6 +113,22 @@ describe('StakingService', () => {
121113 } ;
122114 const onChainStake = faker . number . int ( ) ;
123115 const exchangeStake = faker . number . int ( ) ;
116+ let spyOnGetExchangeStakedBalance : jest . SpyInstance ;
117+ let spyOnGetOnChainStakedBalance : jest . SpyInstance ;
118+
119+ beforeAll ( ( ) => {
120+ spyOnGetExchangeStakedBalance = jest
121+ . spyOn ( stakingService , 'getExchangeStakedBalance' )
122+ . mockImplementation ( ) ;
123+ spyOnGetOnChainStakedBalance = jest
124+ . spyOn ( stakingService , 'getOnChainStakedBalance' )
125+ . mockImplementation ( ) ;
126+ } ) ;
127+
128+ afterAll ( ( ) => {
129+ spyOnGetExchangeStakedBalance . mockRestore ( ) ;
130+ spyOnGetOnChainStakedBalance . mockRestore ( ) ;
131+ } ) ;
124132
125133 it ( 'throws when user is not found' , async ( ) => {
126134 mockUserRepository . findOneById . mockResolvedValueOnce ( null ) ;
@@ -132,32 +140,19 @@ describe('StakingService', () => {
132140
133141 it ( 'returns aggregated exchange and on-chain stakes' , async ( ) => {
134142 mockUserRepository . findOneById . mockResolvedValueOnce ( user as UserEntity ) ;
135- const exchangeStakeSpy = jest
136- . spyOn ( stakingService , 'getExchangeStakedBalance' )
137- . mockResolvedValueOnce ( exchangeStake ) ;
138- jest
139- . spyOn ( stakingService , 'getOnChainStakedBalance' )
140- . mockResolvedValueOnce ( onChainStake ) ;
143+ spyOnGetExchangeStakedBalance . mockResolvedValueOnce ( exchangeStake ) ;
144+ spyOnGetOnChainStakedBalance . mockResolvedValueOnce ( onChainStake ) ;
141145
142146 const result = await stakingService . getStakeSummary ( user . id ) ;
143147
144- expect ( exchangeStakeSpy ) . toHaveBeenCalledWith ( user . id ) ;
145- expect ( stakingService . getOnChainStakedBalance ) . toHaveBeenCalledWith (
148+ expect ( spyOnGetExchangeStakedBalance ) . toHaveBeenCalledWith ( user . id ) ;
149+ expect ( spyOnGetOnChainStakedBalance ) . toHaveBeenCalledWith (
146150 user . evmAddress ,
147151 ) ;
148152 expect ( result ) . toEqual ( {
149- exchangeStake : exchangeStake . toLocaleString ( undefined , {
150- maximumFractionDigits : 18 ,
151- } ) ,
152- onChainStake : onChainStake . toLocaleString ( undefined , {
153- maximumFractionDigits : 18 ,
154- } ) ,
155- minThreshold : mockStakingConfigService . minThreshold . toLocaleString (
156- undefined ,
157- {
158- maximumFractionDigits : 18 ,
159- } ,
160- ) ,
153+ exchangeStake : exchangeStake . toString ( ) ,
154+ onChainStake : onChainStake . toString ( ) ,
155+ minThreshold : mockStakingConfigService . minThreshold . toString ( ) ,
161156 } ) ;
162157 } ) ;
163158
@@ -166,28 +161,16 @@ describe('StakingService', () => {
166161 ...user ,
167162 evmAddress : null ,
168163 } as UserEntity ) ;
169- const exchangeStakeSpy = jest
170- . spyOn ( stakingService , 'getExchangeStakedBalance' )
171- . mockResolvedValueOnce ( exchangeStake ) ;
172- jest . spyOn ( stakingService , 'getOnChainStakedBalance' ) ;
164+ spyOnGetExchangeStakedBalance . mockResolvedValueOnce ( exchangeStake ) ;
173165
174166 const result = await stakingService . getStakeSummary ( user . id ) ;
175167
176- expect ( stakingService . getOnChainStakedBalance ) . not . toHaveBeenCalled ( ) ;
168+ expect ( spyOnGetOnChainStakedBalance ) . not . toHaveBeenCalled ( ) ;
177169 expect ( result ) . toEqual ( {
178- exchangeStake : exchangeStake . toLocaleString ( undefined , {
179- maximumFractionDigits : 18 ,
180- } ) ,
170+ exchangeStake : exchangeStake . toString ( ) ,
181171 onChainStake : '0' ,
182- minThreshold : mockStakingConfigService . minThreshold . toLocaleString (
183- undefined ,
184- {
185- maximumFractionDigits : 18 ,
186- } ,
187- ) ,
172+ minThreshold : mockStakingConfigService . minThreshold . toString ( ) ,
188173 } ) ;
189-
190- exchangeStakeSpy . mockRestore ( ) ;
191174 } ) ;
192175 } ) ;
193176
@@ -204,20 +187,18 @@ describe('StakingService', () => {
204187 mockWeb3Service . getSigner . mockReturnValueOnce ( {
205188 provider : mockProvider ,
206189 } as WalletWithProvider ) ;
207- const mockStakingClient = {
208- getStakerInfo : jest . fn ( ) . mockResolvedValue ( {
209- stakedAmount,
210- lockedAmount,
211- } ) ,
212- } ;
213- ( StakingClient . build as jest . Mock ) . mockResolvedValueOnce (
214- mockStakingClient ,
215- ) ;
190+
191+ const getStakerInfoMock = jest
192+ . fn ( )
193+ . mockResolvedValue ( { stakedAmount, lockedAmount } ) ;
194+ mockedStakingClient . build . mockResolvedValueOnce ( {
195+ getStakerInfo : getStakerInfoMock ,
196+ } as unknown as StakingClient ) ;
216197
217198 const result = await stakingService . getOnChainStakedBalance ( address ) ;
218199
219- expect ( StakingClient . build ) . toHaveBeenCalledWith ( mockProvider ) ;
220- expect ( mockStakingClient . getStakerInfo ) . toHaveBeenCalledWith ( address ) ;
200+ expect ( mockedStakingClient . build ) . toHaveBeenCalledWith ( mockProvider ) ;
201+ expect ( getStakerInfoMock ) . toHaveBeenCalledWith ( address ) ;
221202 expect ( result ) . toBe (
222203 Number ( ethers . formatEther ( stakedAmount + lockedAmount ) ) ,
223204 ) ;
0 commit comments