Skip to content

Commit 47fb9ad

Browse files
committed
fix(flags): Make sure we don't override flags when decide is disabled
1 parent ca8fad7 commit 47fb9ad

File tree

4 files changed

+53
-13
lines changed

4 files changed

+53
-13
lines changed

src/__tests__/decide.js

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ describe('Decide', () => {
170170
expect(console.error).toHaveBeenCalledWith('[PostHog.js]', 'Failed to fetch feature flags from PostHog.')
171171
})
172172

173-
it('Make sure receivedFeatureFlags is called with empty if advanced_disable_feature_flags_on_first_load is set', () => {
173+
it('Make sure receivedFeatureFlags is not called if advanced_disable_feature_flags_on_first_load is set', () => {
174174
given('decideResponse', () => ({
175175
enable_collect_everything: true,
176176
featureFlags: { 'test-flag': true },
@@ -191,6 +191,27 @@ describe('Decide', () => {
191191
expect(given.posthog.featureFlags.receivedFeatureFlags).not.toHaveBeenCalled()
192192
})
193193

194+
it('Make sure receivedFeatureFlags is not called if advanced_disable_feature_flags is set', () => {
195+
given('decideResponse', () => ({
196+
enable_collect_everything: true,
197+
featureFlags: { 'test-flag': true },
198+
}))
199+
given('config', () => ({
200+
api_host: 'https://test.com',
201+
token: 'testtoken',
202+
persistence: 'memory',
203+
advanced_disable_feature_flags: true,
204+
}))
205+
206+
given.subject()
207+
208+
expect(autocapture.afterDecideResponse).toHaveBeenCalledWith(given.decideResponse, given.posthog)
209+
expect(given.posthog.sessionRecording.afterDecideResponse).toHaveBeenCalledWith(given.decideResponse)
210+
expect(given.posthog.toolbar.afterDecideResponse).toHaveBeenCalledWith(given.decideResponse)
211+
212+
expect(given.posthog.featureFlags.receivedFeatureFlags).not.toHaveBeenCalled()
213+
})
214+
194215
it('runs site apps if opted in', () => {
195216
given('config', () => ({ api_host: 'https://test.com', opt_in_site_apps: true, persistence: 'memory' }))
196217
given('decideResponse', () => ({ siteApps: [{ id: 1, url: '/site_app/1/tokentoken/hash/' }] }))

src/__tests__/featureflags.js

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -559,25 +559,37 @@ describe('featureflags', () => {
559559
...given.instance.config,
560560
advanced_disable_feature_flags: true,
561561
}
562+
given.instance.persistence.register({
563+
$enabled_feature_flags: {
564+
'beta-feature': true,
565+
'random-feature': 'xatu',
566+
},
567+
})
562568

563569
given.featureFlags.reloadFeatureFlags()
564-
565570
jest.runAllTimers()
566571

567572
expect(given.featureFlags.getFlagVariants()).toEqual({
568-
first: 'variant-1',
569-
second: true,
573+
'beta-feature': true,
574+
'random-feature': 'xatu',
570575
})
571576

572-
// check the request sent disable_flags
573-
expect(
574-
JSON.parse(Buffer.from(given.instance._send_request.mock.calls[0][1].data, 'base64').toString())
575-
).toEqual({
576-
token: 'random fake token',
577-
distinct_id: 'blah id',
578-
person_properties: { a: 'b', c: 'd' },
579-
disable_flags: true,
577+
// check reload request was not sent
578+
expect(given.instance._send_request).not.toHaveBeenCalled()
579+
580+
// check the same for other ways to call reload flags
581+
582+
given.featureFlags.setPersonPropertiesForFlags({ a: 'b', c: 'd' })
583+
584+
jest.runAllTimers()
585+
586+
expect(given.featureFlags.getFlagVariants()).toEqual({
587+
'beta-feature': true,
588+
'random-feature': 'xatu',
580589
})
590+
591+
// check reload request was not sent
592+
expect(given.instance._send_request).not.toHaveBeenCalled()
581593
})
582594
})
583595

src/decide.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,10 @@ export class Decide {
6464
autocapture.afterDecideResponse(response, this.instance)
6565
this.instance._afterDecideResponse(response)
6666

67-
if (!this.instance.config.advanced_disable_feature_flags_on_first_load) {
67+
if (
68+
!this.instance.config.advanced_disable_feature_flags_on_first_load &&
69+
!this.instance.config.advanced_disable_feature_flags
70+
) {
6871
this.instance.featureFlags.receivedFeatureFlags(response)
6972
}
7073

src/posthog-featureflags.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,10 @@ export class PostHogFeatureFlags {
170170
}
171171

172172
_reloadFeatureFlagsRequest(): void {
173+
if (this.instance.config.advanced_disable_feature_flags) {
174+
return
175+
}
176+
173177
this.setReloadingPaused(true)
174178
const token = this.instance.config.token
175179
const personProperties = this.instance.get_property(STORED_PERSON_PROPERTIES_KEY)

0 commit comments

Comments
 (0)