From 33e852cccd4098661fa844fca1388c22af826635 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ivar=20Conradi=20=C3=98sthus?= Date: Thu, 10 Apr 2025 10:16:14 +0200 Subject: [PATCH] fix: flag-resolver should resolve external static context --- src/lib/types/experimental.ts | 2 ++ src/lib/util/flag-resolver.test.ts | 48 ++++++++++++++++++++++++++++++ src/lib/util/flag-resolver.ts | 2 +- 3 files changed, 51 insertions(+), 1 deletion(-) diff --git a/src/lib/types/experimental.ts b/src/lib/types/experimental.ts index e4b56ab478..a87021c56a 100644 --- a/src/lib/types/experimental.ts +++ b/src/lib/types/experimental.ts @@ -336,6 +336,7 @@ export const defaultExperimentalOptions: IExperimentalOptions = { externalResolver: { isEnabled: (): boolean => false, getVariant: () => getDefaultVariant(), + getStaticContext: () => ({}), }, }; @@ -358,4 +359,5 @@ export interface IFlagResolver { export interface IExternalFlagResolver { isEnabled: (flagName: IFlagKey, context?: IFlagContext) => boolean; getVariant: (flagName: IFlagKey, context?: IFlagContext) => Variant; + getStaticContext: () => IFlagContext; } diff --git a/src/lib/util/flag-resolver.test.ts b/src/lib/util/flag-resolver.test.ts index 621bd4cba8..e63adc56db 100644 --- a/src/lib/util/flag-resolver.test.ts +++ b/src/lib/util/flag-resolver.test.ts @@ -35,6 +35,7 @@ test('should use external resolver for dynamic flags', () => { } }, getVariant: () => getDefaultVariant(), + getStaticContext: () => ({}), }; const config = { @@ -55,6 +56,7 @@ test('should not use external resolver for enabled experiments', () => { return false; }, getVariant: () => getDefaultVariant(), + getStaticContext: () => ({}), }; const config = { @@ -75,6 +77,7 @@ test('should load experimental flags', () => { return false; }, getVariant: () => getDefaultVariant(), + getStaticContext: () => ({}), }; const config = { @@ -96,6 +99,7 @@ test('should load experimental flags from external provider', () => { } }, getVariant: () => getDefaultVariant(), + getStaticContext: () => ({}), }; const config = { @@ -127,6 +131,7 @@ test('should support variant flags', () => { } return getDefaultVariant(); }, + getStaticContext: () => ({}), }; const config = { @@ -196,6 +201,7 @@ test('should call external resolver getVariant when not overridden to be true, e } return getDefaultVariant(); }, + getStaticContext: () => ({}), }; const config = { @@ -218,3 +224,45 @@ test('should call external resolver getVariant when not overridden to be true, e variant, ); }); + +test('should call external resolver getStaticContext ', () => { + 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(); + }, + getStaticContext: () => { + return { clientId: 'red' }; + }, + }; + + const config = { + flags: { + variantFlag: { + name: 'variant-flag', + enabled: false, + payload: { + type: PayloadType.JSON, + value: '', + }, + }, + }, + externalResolver, + }; + + const resolver = new FlagResolver(config as IExperimentalOptions); + + expect(resolver.getStaticContext()).toStrictEqual({ clientId: 'red' }); +}); diff --git a/src/lib/util/flag-resolver.ts b/src/lib/util/flag-resolver.ts index e119d1abdc..6589bbe1a2 100644 --- a/src/lib/util/flag-resolver.ts +++ b/src/lib/util/flag-resolver.ts @@ -63,7 +63,7 @@ export default class FlagResolver implements IFlagResolver { } getStaticContext(): IFlagContext { - return {}; + return this.externalResolver.getStaticContext(); } }