From 4f3a94cb86cf390f198ea526a3f8e8bc6b1ec1ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ivar=20Conradi=20=C3=98sthus?= Date: Fri, 30 Oct 2020 10:30:28 +0100 Subject: [PATCH] fix: do not allow empty ('') constrain values. related #640 --- lib/routes/admin-api/feature-schema.js | 7 ++- lib/routes/admin-api/feature-schema.test.js | 52 +++++++++++++++++++++ 2 files changed, 58 insertions(+), 1 deletion(-) diff --git a/lib/routes/admin-api/feature-schema.js b/lib/routes/admin-api/feature-schema.js index 9287139aae..e48d784cf2 100644 --- a/lib/routes/admin-api/feature-schema.js +++ b/lib/routes/admin-api/feature-schema.js @@ -8,7 +8,12 @@ const nameSchema = joi.object().keys({ name: nameType }); const constraintSchema = joi.object().keys({ contextName: joi.string(), operator: joi.string(), - values: joi.array().items(joi.string()), + values: joi.array().items( + joi + .string() + .min(1) + .max(100), + ), }); const strategiesSchema = joi.object().keys({ diff --git a/lib/routes/admin-api/feature-schema.test.js b/lib/routes/admin-api/feature-schema.test.js index e736537276..c51a0724c9 100644 --- a/lib/routes/admin-api/feature-schema.test.js +++ b/lib/routes/admin-api/feature-schema.test.js @@ -172,3 +172,55 @@ test('should keep constraints', t => { t.deepEqual(value, toggle); t.falsy(error); }); + +test('should not accept empty constraint values', t => { + const toggle = { + name: 'app.constraints.empty.value', + type: 'release', + enabled: false, + stale: false, + strategies: [ + { + name: 'default', + constraints: [ + { + contextName: 'environment', + operator: 'IN', + values: [''], + }, + ], + }, + ], + }; + + const { error } = featureShema.validate(toggle); + t.deepEqual( + error.details[0].message, + '"strategies[0].constraints[0].values[0]" is not allowed to be empty', + ); +}); + +test('should not accept empty list of constraint values', t => { + const toggle = { + name: 'app.constraints.empty.value.list', + type: 'release', + enabled: false, + stale: false, + strategies: [ + { + name: 'default', + constraints: [ + { + contextName: 'environment', + operator: 'IN', + values: [], + }, + ], + }, + ], + }; + + const { value, error } = featureShema.validate(toggle); + t.deepEqual(value, toggle); + t.falsy(error); +});