@@ -3,24 +3,25 @@ import TestContext from '__test__/support/environment/TestContext';
33import { TestEnvironment } from '__test__/support/environment/TestEnvironment' ;
44import { server } from '__test__/support/mocks/server' ;
55import { http , HttpResponse } from 'msw' ;
6- import { OneSignalDeferredLoadedCallback } from 'src/page/models/OneSignalDeferredLoadedCallback ' ;
6+ import InitHelper from 'src/shared/helpers/InitHelper ' ;
77import { ConfigIntegrationKind } from 'src/shared/models/AppConfig' ;
88
9- vi . useFakeTimers ( ) ;
10-
11- declare global {
12- interface Window {
13- OneSignalDeferred : OneSignalDeferredLoadedCallback [ ] ;
14- }
15- }
16-
179const serverConfig = TestContext . getFakeServerAppConfig (
1810 ConfigIntegrationKind . Custom ,
1911) ;
2012
13+ vi . useFakeTimers ( ) ;
14+ vi . mock ( 'src/shared/utils/bowserCastle' ) ;
15+
16+ // skip over creating dom elements
17+ vi . spyOn ( InitHelper , 'sessionInit' ) . mockImplementation ( ( ) => {
18+ return Promise . resolve ( ) ;
19+ } ) ;
20+
2121describe ( 'pageSdkInit' , ( ) => {
2222 beforeEach ( async ( ) => {
23- window . OneSignalDeferred = [ ] ;
23+ const cssURL =
24+ 'https://onesignal.com/sdks/web/v16/OneSignalSDK.page.styles.css' ;
2425
2526 server . use (
2627 http . get ( '**/sync/*/web' , ( { request } ) => {
@@ -35,12 +36,20 @@ describe('pageSdkInit', () => {
3536 } ,
3637 ) ;
3738 } ) ,
39+ http . get ( cssURL , ( ) => HttpResponse . text ( '' ) ) ,
3840 ) ;
41+
3942 await TestEnvironment . initialize ( ) ;
4043 } ) ;
4144
45+ afterEach ( ( ) => {
46+ vi . resetModules ( ) ;
47+ localStorage . clear ( ) ;
48+ OneSignal . _initCalled = false ;
49+ } ) ;
50+
4251 test ( 'can handle init followed by logout' , async ( ) => {
43- window . OneSignalDeferred = [ ] ;
52+ window . OneSignalDeferred = window . OneSignalDeferred || [ ] ;
4453 window . OneSignalDeferred . push ( async function ( OneSignal ) {
4554 await OneSignal . init ( {
4655 appId : APP_ID ,
@@ -52,6 +61,21 @@ describe('pageSdkInit', () => {
5261
5362 await import ( './pageSdkInit' ) ;
5463 await vi . runOnlyPendingTimersAsync ( ) ;
55- expect ( OneSignal . coreDirector ) . toBeDefined ( ) ;
64+ expect ( window . OneSignal . coreDirector ) . toBeDefined ( ) ;
65+ } ) ;
66+
67+ test ( 'can process deferred items long after page init' , async ( ) => {
68+ await import ( './pageSdkInit' ) ;
69+ const initSpy = vi . spyOn ( window . OneSignal , 'init' ) ;
70+
71+ window . OneSignalDeferred = window . OneSignalDeferred || [ ] ;
72+ window . OneSignalDeferred . push ( async function ( OneSignal ) {
73+ await OneSignal . init ( {
74+ appId : APP_ID ,
75+ } ) ;
76+ } ) ;
77+
78+ await vi . runOnlyPendingTimersAsync ( ) ;
79+ expect ( initSpy ) . toHaveBeenCalled ( ) ;
5680 } ) ;
5781} ) ;
0 commit comments