1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-01-31 00:16:47 +01:00

fix: flag resolver get variant (#6020)

https://linear.app/unleash/issue/2-1880/fix-flag-resolver-getvariant-behavior

Fixes the flag resolver `getVariant` behavior when there's a variant
object set in `experimental` - The flag resolver should call the
external resolver `getVariant` when not overridden to be true, even if
set as variant object in `experimental`.

Related: https://github.com/Unleash/unleash/pull/3808
This commit is contained in:
Nuno Góis 2024-01-24 11:53:04 +00:00 committed by GitHub
parent cee2500a4d
commit 331033408c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 42 additions and 1 deletions

View File

@ -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,
);
});

View File

@ -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);
}