@@ -101,6 +101,42 @@ describe('Settings import persistence', () => {
101101 . toBeLessThan ( context . close . mock . invocationCallOrder [ 0 ] ) ;
102102 } ) ;
103103
104+ test ( 'updates menu attributes after a browser-account restore persists' , ( ) => {
105+ const listeners = { } ;
106+ const attributes = { } ;
107+ const modalProvider = { close : jest . fn ( ) } ;
108+ context . extension . skeleton . rendered = {
109+ setAttribute : ( key , value ) => { attributes [ key ] = value ; } ,
110+ removeAttribute : ( key ) => { delete attributes [ key ] ; }
111+ } ;
112+ context . satus . storage . data = { theme : 'light' } ;
113+ context . satus . storage . get = ( key ) => context . satus . storage . data [ key ] ;
114+ context . satus . storage . import = ( callback ) => callback ( context . satus . storage . data ) ;
115+ context . satus . locale = { import : ( language , callback ) => callback ( ) } ;
116+ context . satus . parentify = jest . fn ( ) ;
117+ context . satus . isset = ( value ) => value !== undefined && value !== null ;
118+ context . satus . events . on = ( event , listener ) => { listeners [ event ] = listener ; } ;
119+ context . satus . events . trigger . mockImplementation ( ( event ) => {
120+ if ( listeners [ event ] ) listeners [ event ] ( ) ;
121+ } ) ;
122+ context . location . href = 'moz-extension://test/menu/index.html' ;
123+ vm . runInNewContext (
124+ fs . readFileSync ( path . join ( __dirname , '../../menu/index.js' ) , 'utf8' ) ,
125+ context
126+ ) ;
127+
128+ expect ( attributes . theme ) . toBe ( 'light' ) ;
129+ context . extension . pullSettings ( ) ;
130+ modal . buttons . ok . on . click . call ( { modalProvider} ) ;
131+ expect ( attributes . theme ) . toBe ( 'light' ) ;
132+ expect ( modalProvider . close ) . not . toHaveBeenCalled ( ) ;
133+
134+ storageCallback ( ) ;
135+
136+ expect ( attributes . theme ) . toBe ( 'dark' ) ;
137+ expect ( modalProvider . close ) . toHaveBeenCalledTimes ( 1 ) ;
138+ } ) ;
139+
104140 test ( 'keeps browser-account restore open until the local write completes' , ( ) => {
105141 const modalProvider = { close : jest . fn ( ) } ;
106142
0 commit comments