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

feat: default session id in frontend api (#5083)

This commit is contained in:
Mateusz Kwasniewski 2023-10-18 16:19:03 +02:00 committed by GitHub
parent f8fba501ae
commit 1f8d12bcdc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 49 additions and 2 deletions

View File

@ -74,12 +74,19 @@ export class ProxyService {
const client = await this.clientForProxyToken(token);
const definitions = client.getFeatureToggleDefinitions() || [];
const sessionId = context.sessionId || String(Math.random());
return definitions
.filter((feature) => client.isEnabled(feature.name, context))
.filter((feature) =>
client.isEnabled(feature.name, { ...context, sessionId }),
)
.map((feature) => ({
name: feature.name,
enabled: Boolean(feature.enabled),
variant: client.forceGetVariant(feature.name, context),
variant: client.getVariant(feature.name, {
...context,
sessionId,
}),
impressionData: Boolean(feature.impressionData),
}));
}

View File

@ -1236,3 +1236,43 @@ test('should return 204 if metrics are disabled', async () => {
})
.expect(204);
});
test('should resolve variable rollout percentage consistently', async () => {
const frontendToken = await createApiToken(ApiTokenType.FRONTEND);
await createFeatureToggle({
name: 'randomFeature',
enabled: true,
strategies: [
{
name: 'flexibleRollout',
constraints: [],
parameters: {
rollout: '50',
stickiness: 'default',
groupId: 'some-new',
},
variants: [
{
name: 'a',
stickiness: 'default',
weightType: 'variable',
weight: 1000,
},
],
},
],
});
for (let i = 0; i < 10; ++i) {
const { body } = await app.request
.get('/api/frontend')
.set('Authorization', frontendToken.secret)
.expect('Content-Type', /json/)
.expect(200);
if (body.toggles.length > 0) {
// disabled variant should not be possible for enabled toggles
expect(body.toggles[0].variant.name).toBe('a');
}
}
});