@@ -222,16 +222,6 @@ describe('SnapInterfaceController', () => {
222222 < Field label = "Bar" >
223223 < Input name = "bar" type = "text" />
224224 </ Field >
225- < Field label = "baz" >
226- < AccountSelector
227- name = "baz"
228- switchGlobalAccount
229- value = "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp:7S3P4HxJpyyigGzodYwHtCxZyUQe9JiBMHyRWXArAaKv"
230- />
231- </ Field >
232- < Field label = "foobar" >
233- < AccountSelector name = "foobar" />
234- </ Field >
235225 </ Form >
236226 </ Box >
237227 ) ;
@@ -254,37 +244,217 @@ describe('SnapInterfaceController', () => {
254244 'https://foo.bar/' ,
255245 ) ;
256246
247+ expect ( content ) . toStrictEqual ( element ) ;
248+ expect ( state ) . toStrictEqual ( {
249+ foo : {
250+ bar : null ,
251+ } ,
252+ } ) ;
253+ } ) ;
254+
255+ it ( 'can retrieve the selected account from the client' , async ( ) => {
256+ const rootMessenger = getRootSnapInterfaceControllerMessenger ( ) ;
257+ const controllerMessenger =
258+ getRestrictedSnapInterfaceControllerMessenger ( rootMessenger ) ;
259+
260+ // eslint-disable-next-line no-new
261+ new SnapInterfaceController ( {
262+ messenger : controllerMessenger ,
263+ } ) ;
264+
265+ const element = (
266+ < Box >
267+ < AccountSelector name = "foo" />
268+ </ Box >
269+ ) ;
270+
271+ const id = await rootMessenger . call (
272+ 'SnapInterfaceController:createInterface' ,
273+ MOCK_SNAP_ID ,
274+ element ,
275+ ) ;
276+
277+ const { content, state } = rootMessenger . call (
278+ 'SnapInterfaceController:getInterface' ,
279+ MOCK_SNAP_ID ,
280+ id ,
281+ ) ;
282+
257283 expect ( rootMessenger . call ) . toHaveBeenNthCalledWith (
258- 4 ,
284+ 2 ,
285+ 'AccountsController:getSelectedMultichainAccount' ,
286+ ) ;
287+
288+ expect ( content ) . toStrictEqual ( element ) ;
289+ expect ( state ) . toStrictEqual ( {
290+ foo : {
291+ accountId : MOCK_ACCOUNT_ID ,
292+ addresses : [ 'eip155:0:0x1234567890123456789012345678901234567890' ] ,
293+ } ,
294+ } ) ;
295+ } ) ;
296+
297+ it ( 'can switch the currently selected account in the client' , async ( ) => {
298+ const rootMessenger = getRootSnapInterfaceControllerMessenger ( ) ;
299+ const controllerMessenger = getRestrictedSnapInterfaceControllerMessenger (
300+ rootMessenger ,
301+ false ,
302+ ) ;
303+
304+ rootMessenger . registerActionHandler (
305+ 'AccountsController:getAccountByAddress' ,
306+ // @ts -expect-error partial mock
307+ ( ) => ( {
308+ id : MOCK_ACCOUNT_ID ,
309+ address : '7S3P4HxJpyyigGzodYwHtCxZyUQe9JiBMHyRWXArAaKv' ,
310+ scopes : [ 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' ] ,
311+ } ) ,
312+ ) ;
313+
314+ rootMessenger . registerActionHandler (
315+ 'AccountsController:setSelectedAccount' ,
316+ ( ) => {
317+ // no-op
318+ } ,
319+ ) ;
320+
321+ // eslint-disable-next-line no-new
322+ new SnapInterfaceController ( {
323+ messenger : controllerMessenger ,
324+ } ) ;
325+
326+ const element = (
327+ < Box >
328+ < AccountSelector
329+ name = "foo"
330+ switchGlobalAccount
331+ value = "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp:7S3P4HxJpyyigGzodYwHtCxZyUQe9JiBMHyRWXArAaKv"
332+ />
333+ </ Box >
334+ ) ;
335+
336+ const id = await rootMessenger . call (
337+ 'SnapInterfaceController:createInterface' ,
338+ MOCK_SNAP_ID ,
339+ element ,
340+ ) ;
341+
342+ const { content, state } = rootMessenger . call (
343+ 'SnapInterfaceController:getInterface' ,
344+ MOCK_SNAP_ID ,
345+ id ,
346+ ) ;
347+
348+ expect ( rootMessenger . call ) . toHaveBeenNthCalledWith (
349+ 2 ,
259350 'AccountsController:getAccountByAddress' ,
260351 '7S3P4HxJpyyigGzodYwHtCxZyUQe9JiBMHyRWXArAaKv' ,
261352 ) ;
262353
263354 expect ( rootMessenger . call ) . toHaveBeenNthCalledWith (
264- 5 ,
355+ 3 ,
265356 'AccountsController:setSelectedAccount' ,
266357 MOCK_ACCOUNT_ID ,
267358 ) ;
268359
360+ expect ( content ) . toStrictEqual ( element ) ;
361+ expect ( state ) . toStrictEqual ( {
362+ foo : {
363+ accountId : MOCK_ACCOUNT_ID ,
364+ addresses : [
365+ 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp:7S3P4HxJpyyigGzodYwHtCxZyUQe9JiBMHyRWXArAaKv' ,
366+ ] ,
367+ } ,
368+ } ) ;
369+ } ) ;
370+
371+ it ( 'can get accounts of a specific chain ID from the client' , async ( ) => {
372+ const rootMessenger = getRootSnapInterfaceControllerMessenger ( ) ;
373+ const controllerMessenger = getRestrictedSnapInterfaceControllerMessenger (
374+ rootMessenger ,
375+ false ,
376+ ) ;
377+
378+ rootMessenger . registerActionHandler (
379+ 'AccountsController:getSelectedMultichainAccount' ,
380+ // @ts -expect-error partial mock
381+ ( ) => ( {
382+ id : MOCK_ACCOUNT_ID ,
383+ address : '0x1234567890123456789012345678901234567890' ,
384+ scopes : [ 'eip155:0' ] ,
385+ } ) ,
386+ ) ;
387+
388+ rootMessenger . registerActionHandler (
389+ 'AccountsController:listMultichainAccounts' ,
390+ ( ) => [
391+ // @ts -expect-error partial mock
392+ {
393+ id : MOCK_ACCOUNT_ID ,
394+ address : '7S3P4HxJpyyigGzodYwHtCxZyUQe9JiBMHyRWXArAaKv' ,
395+ scopes : [ 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' ] ,
396+ } ,
397+ ] ,
398+ ) ;
399+
400+ rootMessenger . registerActionHandler (
401+ 'AccountsController:setSelectedAccount' ,
402+ ( ) => {
403+ // no-op
404+ } ,
405+ ) ;
406+
407+ // eslint-disable-next-line no-new
408+ new SnapInterfaceController ( {
409+ messenger : controllerMessenger ,
410+ } ) ;
411+
412+ const element = (
413+ < Box >
414+ < AccountSelector
415+ name = "foo"
416+ switchGlobalAccount
417+ chainIds = { [ 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' ] }
418+ />
419+ </ Box >
420+ ) ;
421+
422+ const id = await rootMessenger . call (
423+ 'SnapInterfaceController:createInterface' ,
424+ MOCK_SNAP_ID ,
425+ element ,
426+ ) ;
427+
428+ const { content, state } = rootMessenger . call (
429+ 'SnapInterfaceController:getInterface' ,
430+ MOCK_SNAP_ID ,
431+ id ,
432+ ) ;
433+
269434 expect ( rootMessenger . call ) . toHaveBeenNthCalledWith (
270- 6 ,
435+ 2 ,
271436 'AccountsController:getSelectedMultichainAccount' ,
272437 ) ;
273438
439+ expect ( rootMessenger . call ) . toHaveBeenNthCalledWith (
440+ 3 ,
441+ 'AccountsController:listMultichainAccounts' ,
442+ 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' ,
443+ ) ;
444+
445+ expect ( rootMessenger . call ) . toHaveBeenNthCalledWith (
446+ 4 ,
447+ 'AccountsController:setSelectedAccount' ,
448+ MOCK_ACCOUNT_ID ,
449+ ) ;
450+
274451 expect ( content ) . toStrictEqual ( element ) ;
275452 expect ( state ) . toStrictEqual ( {
276453 foo : {
277- bar : null ,
278- baz : {
279- accountId : MOCK_ACCOUNT_ID ,
280- addresses : [
281- 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp:7S3P4HxJpyyigGzodYwHtCxZyUQe9JiBMHyRWXArAaKv' ,
282- ] ,
283- } ,
284- foobar : {
285- accountId : MOCK_ACCOUNT_ID ,
286- addresses : [ 'eip155:0:0x1234567890123456789012345678901234567890' ] ,
287- } ,
454+ accountId : MOCK_ACCOUNT_ID ,
455+ addresses : [
456+ 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp:7S3P4HxJpyyigGzodYwHtCxZyUQe9JiBMHyRWXArAaKv' ,
457+ ] ,
288458 } ,
289459 } ) ;
290460 } ) ;
0 commit comments