1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-06-27 01:19:00 +02:00

fix: flag-resolver should resolve external static context

This commit is contained in:
Ivar Conradi Østhus 2025-04-10 10:16:14 +02:00
parent 3b84db7d61
commit 33e852cccd
No known key found for this signature in database
GPG Key ID: 14F51E4841AF1DE1
3 changed files with 51 additions and 1 deletions

View File

@ -336,6 +336,7 @@ export const defaultExperimentalOptions: IExperimentalOptions = {
externalResolver: { externalResolver: {
isEnabled: (): boolean => false, isEnabled: (): boolean => false,
getVariant: () => getDefaultVariant(), getVariant: () => getDefaultVariant(),
getStaticContext: () => ({}),
}, },
}; };
@ -358,4 +359,5 @@ export interface IFlagResolver {
export interface IExternalFlagResolver { export interface IExternalFlagResolver {
isEnabled: (flagName: IFlagKey, context?: IFlagContext) => boolean; isEnabled: (flagName: IFlagKey, context?: IFlagContext) => boolean;
getVariant: (flagName: IFlagKey, context?: IFlagContext) => Variant; getVariant: (flagName: IFlagKey, context?: IFlagContext) => Variant;
getStaticContext: () => IFlagContext;
} }

View File

@ -35,6 +35,7 @@ test('should use external resolver for dynamic flags', () => {
} }
}, },
getVariant: () => getDefaultVariant(), getVariant: () => getDefaultVariant(),
getStaticContext: () => ({}),
}; };
const config = { const config = {
@ -55,6 +56,7 @@ test('should not use external resolver for enabled experiments', () => {
return false; return false;
}, },
getVariant: () => getDefaultVariant(), getVariant: () => getDefaultVariant(),
getStaticContext: () => ({}),
}; };
const config = { const config = {
@ -75,6 +77,7 @@ test('should load experimental flags', () => {
return false; return false;
}, },
getVariant: () => getDefaultVariant(), getVariant: () => getDefaultVariant(),
getStaticContext: () => ({}),
}; };
const config = { const config = {
@ -96,6 +99,7 @@ test('should load experimental flags from external provider', () => {
} }
}, },
getVariant: () => getDefaultVariant(), getVariant: () => getDefaultVariant(),
getStaticContext: () => ({}),
}; };
const config = { const config = {
@ -127,6 +131,7 @@ test('should support variant flags', () => {
} }
return getDefaultVariant(); return getDefaultVariant();
}, },
getStaticContext: () => ({}),
}; };
const config = { const config = {
@ -196,6 +201,7 @@ test('should call external resolver getVariant when not overridden to be true, e
} }
return getDefaultVariant(); return getDefaultVariant();
}, },
getStaticContext: () => ({}),
}; };
const config = { const config = {
@ -218,3 +224,45 @@ test('should call external resolver getVariant when not overridden to be true, e
variant, 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' });
});

View File

@ -63,7 +63,7 @@ export default class FlagResolver implements IFlagResolver {
} }
getStaticContext(): IFlagContext { getStaticContext(): IFlagContext {
return {}; return this.externalResolver.getStaticContext();
} }
} }