@@ -35,6 +35,12 @@ describe('__extensionClasses enrollment', () => {
3535 expect ( posthog . webVitalsAutocapture ) . toBeUndefined ( )
3636 expect ( posthog . productTours ) . toBeUndefined ( )
3737 expect ( posthog . siteApps ) . toBeUndefined ( )
38+ expect ( posthog . surveys ) . toBeUndefined ( )
39+ expect ( posthog . toolbar ) . toBeUndefined ( )
40+ expect ( posthog . exceptions ) . toBeUndefined ( )
41+ expect ( posthog . conversations ) . toBeUndefined ( )
42+ expect ( posthog . logs ) . toBeUndefined ( )
43+ expect ( posthog . experiments ) . toBeUndefined ( )
3844 } )
3945
4046 it ( 'initializes no extensions when none are provided and no defaults exist' , async ( ) => {
@@ -53,6 +59,12 @@ describe('__extensionClasses enrollment', () => {
5359 expect ( posthog . webVitalsAutocapture ) . toBeUndefined ( )
5460 expect ( posthog . productTours ) . toBeUndefined ( )
5561 expect ( posthog . siteApps ) . toBeUndefined ( )
62+ expect ( posthog . surveys ) . toBeUndefined ( )
63+ expect ( posthog . toolbar ) . toBeUndefined ( )
64+ expect ( posthog . exceptions ) . toBeUndefined ( )
65+ expect ( posthog . conversations ) . toBeUndefined ( )
66+ expect ( posthog . logs ) . toBeUndefined ( )
67+ expect ( posthog . experiments ) . toBeUndefined ( )
5668 } )
5769
5870 it ( '__extensionClasses overrides __defaultExtensionClasses' , async ( ) => {
@@ -85,6 +97,12 @@ describe('__extensionClasses enrollment', () => {
8597 expect ( posthog . webVitalsAutocapture ) . toBeDefined ( )
8698 expect ( posthog . productTours ) . toBeDefined ( )
8799 expect ( posthog . siteApps ) . toBeDefined ( )
100+ expect ( posthog . surveys ) . toBeDefined ( )
101+ expect ( posthog . toolbar ) . toBeDefined ( )
102+ expect ( posthog . exceptions ) . toBeDefined ( )
103+ expect ( posthog . conversations ) . toBeDefined ( )
104+ expect ( posthog . logs ) . toBeDefined ( )
105+ expect ( posthog . experiments ) . toBeDefined ( )
88106 } )
89107} )
90108
@@ -107,13 +125,19 @@ describe('extension lifecycle', () => {
107125 const allKeys = Object . keys ( AllExtensions ) . sort ( )
108126 expect ( allKeys ) . toEqual ( [
109127 'autocapture' ,
128+ 'conversations' ,
110129 'deadClicksAutocapture' ,
111130 'exceptionObserver' ,
131+ 'exceptions' ,
132+ 'experiments' ,
112133 'heatmaps' ,
113134 'historyAutocapture' ,
135+ 'logs' ,
114136 'productTours' ,
115137 'sessionRecording' ,
116138 'siteApps' ,
139+ 'surveys' ,
140+ 'toolbar' ,
117141 'tracingHeaders' ,
118142 'webVitalsAutocapture' ,
119143 ] )
@@ -173,13 +197,11 @@ describe('extension lifecycle', () => {
173197 }
174198 }
175199
176- // Use extension keys that don't have hardcoded method calls
177- // in set_config, so a spy class works without needing stubs.
178200 const posthog = await createPosthogInstance ( undefined , {
179201 __preview_deferred_init_extensions : false ,
180202 __extensionClasses : {
181- historyAutocapture : SpyExtension as any ,
182- siteApps : SpyExtension as any ,
203+ toolbar : SpyExtension as any ,
204+ conversations : SpyExtension as any ,
183205 } ,
184206 capture_pageview : false ,
185207 } )
@@ -195,4 +217,48 @@ describe('extension lifecycle', () => {
195217 expect ( onRemoteConfigSpy ) . toHaveBeenCalledWith ( remoteConfig )
196218 } )
197219 } )
220+
221+ describe ( 'graceful degradation without extensions (slim bundle)' , ( ) => {
222+ it ( 'onSurveysLoaded calls back with error when extension is not loaded' , async ( ) => {
223+ PostHog . __defaultExtensionClasses = { }
224+
225+ const posthog = await createPosthogInstance ( undefined , {
226+ __preview_deferred_init_extensions : false ,
227+ capture_pageview : false ,
228+ } )
229+
230+ const callback = jest . fn ( )
231+ posthog . onSurveysLoaded ( callback )
232+
233+ expect ( callback ) . toHaveBeenCalledWith ( [ ] , { isLoaded : false , error : 'Surveys module not available' } )
234+ } )
235+
236+ it ( 'getSurveys calls back with error when extension is not loaded' , async ( ) => {
237+ PostHog . __defaultExtensionClasses = { }
238+
239+ const posthog = await createPosthogInstance ( undefined , {
240+ __preview_deferred_init_extensions : false ,
241+ capture_pageview : false ,
242+ } )
243+
244+ const callback = jest . fn ( )
245+ posthog . getSurveys ( callback )
246+
247+ expect ( callback ) . toHaveBeenCalledWith ( [ ] , { isLoaded : false , error : 'Surveys module not available' } )
248+ } )
249+
250+ it ( 'getActiveMatchingSurveys calls back with error when extension is not loaded' , async ( ) => {
251+ PostHog . __defaultExtensionClasses = { }
252+
253+ const posthog = await createPosthogInstance ( undefined , {
254+ __preview_deferred_init_extensions : false ,
255+ capture_pageview : false ,
256+ } )
257+
258+ const callback = jest . fn ( )
259+ posthog . getActiveMatchingSurveys ( callback )
260+
261+ expect ( callback ) . toHaveBeenCalledWith ( [ ] , { isLoaded : false , error : 'Surveys module not available' } )
262+ } )
263+ } )
198264} )
0 commit comments