@@ -415,6 +415,156 @@ describe('balances', () => {
415
415
] ) ;
416
416
} ) ;
417
417
418
+ it ( 'should call getIndexerBalance and return native balance on ERC20 404' , async ( ) => {
419
+ getTokensByWalletAddressMock = jest . fn ( ) . mockRejectedValue (
420
+ { code : HttpStatusCode . NotFound , message : 'not found' } ,
421
+ ) ;
422
+
423
+ getNativeTokenByWalletAddressMock = jest . fn ( ) . mockResolvedValue ( {
424
+ token : {
425
+ name : 'IMX' ,
426
+ symbol : 'IMX' ,
427
+ decimals : '18' ,
428
+ address : IMX_ADDRESS_ZKEVM ,
429
+ } as BlockscoutNativeTokenData ,
430
+ value : '777777777777777777' ,
431
+ } as BlockscoutToken ) ;
432
+
433
+ ( Blockscout as unknown as jest . Mock ) . mockReturnValue ( {
434
+ getTokensByWalletAddress : getTokensByWalletAddressMock ,
435
+ getNativeTokenByWalletAddress : getNativeTokenByWalletAddressMock ,
436
+ } ) ;
437
+
438
+ const chainId = Object . keys ( BLOCKSCOUT_CHAIN_URL_MAP ) [ 0 ] as unknown as ChainId ;
439
+
440
+ const getAllBalancesResult = await getAllBalances (
441
+ {
442
+ remote : {
443
+ getTokensConfig : ( ) => ( {
444
+ blockscout : true ,
445
+ } ) ,
446
+ } ,
447
+ networkMap : testCheckoutConfig . networkMap ,
448
+ } as unknown as CheckoutConfiguration ,
449
+ jest . fn ( ) as unknown as Web3Provider ,
450
+ 'abc123' ,
451
+ chainId ,
452
+ ) ;
453
+
454
+ expect ( getNativeTokenByWalletAddressMock ) . toHaveBeenCalledTimes ( 1 ) ;
455
+ expect ( getTokensByWalletAddressMock ) . toHaveBeenCalledTimes ( 1 ) ;
456
+
457
+ expect ( getAllBalancesResult . balances ) . toEqual ( [
458
+ {
459
+ balance : BigNumber . from ( '777777777777777777' ) ,
460
+ formattedBalance : '0.777777777777777777' ,
461
+ token : {
462
+ address : '0x0000000000000000000000000000000000001010' ,
463
+ decimals : 18 ,
464
+ name : 'IMX' ,
465
+ symbol : 'IMX' ,
466
+ } ,
467
+ } ,
468
+ ] ) ;
469
+ } ) ;
470
+
471
+ it ( 'should call getIndexerBalance and return ERC20 balances on native 404' , async ( ) => {
472
+ getTokensByWalletAddressMock = jest . fn ( ) . mockResolvedValue ( {
473
+ items : [
474
+ {
475
+ token : {
476
+ address : '0x65AA7a21B0f3ce9B478aAC3408fE75b423939b1F' ,
477
+ decimals : '18' ,
478
+ name : 'Ether' ,
479
+ symbol : 'ETH' ,
480
+ type : BlockscoutTokenType . ERC20 ,
481
+ } ,
482
+ value : '330000000000000000' ,
483
+ } ,
484
+ ] ,
485
+ // eslint-disable-next-line @typescript-eslint/naming-convention
486
+ next_page_params : null ,
487
+ } as BlockscoutTokens ) ;
488
+
489
+ getNativeTokenByWalletAddressMock = jest . fn ( ) . mockRejectedValue (
490
+ { code : HttpStatusCode . NotFound , message : 'not found' } ,
491
+ ) ;
492
+
493
+ ( Blockscout as unknown as jest . Mock ) . mockReturnValue ( {
494
+ getTokensByWalletAddress : getTokensByWalletAddressMock ,
495
+ getNativeTokenByWalletAddress : getNativeTokenByWalletAddressMock ,
496
+ } ) ;
497
+
498
+ const chainId = Object . keys ( BLOCKSCOUT_CHAIN_URL_MAP ) [ 0 ] as unknown as ChainId ;
499
+
500
+ const getAllBalancesResult = await getAllBalances (
501
+ {
502
+ remote : {
503
+ getTokensConfig : ( ) => ( {
504
+ blockscout : true ,
505
+ } ) ,
506
+ } ,
507
+ networkMap : testCheckoutConfig . networkMap ,
508
+ } as unknown as CheckoutConfiguration ,
509
+ jest . fn ( ) as unknown as Web3Provider ,
510
+ 'abc123' ,
511
+ chainId ,
512
+ ) ;
513
+
514
+ expect ( getNativeTokenByWalletAddressMock ) . toHaveBeenCalledTimes ( 1 ) ;
515
+ expect ( getTokensByWalletAddressMock ) . toHaveBeenCalledTimes ( 1 ) ;
516
+
517
+ expect ( getAllBalancesResult . balances ) . toEqual ( [
518
+ {
519
+ balance : BigNumber . from ( '330000000000000000' ) ,
520
+ formattedBalance : '0.33' ,
521
+ token : {
522
+ address : '0x65AA7a21B0f3ce9B478aAC3408fE75b423939b1F' ,
523
+ decimals : 18 ,
524
+ name : 'Ether' ,
525
+ symbol : 'ETH' ,
526
+ type : 'ERC-20' ,
527
+ } ,
528
+ } ,
529
+ ] ) ;
530
+ } ) ;
531
+
532
+ it ( 'should call getIndexerBalance and return empty balance due to 404' , async ( ) => {
533
+ getTokensByWalletAddressMock = jest . fn ( ) . mockRejectedValue (
534
+ { code : HttpStatusCode . NotFound , message : 'not found' } ,
535
+ ) ;
536
+
537
+ getNativeTokenByWalletAddressMock = jest . fn ( ) . mockRejectedValue (
538
+ { code : HttpStatusCode . NotFound , message : 'not found' } ,
539
+ ) ;
540
+
541
+ ( Blockscout as unknown as jest . Mock ) . mockReturnValue ( {
542
+ getTokensByWalletAddress : getTokensByWalletAddressMock ,
543
+ getNativeTokenByWalletAddress : getNativeTokenByWalletAddressMock ,
544
+ } ) ;
545
+
546
+ const chainId = Object . keys ( BLOCKSCOUT_CHAIN_URL_MAP ) [ 0 ] as unknown as ChainId ;
547
+
548
+ const getAllBalancesResult = await getAllBalances (
549
+ {
550
+ remote : {
551
+ getTokensConfig : ( ) => ( {
552
+ blockscout : true ,
553
+ } ) ,
554
+ } ,
555
+ networkMap : testCheckoutConfig . networkMap ,
556
+ } as unknown as CheckoutConfiguration ,
557
+ jest . fn ( ) as unknown as Web3Provider ,
558
+ 'abc123' ,
559
+ chainId ,
560
+ ) ;
561
+
562
+ expect ( getNativeTokenByWalletAddressMock ) . toHaveBeenCalledTimes ( 1 ) ;
563
+ expect ( getTokensByWalletAddressMock ) . toHaveBeenCalledTimes ( 1 ) ;
564
+
565
+ expect ( getAllBalancesResult . balances ) . toEqual ( [ ] ) ;
566
+ } ) ;
567
+
418
568
const testcases = [ {
419
569
errorMessage : 'test' ,
420
570
expectedErrorMessage : 'test' ,
0 commit comments