@@ -45,14 +45,21 @@ jest.mock('@buildwithsygma/core', () => ({
45
45
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
46
46
jest . mock ( '@ethersproject/providers' , ( ) => ( {
47
47
...jest . requireActual ( '@ethersproject/providers' ) ,
48
- Web3Provider : jest . fn ( ) ,
48
+ Web3Provider : jest . fn ( ) . mockImplementation ( ( ) => {
49
+ return {
50
+ getBalance : jest . fn ( ) . mockResolvedValue ( BigNumber . from ( '110000000000000000' ) ) ,
51
+ } ;
52
+ } ) ,
49
53
} ) ) ;
50
54
51
55
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
52
56
jest . mock ( '@buildwithsygma/sygma-contracts' , ( ) => ( {
53
57
...jest . requireActual ( '@buildwithsygma/sygma-contracts' ) ,
54
58
Bridge__factory : { connect : jest . fn ( ) } ,
55
- ERC20__factory : { connect : jest . fn ( ) } ,
59
+ ERC20__factory : {
60
+ balanceOf : jest . fn ( ) . mockResolvedValue ( BigInt ( 1 ) ) ,
61
+ connect : jest . fn ( ) ,
62
+ } ,
56
63
BasicFeeHandler__factory : { connect : jest . fn ( ) } ,
57
64
PercentageERC20FeeHandler__factory : { connect : jest . fn ( ) } ,
58
65
FeeHandlerRouter__factory : { connect : jest . fn ( ) } ,
@@ -182,6 +189,7 @@ describe('Fungible - Approvals', () => {
182
189
} ) ;
183
190
184
191
( ERC20__factory . connect as jest . Mock ) . mockReturnValue ( {
192
+ balanceOf : jest . fn ( ) . mockResolvedValue ( BigNumber . from ( parseEther ( '50' ) ) ) ,
185
193
populateTransaction : {
186
194
approve : jest . fn ( ) . mockResolvedValue ( { } ) ,
187
195
} ,
@@ -206,6 +214,55 @@ describe('Fungible - Approvals', () => {
206
214
207
215
expect ( approvals . length ) . toBeGreaterThan ( 0 ) ;
208
216
} ) ;
217
+
218
+ it ( 'should throw an error if balance is not sufficient - Basic' , async ( ) => {
219
+ ( BasicFeeHandler__factory . connect as jest . Mock ) . mockReturnValue ( {
220
+ feeHandlerType : jest . fn ( ) . mockResolvedValue ( 'basic' ) ,
221
+ calculateFee : jest . fn ( ) . mockResolvedValue ( [ parseEther ( '1' ) ] ) ,
222
+ } ) ;
223
+
224
+ const transfer = await createEvmFungibleAssetTransfer ( {
225
+ ...TRANSFER_PARAMS ,
226
+ amount : parseEther ( '0' ) . toBigInt ( ) ,
227
+ } ) ;
228
+
229
+ await expect ( transfer . getApprovalTransactions ( ) ) . rejects . toThrow (
230
+ 'Insufficient native token balance for network' ,
231
+ ) ;
232
+ } ) ;
233
+
234
+ it ( 'should throw an error if balance is not sufficient - Percentage' , async ( ) => {
235
+ ( BasicFeeHandler__factory . connect as jest . Mock ) . mockReturnValue ( {
236
+ feeHandlerType : jest . fn ( ) . mockResolvedValue ( 'percentage' ) ,
237
+ calculateFee : jest . fn ( ) . mockResolvedValue ( [ BigNumber . from ( 0 ) ] ) ,
238
+ } ) ;
239
+ ( PercentageERC20FeeHandler__factory . connect as jest . Mock ) . mockReturnValue ( {
240
+ feeHandlerType : jest . fn ( ) . mockResolvedValue ( 'percentage' ) ,
241
+ calculateFee : jest . fn ( ) . mockResolvedValue ( [ BigNumber . from ( 0 ) ] ) ,
242
+ _resourceIDToFeeBounds : jest . fn ( ) . mockResolvedValue ( {
243
+ lowerBound : parseEther ( '10' ) ,
244
+ upperBound : parseEther ( '100' ) ,
245
+ } ) ,
246
+ _domainResourceIDToFee : jest . fn ( ) . mockResolvedValue ( BigNumber . from ( 100 ) ) ,
247
+ HUNDRED_PERCENT : jest . fn ( ) . mockResolvedValue ( 10000 ) ,
248
+ } ) ;
249
+ ( ERC20__factory . connect as jest . Mock ) . mockReturnValue ( {
250
+ balanceOf : jest . fn ( ) . mockResolvedValue ( BigNumber . from ( parseEther ( '1' ) . toBigInt ( ) ) ) , // Mock balance less than the required amount
251
+ populateTransaction : {
252
+ approve : jest . fn ( ) . mockResolvedValue ( { } ) ,
253
+ } ,
254
+ allowance : jest . fn ( ) . mockResolvedValue ( parseEther ( '0' ) ) ,
255
+ } ) ;
256
+
257
+ const transfer = await createEvmFungibleAssetTransfer ( {
258
+ ...TRANSFER_PARAMS ,
259
+ amount : parseEther ( '100' ) . toBigInt ( ) ,
260
+ } ) ;
261
+
262
+ await expect ( transfer . getApprovalTransactions ( ) ) . rejects . toThrow (
263
+ 'Insufficient ERC20 token balance' ,
264
+ ) ;
265
+ } ) ;
209
266
} ) ;
210
267
211
268
describe ( 'Fungible - Deposit' , ( ) => {
@@ -223,6 +280,14 @@ describe('Fungible - Deposit', () => {
223
280
. mockResolvedValue ( '0x98729c03c4D5e820F5e8c45558ae07aE63F97461' ) ,
224
281
} ) ;
225
282
283
+ ( ERC20__factory . connect as jest . Mock ) . mockReturnValue ( {
284
+ balanceOf : jest . fn ( ) . mockResolvedValue ( BigNumber . from ( parseEther ( '50' ) . toBigInt ( ) ) ) ,
285
+ populateTransaction : {
286
+ approve : jest . fn ( ) . mockResolvedValue ( { } ) ,
287
+ } ,
288
+ allowance : jest . fn ( ) . mockResolvedValue ( parseEther ( '0' ) ) ,
289
+ } ) ;
290
+
226
291
( Bridge__factory . connect as jest . Mock ) . mockReturnValue ( {
227
292
populateTransaction : {
228
293
deposit : jest . fn ( ) . mockReturnValue ( {
@@ -249,4 +314,34 @@ describe('Fungible - Deposit', () => {
249
314
250
315
expect ( depositTransaction ) . toBeTruthy ( ) ;
251
316
} ) ;
317
+
318
+ it ( 'should throw ERROR - Insufficient account balance - Percentage' , async ( ) => {
319
+ ( BasicFeeHandler__factory . connect as jest . Mock ) . mockReturnValue ( {
320
+ feeHandlerType : jest . fn ( ) . mockResolvedValue ( 'percentage' ) ,
321
+ calculateFee : jest . fn ( ) . mockResolvedValue ( [ BigNumber . from ( 0 ) ] ) ,
322
+ } ) ;
323
+ ( PercentageERC20FeeHandler__factory . connect as jest . Mock ) . mockReturnValue ( {
324
+ feeHandlerType : jest . fn ( ) . mockResolvedValue ( 'percentage' ) ,
325
+ calculateFee : jest . fn ( ) . mockResolvedValue ( [ BigNumber . from ( 0 ) ] ) ,
326
+ _resourceIDToFeeBounds : jest . fn ( ) . mockResolvedValue ( {
327
+ lowerBound : parseEther ( '10' ) ,
328
+ upperBound : parseEther ( '100' ) ,
329
+ } ) ,
330
+ _domainResourceIDToFee : jest . fn ( ) . mockResolvedValue ( BigNumber . from ( 100 ) ) ,
331
+ HUNDRED_PERCENT : jest . fn ( ) . mockResolvedValue ( 10000 ) ,
332
+ } ) ;
333
+ ( ERC20__factory . connect as jest . Mock ) . mockReturnValue ( {
334
+ balanceOf : jest . fn ( ) . mockResolvedValue ( BigNumber . from ( parseEther ( '1' ) . toBigInt ( ) ) ) , // Mock balance less than the required amount
335
+ populateTransaction : {
336
+ approve : jest . fn ( ) . mockResolvedValue ( { } ) ,
337
+ } ,
338
+ allowance : jest . fn ( ) . mockResolvedValue ( parseEther ( '0' ) ) ,
339
+ } ) ;
340
+
341
+ const transfer = await createEvmFungibleAssetTransfer ( TRANSFER_PARAMS ) ;
342
+
343
+ await expect ( transfer . getTransferTransaction ( ) ) . rejects . toThrow (
344
+ 'Insufficient ERC20 token balance' ,
345
+ ) ;
346
+ } ) ;
252
347
} ) ;
0 commit comments