@@ -99,7 +99,8 @@ const fakeHistoricalPrices: OnAssetHistoricalPriceResponse = {
99
99
] ,
100
100
} ,
101
101
updateTime : 1737542312 ,
102
- expirationTime : 1737542312 ,
102
+ // expirationTime is in 1Hour based on current Date.now()
103
+ expirationTime : Date . now ( ) + 1000 * 60 * 60 ,
103
104
} ,
104
105
} ;
105
106
@@ -627,5 +628,97 @@ describe('MultichainAssetsRatesController', () => {
627
628
628
629
expect ( snapHandler ) . toHaveBeenCalledTimes ( 1 ) ;
629
630
} ) ;
631
+
632
+ it ( 'does not clean up any of the prices if none of them have expired' , async ( ) => {
633
+ const testCurrency = 'EUR' ;
634
+ const testNativeAssetPrices = {
635
+ intervals : { } ,
636
+ updateTime : Date . now ( ) ,
637
+ expirationTime : Date . now ( ) + 1000 , // not expired
638
+ } ;
639
+ const testTokenAssetPrices = {
640
+ intervals : { } ,
641
+ updateTime : Date . now ( ) ,
642
+ expirationTime : Date . now ( ) + 1000 , // not expired
643
+ } ;
644
+ const { controller, messenger } = setupController ( {
645
+ config : {
646
+ state : {
647
+ historicalPrices : {
648
+ 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/slip44:501' : {
649
+ [ testCurrency ] : testNativeAssetPrices ,
650
+ } ,
651
+ 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/token:testToken1' : {
652
+ [ testCurrency ] : testTokenAssetPrices ,
653
+ } ,
654
+ } ,
655
+ } ,
656
+ } ,
657
+ } ) ;
658
+
659
+ const snapHandler = jest . fn ( ) . mockResolvedValue ( fakeHistoricalPrices ) ;
660
+ messenger . registerActionHandler (
661
+ 'SnapController:handleRequest' ,
662
+ snapHandler ,
663
+ ) ;
664
+
665
+ await controller . fetchHistoricalPricesForAsset (
666
+ 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/slip44:501' ,
667
+ ) ;
668
+
669
+ expect ( snapHandler ) . toHaveBeenCalledTimes ( 1 ) ;
670
+ expect ( controller . state . historicalPrices ) . toStrictEqual ( {
671
+ 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/slip44:501' : {
672
+ USD : fakeHistoricalPrices . historicalPrice ,
673
+ EUR : testNativeAssetPrices ,
674
+ } ,
675
+ 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/token:testToken1' : {
676
+ EUR : testTokenAssetPrices ,
677
+ } ,
678
+ } ) ;
679
+ } ) ;
680
+
681
+ it ( 'cleans up all historical prices that have expired' , async ( ) => {
682
+ const testCurrency = 'EUR' ;
683
+ const { controller, messenger } = setupController ( {
684
+ config : {
685
+ state : {
686
+ historicalPrices : {
687
+ 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/slip44:501' : {
688
+ [ testCurrency ] : {
689
+ intervals : { } ,
690
+ updateTime : Date . now ( ) ,
691
+ expirationTime : Date . now ( ) - 1000 , // expired
692
+ } ,
693
+ } ,
694
+ 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/token:testToken1' : {
695
+ [ testCurrency ] : {
696
+ intervals : { } ,
697
+ updateTime : Date . now ( ) ,
698
+ expirationTime : Date . now ( ) - 1000 , // expired
699
+ } ,
700
+ } ,
701
+ } ,
702
+ } ,
703
+ } ,
704
+ } ) ;
705
+
706
+ const snapHandler = jest . fn ( ) . mockResolvedValue ( fakeHistoricalPrices ) ;
707
+ messenger . registerActionHandler (
708
+ 'SnapController:handleRequest' ,
709
+ snapHandler ,
710
+ ) ;
711
+
712
+ await controller . fetchHistoricalPricesForAsset (
713
+ 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/slip44:501' ,
714
+ ) ;
715
+
716
+ expect ( snapHandler ) . toHaveBeenCalledTimes ( 1 ) ;
717
+ expect ( controller . state . historicalPrices ) . toStrictEqual ( {
718
+ 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/slip44:501' : {
719
+ USD : fakeHistoricalPrices . historicalPrice ,
720
+ } ,
721
+ } ) ;
722
+ } ) ;
630
723
} ) ;
631
724
} ) ;
0 commit comments