@@ -545,6 +545,111 @@ describe('SnapInterfaceController', () => {
545
545
expect ( state ) . toStrictEqual ( { foo : { baz : null } } ) ;
546
546
} ) ;
547
547
548
+ it ( 'can update an interface and context' , async ( ) => {
549
+ const rootMessenger = getRootSnapInterfaceControllerMessenger ( ) ;
550
+ const controllerMessenger =
551
+ getRestrictedSnapInterfaceControllerMessenger ( rootMessenger ) ;
552
+
553
+ /* eslint-disable-next-line no-new */
554
+ new SnapInterfaceController ( {
555
+ messenger : controllerMessenger ,
556
+ } ) ;
557
+
558
+ const components = form ( {
559
+ name : 'foo' ,
560
+ children : [ input ( { name : 'bar' } ) ] ,
561
+ } ) ;
562
+
563
+ const newContent = form ( {
564
+ name : 'foo' ,
565
+ children : [ input ( { name : 'baz' } ) ] ,
566
+ } ) ;
567
+
568
+ const context = { foo : 'bar' } ;
569
+
570
+ const id = await rootMessenger . call (
571
+ 'SnapInterfaceController:createInterface' ,
572
+ MOCK_SNAP_ID ,
573
+ components ,
574
+ context ,
575
+ ) ;
576
+
577
+ const newContext = { foo : 'baz' } ;
578
+
579
+ await rootMessenger . call (
580
+ 'SnapInterfaceController:updateInterface' ,
581
+ MOCK_SNAP_ID ,
582
+ id ,
583
+ newContent ,
584
+ newContext ,
585
+ ) ;
586
+
587
+ const {
588
+ content,
589
+ state,
590
+ context : interfaceContext ,
591
+ } = rootMessenger . call (
592
+ 'SnapInterfaceController:getInterface' ,
593
+ MOCK_SNAP_ID ,
594
+ id ,
595
+ ) ;
596
+
597
+ expect ( content ) . toStrictEqual ( getJsxElementFromComponent ( newContent ) ) ;
598
+ expect ( state ) . toStrictEqual ( { foo : { baz : null } } ) ;
599
+ expect ( interfaceContext ) . toStrictEqual ( newContext ) ;
600
+ } ) ;
601
+
602
+ it ( 'does not replace context if none is provided' , async ( ) => {
603
+ const rootMessenger = getRootSnapInterfaceControllerMessenger ( ) ;
604
+ const controllerMessenger =
605
+ getRestrictedSnapInterfaceControllerMessenger ( rootMessenger ) ;
606
+
607
+ /* eslint-disable-next-line no-new */
608
+ new SnapInterfaceController ( {
609
+ messenger : controllerMessenger ,
610
+ } ) ;
611
+
612
+ const components = form ( {
613
+ name : 'foo' ,
614
+ children : [ input ( { name : 'bar' } ) ] ,
615
+ } ) ;
616
+
617
+ const newContent = form ( {
618
+ name : 'foo' ,
619
+ children : [ input ( { name : 'baz' } ) ] ,
620
+ } ) ;
621
+
622
+ const context = { foo : 'bar' } ;
623
+
624
+ const id = await rootMessenger . call (
625
+ 'SnapInterfaceController:createInterface' ,
626
+ MOCK_SNAP_ID ,
627
+ components ,
628
+ context ,
629
+ ) ;
630
+
631
+ await rootMessenger . call (
632
+ 'SnapInterfaceController:updateInterface' ,
633
+ MOCK_SNAP_ID ,
634
+ id ,
635
+ newContent ,
636
+ ) ;
637
+
638
+ const {
639
+ content,
640
+ state,
641
+ context : interfaceContext ,
642
+ } = rootMessenger . call (
643
+ 'SnapInterfaceController:getInterface' ,
644
+ MOCK_SNAP_ID ,
645
+ id ,
646
+ ) ;
647
+
648
+ expect ( content ) . toStrictEqual ( getJsxElementFromComponent ( newContent ) ) ;
649
+ expect ( state ) . toStrictEqual ( { foo : { baz : null } } ) ;
650
+ expect ( interfaceContext ) . toStrictEqual ( context ) ;
651
+ } ) ;
652
+
548
653
it ( 'throws if a link is on the phishing list' , async ( ) => {
549
654
const rootMessenger = getRootSnapInterfaceControllerMessenger ( ) ;
550
655
const controllerMessenger = getRestrictedSnapInterfaceControllerMessenger (
0 commit comments