diff --git a/src/lib/util/flag-resolver.test.ts b/src/lib/util/flag-resolver.test.ts index 6366e62e9a..7bc55bcb3b 100644 --- a/src/lib/util/flag-resolver.test.ts +++ b/src/lib/util/flag-resolver.test.ts @@ -174,3 +174,44 @@ test('should expose an helper to get variant value', () => { foo: 'bar', }); }); + +test('should call external resolver getVariant when not overridden to be true, even if set as object in experimental', () => { + const variant = { + enabled: true, + name: 'variant', + payload: { + type: PayloadType.STRING, + value: 'variant-A', + }, + }; + + const externalResolver = { + isEnabled: () => true, + getVariant: (name: string) => { + if (name === 'variantFlag') { + return variant; + } + return getDefaultVariant(); + }, + }; + + const config = { + flags: { + variantFlag: { + name: 'variant-flag', + enabled: false, + payload: { + type: PayloadType.JSON, + value: '', + }, + }, + }, + externalResolver, + }; + + const resolver = new FlagResolver(config as IExperimentalOptions); + + expect(resolver.getVariant('variantFlag' as IFlagKey)).toStrictEqual( + variant, + ); +}); diff --git a/src/lib/util/flag-resolver.ts b/src/lib/util/flag-resolver.ts index 55afcbfc6d..726249672d 100644 --- a/src/lib/util/flag-resolver.ts +++ b/src/lib/util/flag-resolver.ts @@ -57,7 +57,7 @@ export default class FlagResolver implements IFlagResolver { const exp = this.experiments[expName]; if (exp) { if (typeof exp === 'boolean') return getDefaultVariant(); - else return exp; + else if (exp.enabled) return exp; } return this.externalResolver.getVariant(expName, context); }