@@ -71,6 +71,20 @@ const fakeEvmAccountWithoutMetadata: InternalAccount = {
7171 methods : [ ] ,
7272} ;
7373
74+ const fakeNonEvmAccount2 : InternalAccount = {
75+ id : 'account5' ,
76+ type : 'solana:data-account' ,
77+ address : '0x123' ,
78+ metadata : {
79+ name : 'Test Account' ,
80+ // @ts -expect-error-next-line
81+ snap : { id : 'test-snap-2' , enabled : true } ,
82+ } ,
83+ scopes : [ 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' ] ,
84+ options : { } ,
85+ methods : [ ] ,
86+ } ;
87+
7488const fakeMarketData = {
7589 price : 202.11 ,
7690 priceChange : 0 ,
@@ -127,6 +141,9 @@ const setupController = ({
127141 account1 : [ 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/slip44:501' ] ,
128142 account2 : [ 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/slip44:501' ] ,
129143 account3 : [ 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/slip44:501' ] ,
144+ account5 : [
145+ 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/token:EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v' ,
146+ ] ,
130147 } ,
131148 assetsMetadata : {
132149 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/slip44:501' : {
@@ -136,6 +153,14 @@ const setupController = ({
136153 iconUrl : 'https://example.com/solana.png' ,
137154 units : [ { symbol : 'SOL' , name : 'Solana' , decimals : 9 } ] ,
138155 } ,
156+ 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/token:EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v' :
157+ {
158+ name : 'USDC' ,
159+ symbol : 'USDC' ,
160+ fungible : true ,
161+ iconUrl : 'https://example.com/usdc.png' ,
162+ units : [ { symbol : 'USDC' , name : 'USDC' , decimals : 2 } ] ,
163+ } ,
139164 } ,
140165 } ) ,
141166 ) ;
@@ -356,8 +381,8 @@ describe('MultichainAssetsRatesController', () => {
356381 type : KeyringTypes . snap ,
357382 } ,
358383 snap : {
359- id : 'mock-sol-snap' ,
360- name : 'mock-sol-snap' ,
384+ id : 'mock-sol-snap-1 ' ,
385+ name : 'mock-sol-snap-1 ' ,
361386 enabled : true ,
362387 } ,
363388 lastSelected : 0 ,
@@ -377,8 +402,8 @@ describe('MultichainAssetsRatesController', () => {
377402 type : KeyringTypes . snap ,
378403 } ,
379404 snap : {
380- id : 'mock-sol-snap' ,
381- name : 'mock-sol-snap' ,
405+ id : 'mock-sol-snap-2 ' ,
406+ name : 'mock-sol-snap-2 ' ,
382407 enabled : true ,
383408 } ,
384409 lastSelected : 0 ,
@@ -393,42 +418,49 @@ describe('MultichainAssetsRatesController', () => {
393418 accountsAssets : testAccounts ,
394419 } ) ;
395420
396- const snapSpy = jest
397- . fn ( )
398- . mockResolvedValueOnce ( {
399- conversionRates : {
400- 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/slip44:501' : {
401- 'swift:0/iso4217:USD' : {
402- rate : '100' ,
403- conversionTime : 1738539923277 ,
421+ const mockResponses = {
422+ onAssetsConversion : [
423+ {
424+ conversionRates : {
425+ 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/slip44:501' : {
426+ 'swift:0/iso4217:USD' : {
427+ rate : '100' ,
428+ conversionTime : 1738539923277 ,
429+ } ,
404430 } ,
405431 } ,
406432 } ,
407- } )
408- . mockResolvedValueOnce ( {
409- marketData : {
410- 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/slip44:501' : {
411- 'swift:0/iso4217:USD' : fakeMarketData ,
433+ {
434+ conversionRates : {
435+ 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/token1:501' : {
436+ 'swift:0/iso4217:USD' : {
437+ rate : '200' ,
438+ conversionTime : 1738539923277 ,
439+ } ,
440+ } ,
412441 } ,
413442 } ,
414- } )
415- . mockResolvedValueOnce ( {
416- conversionRates : {
417- 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/token1:501' : {
418- 'swift:0/iso4217:USD' : {
419- rate : '200' ,
420- conversionTime : 1738539923277 ,
421- } ,
443+ ] ,
444+ onAssetsMarketData : [
445+ {
446+ marketData : {
447+ 'swift:0/iso4217:USD' : fakeMarketData ,
422448 } ,
423449 } ,
424- } )
425- . mockResolvedValueOnce ( {
426- marketData : {
427- 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/token1:501' : {
450+ {
451+ marketData : {
428452 'swift:0/iso4217:USD' : fakeMarketData ,
429453 } ,
430454 } ,
431- } ) ;
455+ ] ,
456+ } ;
457+
458+ const snapSpy = jest . fn ( ) . mockImplementation ( ( args ) => {
459+ const { handler } = args ;
460+ return Promise . resolve (
461+ mockResponses [ handler as keyof typeof mockResponses ] . shift ( ) ,
462+ ) ;
463+ } ) ;
432464 messenger . registerActionHandler ( 'SnapController:handleRequest' , snapSpy ) ;
433465
434466 messenger . publish ( 'MultichainAssetsController:accountAssetListUpdated' , {
@@ -443,6 +475,7 @@ describe('MultichainAssetsRatesController', () => {
443475 } ,
444476 } ,
445477 } ) ;
478+
446479 // Wait for the asynchronous subscriber to run.
447480 await Promise . resolve ( ) ;
448481 await advanceTime ( { clock, duration : 10 } ) ;
@@ -625,7 +658,7 @@ describe('MultichainAssetsRatesController', () => {
625658
626659 it ( 'handles mixed success and failure scenarios' , async ( ) => {
627660 const { controller, messenger } = setupController ( {
628- accountsAssets : [ fakeNonEvmAccount , fakeEvmAccount2 ] ,
661+ accountsAssets : [ fakeNonEvmAccount , fakeNonEvmAccount2 ] ,
629662 } ) ;
630663
631664 const consoleErrorSpy = jest . spyOn ( console , 'error' ) . mockImplementation ( ) ;
@@ -957,7 +990,7 @@ describe('MultichainAssetsRatesController', () => {
957990 const snapHandler = jest . fn ( ) . mockResolvedValue ( {
958991 conversionRates : {
959992 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/slip44:501' : {
960- USD : {
993+ 'swift:0/iso4217: USD' : {
961994 rate : '100.50' ,
962995 conversionTime : Date . now ( ) ,
963996 } ,
0 commit comments