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

feat: Add suppport for variant overrides

This commit is contained in:
ivaosthu 2019-01-29 09:21:54 +01:00 committed by Ivar Conradi Østhus
parent 4d6fab8ea0
commit b36fc73a7b
3 changed files with 105 additions and 0 deletions

View File

@ -24,6 +24,15 @@ const variantsSchema = joi.object().keys({
value: joi.string().required(),
})
.optional(),
overrides: joi.array().items(
joi
.object()
.keys({
field: joi.string().required(),
values: joi.array().items(joi.string()),
})
.optional()
),
});
const featureShema = joi

View File

@ -25,3 +25,71 @@ test('should be valid toggle name', t => {
const { value } = joi.validate(toggle, featureShema);
t.deepEqual(value, toggle);
});
test('should strip extra variant fields', t => {
const toggle = {
name: 'app.name',
enabled: false,
strategies: [{ name: 'default' }],
variants: [
{
name: 'variant-a',
weight: 1,
unkown: 'not-allowed',
},
],
};
const { value } = joi.validate(toggle, featureShema);
t.notDeepEqual(value, toggle);
t.falsy(value.variants[0].unkown);
});
test('should be possible to define variant overrides', t => {
const toggle = {
name: 'app.name',
enabled: false,
strategies: [{ name: 'default' }],
variants: [
{
name: 'variant-a',
weight: 1,
overrides: [
{
field: 'userId',
values: ['123'],
},
],
},
],
};
const { value, error } = joi.validate(toggle, featureShema);
t.deepEqual(value, toggle);
t.falsy(error);
});
test('variant overrides must have corect shape', async t => {
t.plan(1);
const toggle = {
name: 'app.name',
enabled: false,
strategies: [{ name: 'default' }],
variants: [
{
name: 'variant-a',
weight: 1,
overrides: {
userId: ['not-alloed'],
sessionId: ['not-alloed'],
},
},
],
};
try {
await joi.validate(toggle, featureShema);
} catch (error) {
t.is(error.details[0].message, '"overrides" must be an array');
}
});

View File

@ -234,3 +234,31 @@ test.serial('should not be possible to create archived toggle', async t => {
.expect(400)
.then(destroy);
});
test.serial('creates new feature toggle with variant overrides', async t => {
t.plan(0);
const { request, destroy } = await setupApp('feature_api_serial');
return request
.post('/api/admin/features')
.send({
name: 'com.test.variants',
enabled: false,
strategies: [{ name: 'default' }],
variants: [
{
name: 'variant1',
weight: 50,
overrides: [
{
field: 'userId',
values: ['123'],
},
],
},
{ name: 'variant2', weight: 50 },
],
})
.set('Content-Type', 'application/json')
.expect(201)
.then(destroy);
});