From 80f77cd104f4d5127fd463bea63b5d07de05c962 Mon Sep 17 00:00:00 2001 From: Brian Pilati Date: Tue, 16 Sep 2025 09:44:55 -0500 Subject: [PATCH] fix(datalayer): fixed to handle datalayer existence --- .../core/services/help-scout.service.spec.ts | 128 ++++++++++++------ src/app/core/services/help-scout.service.ts | 13 +- 2 files changed, 98 insertions(+), 43 deletions(-) diff --git a/src/app/core/services/help-scout.service.spec.ts b/src/app/core/services/help-scout.service.spec.ts index 3bb9469dc..8f7603aea 100644 --- a/src/app/core/services/help-scout.service.spec.ts +++ b/src/app/core/services/help-scout.service.spec.ts @@ -9,57 +9,107 @@ import { UserSelectors } from '@core/store/user/user.selectors'; import { HelpScoutService } from './help-scout.service'; describe('HelpScoutService', () => { - let storeMock: Partial; + const storeMock: Partial = { + selectSignal: jest.fn().mockImplementation((selector) => { + if (selector === UserSelectors.isAuthenticated) { + return authSignal; + } + return signal(null); // fallback + }), + }; let service: HelpScoutService; let mockWindow: any; const authSignal = signal(false); - beforeEach(() => { - mockWindow = { - dataLayer: {}, - }; - - storeMock = { - selectSignal: jest.fn().mockImplementation((selector) => { - if (selector === UserSelectors.isAuthenticated) { - return authSignal; - } - return signal(null); // fallback - }), - }; - - TestBed.configureTestingModule({ - providers: [{ provide: WINDOW, useValue: mockWindow }, HelpScoutService, { provide: Store, useValue: storeMock }], + afterEach(() => { + jest.clearAllMocks(); + }); + + describe('initialization - no dataLayer', () => { + beforeEach(() => { + mockWindow = {}; + TestBed.configureTestingModule({ + providers: [ + { provide: WINDOW, useValue: mockWindow }, + HelpScoutService, + { provide: Store, useValue: storeMock }, + ], + }); + + service = TestBed.inject(HelpScoutService); }); - service = TestBed.inject(HelpScoutService); - }); + it('should initialize dataLayer with default values', () => { + expect(mockWindow.dataLayer).toEqual({ + loggedIn: false, + resourceType: undefined, + }); + }); - it('should initialize dataLayer with default values', () => { - expect(mockWindow.dataLayer).toEqual({ - loggedIn: false, - resourceType: undefined, + it('should set the resourceType', () => { + service.setResourceType('project'); + expect(mockWindow.dataLayer.resourceType).toBe('project'); }); - }); - it('should set the resourceType', () => { - service.setResourceType('project'); - expect(mockWindow.dataLayer.resourceType).toBe('project'); - }); + it('should unset the resourceType', () => { + service.setResourceType('node'); + service.unsetResourceType(); + expect(mockWindow.dataLayer.resourceType).toBeUndefined(); + }); - it('should unset the resourceType', () => { - service.setResourceType('node'); - service.unsetResourceType(); - expect(mockWindow.dataLayer.resourceType).toBeUndefined(); + it('should set loggedIn to true or false', () => { + authSignal.set(true); + TestBed.flushEffects(); + expect(mockWindow.dataLayer.loggedIn).toBeTruthy(); + + authSignal.set(false); + TestBed.flushEffects(); + expect(mockWindow.dataLayer.loggedIn).toBeFalsy(); + }); }); - it('should set loggedIn to true or false', () => { - authSignal.set(true); - TestBed.flushEffects(); - expect(mockWindow.dataLayer.loggedIn).toBeTruthy(); + describe('initialization - dataLayer', () => { + beforeEach(() => { + mockWindow = { + dataLayer: {}, + }; + TestBed.configureTestingModule({ + providers: [ + { provide: WINDOW, useValue: mockWindow }, + HelpScoutService, + { provide: Store, useValue: storeMock }, + ], + }); - authSignal.set(false); - TestBed.flushEffects(); - expect(mockWindow.dataLayer.loggedIn).toBeFalsy(); + service = TestBed.inject(HelpScoutService); + }); + + it('should initialize dataLayer with default values', () => { + expect(mockWindow.dataLayer).toEqual({ + loggedIn: false, + resourceType: undefined, + }); + }); + + it('should set the resourceType', () => { + service.setResourceType('project'); + expect(mockWindow.dataLayer.resourceType).toBe('project'); + }); + + it('should unset the resourceType', () => { + service.setResourceType('node'); + service.unsetResourceType(); + expect(mockWindow.dataLayer.resourceType).toBeUndefined(); + }); + + it('should set loggedIn to true or false', () => { + authSignal.set(true); + TestBed.flushEffects(); + expect(mockWindow.dataLayer.loggedIn).toBeTruthy(); + + authSignal.set(false); + TestBed.flushEffects(); + expect(mockWindow.dataLayer.loggedIn).toBeFalsy(); + }); }); }); diff --git a/src/app/core/services/help-scout.service.ts b/src/app/core/services/help-scout.service.ts index 1be92f992..7f33b002b 100644 --- a/src/app/core/services/help-scout.service.ts +++ b/src/app/core/services/help-scout.service.ts @@ -51,10 +51,15 @@ export class HelpScoutService { * - `resourceType`: undefined */ constructor() { - this.window.dataLayer = { - loggedIn: false, - resourceType: undefined, - }; + if (this.window.dataLayer) { + this.window.dataLayer.loggedIn = false; + this.window.dataLayer.resourceType = undefined; + } else { + this.window.dataLayer = { + loggedIn: false, + resourceType: undefined, + }; + } effect(() => { this.window.dataLayer.loggedIn = this.isAuthenticated();