@@ -289,20 +289,38 @@ define(function (require, exports, module) {
289289 EntitlementsExports = _EntitlementsExports ;
290290 }
291291
292+ let entitlementsEventFired = false ;
293+ function entitlmentsChangedHandler ( ) {
294+ entitlementsEventFired = true ;
295+ }
296+
292297 function setupSharedTests ( ) {
293298
294299 it ( "should complete login and logout flow" , async function ( ) {
300+ entitlementsEventFired = false ;
301+
295302 // Setup basic user mock
296303 setupProUserMock ( false ) ;
297304
298305 // Perform full login flow
299306 await performFullLoginFlow ( ) ;
300307 expect ( LoginServiceExports . LoginService . isLoggedIn ( ) ) . toBe ( true ) ;
301308
309+ // Wait for entitlements event to fire after login
310+ await awaitsFor ( ( ) => entitlementsEventFired , "Entitlements event to fire after login" ) ;
311+ expect ( entitlementsEventFired ) . toBe ( true ) ;
312+
313+ // Reset flag for logout test
314+ entitlementsEventFired = false ;
315+
302316 // Perform full logout flow
303317 await performFullLogoutFlow ( ) ;
304318 expect ( LoginServiceExports . LoginService . isLoggedIn ( ) ) . toBe ( false ) ;
305319 verifyProfileIconBlanked ( ) ;
320+
321+ // Wait for entitlements event to fire after logout
322+ await awaitsFor ( ( ) => entitlementsEventFired , "Entitlements event to fire after logout" ) ;
323+ expect ( entitlementsEventFired ) . toBe ( true ) ;
306324 } ) ;
307325
308326 it ( "should update profile icon after login" , async function ( ) {
@@ -392,6 +410,8 @@ define(function (require, exports, module) {
392410 it ( "should show pro branding for user with pro subscription (expired trial)" , async function ( ) {
393411 console . log ( "llgT: Starting pro user with expired trial test" ) ;
394412
413+ entitlementsEventFired = false ;
414+
395415 // Setup: Pro subscription + expired trial
396416 setupProUserMock ( true ) ;
397417 await setupExpiredTrial ( ) ;
@@ -408,6 +428,10 @@ define(function (require, exports, module) {
408428 await performFullLoginFlow ( ) ;
409429 await verifyProBranding ( true , "pro branding to appear after pro user login" ) ;
410430
431+ // Wait for entitlements event to fire after login
432+ await awaitsFor ( ( ) => entitlementsEventFired , "Entitlements event to fire after login" ) ;
433+ expect ( entitlementsEventFired ) . toBe ( true ) ;
434+
411435 // Verify entitlements API consistency for logged in pro user
412436 await verifyIsInProTrialEntitlement ( false , "pro user should not be in trial" ) ;
413437 await verifyPlanEntitlements ( { isSubscriber : true , paidSubscriber : true } , "pro user should have paid subscriber plan" ) ;
@@ -423,9 +447,16 @@ define(function (require, exports, module) {
423447 // Close popup
424448 $profileButton . trigger ( 'click' ) ;
425449
450+ // Reset flag for logout test
451+ entitlementsEventFired = false ;
452+
426453 // Perform logout
427454 await performFullLogoutFlow ( ) ;
428455
456+ // Wait for entitlements event to fire after logout
457+ await awaitsFor ( ( ) => entitlementsEventFired , "Entitlements event to fire after logout" ) ;
458+ expect ( entitlementsEventFired ) . toBe ( true ) ;
459+
429460 // For user with pro subscription + expired trial:
430461 // After logout, pro branding should disappear because:
431462 // 1. No server entitlements (logged out)
@@ -441,6 +472,8 @@ define(function (require, exports, module) {
441472 it ( "should show trial branding for user without pro subscription (active trial)" , async function ( ) {
442473 console . log ( "llgT: Starting trial user test" ) ;
443474
475+ entitlementsEventFired = false ;
476+
444477 // Setup: No pro subscription + active trial (15 days)
445478 setupProUserMock ( false ) ;
446479 await setupTrialState ( 15 ) ;
@@ -459,6 +492,10 @@ define(function (require, exports, module) {
459492 // Verify pro branding remains after login
460493 await verifyProBranding ( true , "after trial user login" ) ;
461494
495+ // Wait for entitlements event to fire after login
496+ await awaitsFor ( ( ) => entitlementsEventFired , "Entitlements event to fire after login" ) ;
497+ expect ( entitlementsEventFired ) . toBe ( true ) ;
498+
462499 // Verify entitlements API consistency for logged in trial user
463500 await verifyIsInProTrialEntitlement ( true , "user should still be in trial after login" ) ;
464501 await verifyPlanEntitlements ( { isSubscriber : true , paidSubscriber : false } , "trial user should have isSubscriber true but paidSubscriber false" ) ;
@@ -474,9 +511,16 @@ define(function (require, exports, module) {
474511 // Close popup
475512 $profileButton . trigger ( 'click' ) ;
476513
514+ // Reset flag for logout test
515+ entitlementsEventFired = false ;
516+
477517 // Perform logout
478518 await performFullLogoutFlow ( ) ;
479519
520+ // Wait for entitlements event to fire after logout
521+ await awaitsFor ( ( ) => entitlementsEventFired , "Entitlements event to fire after logout" ) ;
522+ expect ( entitlementsEventFired ) . toBe ( true ) ;
523+
480524 // Verify pro branding remains after logout (trial continues)
481525 await verifyProBranding ( true , "Trial branding to remain after logout" ) ;
482526
@@ -541,6 +585,8 @@ define(function (require, exports, module) {
541585 it ( "should show free branding for user without pro subscription (expired trial)" , async function ( ) {
542586 console . log ( "llgT: Starting desktop trial user test" ) ;
543587
588+ entitlementsEventFired = false ;
589+
544590 // Setup: No pro subscription + expired trial
545591 setupProUserMock ( false ) ;
546592 await setupExpiredTrial ( ) ;
@@ -562,6 +608,10 @@ define(function (require, exports, module) {
562608 // Verify pro branding remains after login
563609 await verifyProBranding ( false , "after trial free user login" ) ;
564610
611+ // Wait for entitlements event to fire after login
612+ await awaitsFor ( ( ) => entitlementsEventFired , "Entitlements event to fire after login" ) ;
613+ expect ( entitlementsEventFired ) . toBe ( true ) ;
614+
565615 // Verify entitlements API consistency for logged in free user
566616 await verifyPlanEntitlements ( { isSubscriber : false , paidSubscriber : false , name : testWindow . Strings . USER_FREE_PLAN_NAME_DO_NOT_TRANSLATE } ,
567617 "free plan for logged in user with expired trial" ) ;
@@ -579,9 +629,16 @@ define(function (require, exports, module) {
579629 // Close popup
580630 $profileButton . trigger ( 'click' ) ;
581631
632+ // Reset flag for logout test
633+ entitlementsEventFired = false ;
634+
582635 // Perform logout
583636 await performFullLogoutFlow ( ) ;
584637
638+ // Wait for entitlements event to fire after logout
639+ await awaitsFor ( ( ) => entitlementsEventFired , "Entitlements event to fire after logout" ) ;
640+ expect ( entitlementsEventFired ) . toBe ( true ) ;
641+
585642 // Verify pro branding remains after logout (trial continues)
586643 await verifyProBranding ( false , "Trial branding to remain after logout" ) ;
587644
@@ -921,6 +978,7 @@ define(function (require, exports, module) {
921978 exports . popupToAppear = popupToAppear ;
922979 exports . performFullLogoutFlow = performFullLogoutFlow ;
923980 exports . verifyProfileIconBlanked = verifyProfileIconBlanked ;
981+ exports . entitlmentsChangedHandler = entitlmentsChangedHandler ;
924982 exports . VIEW_TRIAL_DAYS_LEFT = VIEW_TRIAL_DAYS_LEFT ;
925983 exports . VIEW_PHOENIX_PRO = VIEW_PHOENIX_PRO ;
926984 exports . VIEW_PHOENIX_FREE = VIEW_PHOENIX_FREE ;
0 commit comments