Skip to content

Commit 8465bec

Browse files
committed
test: integ tests for entitlments changed firing verification
1 parent 5d9d000 commit 8465bec

File tree

3 files changed

+70
-0
lines changed

3 files changed

+70
-0
lines changed

test/spec/login-browser-integ-test.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ define(function (require, exports, module) {
4040
LoginBrowserExports,
4141
ProDialogsExports,
4242
EntitlementsExports,
43+
entitlementsService,
4344
originalOpen,
4445
originalFetch;
4546

@@ -77,6 +78,9 @@ define(function (require, exports, module) {
7778
LoginBrowserExports = testWindow._test_login_browser_exports;
7879
ProDialogsExports = testWindow._test_pro_dlg_login_exports;
7980
EntitlementsExports = testWindow._test_entitlements_exports;
81+
entitlementsService = EntitlementsExports.EntitlementsService;
82+
entitlementsService.on(entitlementsService.EVENT_ENTITLEMENTS_CHANGED,
83+
LoginShared.entitlmentsChangedHandler);
8084

8185
// Store original functions for restoration
8286
originalOpen = testWindow.open;
@@ -109,6 +113,8 @@ define(function (require, exports, module) {
109113

110114
afterAll(async function () {
111115
// Restore original functions
116+
entitlementsService.off(entitlementsService.EVENT_ENTITLEMENTS_CHANGED,
117+
LoginShared.entitlmentsChangedHandler);
112118
testWindow.open = originalOpen;
113119

114120
// Restore all fetch function overrides

test/spec/login-desktop-integ-test.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ define(function (require, exports, module) {
4747
LoginDesktopExports,
4848
ProDialogsExports,
4949
EntitlementsExports,
50+
entitlementsService,
5051
originalOpenURLInDefaultBrowser,
5152
originalCopyToClipboard,
5253
originalFetch;
@@ -84,6 +85,9 @@ define(function (require, exports, module) {
8485
LoginDesktopExports = testWindow._test_login_desktop_exports;
8586
ProDialogsExports = testWindow._test_pro_dlg_login_exports;
8687
EntitlementsExports = testWindow._test_entitlements_exports;
88+
entitlementsService = EntitlementsExports.EntitlementsService;
89+
entitlementsService.on(entitlementsService.EVENT_ENTITLEMENTS_CHANGED,
90+
LoginShared.entitlmentsChangedHandler);
8791

8892
// Store original functions for restoration
8993
originalOpenURLInDefaultBrowser = testWindow.Phoenix.app.openURLInDefaultBrowser;
@@ -117,6 +121,8 @@ define(function (require, exports, module) {
117121

118122
afterAll(async function () {
119123
// Restore original functions
124+
entitlementsService.off(entitlementsService.EVENT_ENTITLEMENTS_CHANGED,
125+
LoginShared.entitlmentsChangedHandler);
120126
testWindow.Phoenix.app.openURLInDefaultBrowser = originalOpenURLInDefaultBrowser;
121127
testWindow.Phoenix.app.copyToClipboard = originalCopyToClipboard;
122128

test/spec/login-shared.js

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)