Skip to content

Commit e5b6d39

Browse files
committed
test: validate default extensions and graceful degredation of slim bundle
1 parent 3a845d7 commit e5b6d39

File tree

1 file changed

+70
-4
lines changed

1 file changed

+70
-4
lines changed

packages/browser/src/__tests__/extension-classes.test.ts

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

Comments
 (0)