From 8ab43b84d5dd9494d22d3ae80274f83b7836ecb7 Mon Sep 17 00:00:00 2001 From: Naz Date: Fri, 4 Jun 2021 18:32:26 +0400 Subject: [PATCH] Enabled 'labs' to be accepted as a value in Settings API refs https://github.com/TryGhost/Team/issues/757 - As labs has been added back to the settings table the APIs are reverting back to accepting it as a value --- .../utils/serializers/input/settings.js | 3 +- .../v2/utils/serializers/input/settings.js | 3 +- .../v3/utils/serializers/input/settings.js | 3 +- test/api-acceptance/admin/settings_spec.js | 20 ++++--- .../api/canary/admin/settings_spec.js | 57 +++++++++++-------- test/regression/api/v2/admin/settings_spec.js | 57 +++++++++++-------- test/regression/api/v3/admin/settings_spec.js | 57 +++++++++++-------- 7 files changed, 113 insertions(+), 87 deletions(-) diff --git a/core/server/api/canary/utils/serializers/input/settings.js b/core/server/api/canary/utils/serializers/input/settings.js index 3e7d2f2baa..fbba1e2057 100644 --- a/core/server/api/canary/utils/serializers/input/settings.js +++ b/core/server/api/canary/utils/serializers/input/settings.js @@ -5,8 +5,7 @@ const settingsCache = require('../../../../../services/settings/cache'); const DEPRECATED_SETTINGS = [ 'bulk_email_settings', - 'slack', - 'labs' + 'slack' ]; const deprecatedSupportedSettingsOneToManyMap = { diff --git a/core/server/api/v2/utils/serializers/input/settings.js b/core/server/api/v2/utils/serializers/input/settings.js index 498c5694fe..8f6b99d81d 100644 --- a/core/server/api/v2/utils/serializers/input/settings.js +++ b/core/server/api/v2/utils/serializers/input/settings.js @@ -5,8 +5,7 @@ const settingsCache = require('../../../../../services/settings/cache'); const DEPRECATED_SETTINGS = [ 'bulk_email_settings', - 'slack', - 'labs' + 'slack' ]; const deprecatedSupportedSettingsOneToManyMap = { diff --git a/core/server/api/v3/utils/serializers/input/settings.js b/core/server/api/v3/utils/serializers/input/settings.js index 5e89a63ddd..6b0fc2663e 100644 --- a/core/server/api/v3/utils/serializers/input/settings.js +++ b/core/server/api/v3/utils/serializers/input/settings.js @@ -5,8 +5,7 @@ const settingsCache = require('../../../../../services/settings/cache'); const DEPRECATED_SETTINGS = [ 'bulk_email_settings', - 'slack', - 'labs' + 'slack' ]; const deprecatedSupportedSettingsOneToManyMap = { diff --git a/test/api-acceptance/admin/settings_spec.js b/test/api-acceptance/admin/settings_spec.js index 3721fd6efa..ca2119f61f 100644 --- a/test/api-acceptance/admin/settings_spec.js +++ b/test/api-acceptance/admin/settings_spec.js @@ -144,7 +144,7 @@ describe('Settings API', function () { }, { key: 'labs', - value: JSON.stringify({members: true}) + value: JSON.stringify({}) }, { key: 'timezone', @@ -171,8 +171,7 @@ describe('Settings API', function () { headers['x-cache-invalidate'].should.eql('/*'); should.exist(putBody); - // NOTE: -1 for ignored labs setting - putBody.settings.length.should.equal(settingToChange.settings.length - 1); + putBody.settings.length.should.equal(settingToChange.settings.length); putBody.settings[0].key.should.eql('title'); putBody.settings[0].value.should.eql(JSON.stringify(changedValue)); @@ -219,14 +218,17 @@ describe('Settings API', function () { putBody.settings[13].key.should.eql('lang'); should.equal(putBody.settings[13].value, 'ua'); - putBody.settings[14].key.should.eql('timezone'); - should.equal(putBody.settings[14].value, 'Pacific/Auckland'); + putBody.settings[14].key.should.eql('labs'); + should.equal(putBody.settings[14].value, JSON.stringify({})); - putBody.settings[15].key.should.eql('unsplash'); - should.equal(putBody.settings[15].value, false); + putBody.settings[15].key.should.eql('timezone'); + should.equal(putBody.settings[15].value, 'Pacific/Auckland'); - putBody.settings[16].key.should.eql('slack'); - should.equal(putBody.settings[16].value, JSON.stringify([{ + putBody.settings[16].key.should.eql('unsplash'); + should.equal(putBody.settings[16].value, false); + + putBody.settings[17].key.should.eql('slack'); + should.equal(putBody.settings[17].value, JSON.stringify([{ url: 'https://overrides.tld', username: 'New Slack Username' }])); diff --git a/test/regression/api/canary/admin/settings_spec.js b/test/regression/api/canary/admin/settings_spec.js index a42bc5b55d..0455576b53 100644 --- a/test/regression/api/canary/admin/settings_spec.js +++ b/test/regression/api/canary/admin/settings_spec.js @@ -85,7 +85,8 @@ const defaultSettingsKeyTypes = [ {key: 'oauth_client_id', type: 'oauth'}, {key: 'oauth_client_secret', type: 'oauth'}, {key: 'editor_default_email_recipients', type: 'editor'}, - {key: 'editor_default_email_recipients_filter', type: 'editor'} + {key: 'editor_default_email_recipients_filter', type: 'editor'}, + {key: 'labs', type: 'blog'} ]; describe('Settings API (canary)', function () { @@ -320,19 +321,23 @@ describe('Settings API (canary)', function () { }); }); - it('Can\'t read labs dropped in v4', function (done) { - request.get(localUtils.API.getApiQuery('settings/labs/')) + it('Can read labs', async function () { + const res = await request.get(localUtils.API.getApiQuery('settings/labs/')) .set('Origin', config.get('url')) .expect('Content-Type', /json/) .expect('Cache-Control', testUtils.cacheRules.private) - .expect(404) - .end(function (err, res) { - if (err) { - return done(err); - } + .expect(200); - done(); - }); + should.not.exist(res.headers['x-cache-invalidate']); + const jsonResponse = res.body; + + should.exist(jsonResponse); + should.exist(jsonResponse.settings); + + jsonResponse.settings.length.should.eql(1); + testUtils.API.checkResponseValue(jsonResponse.settings[0], ['id', 'group', 'key', 'value', 'type', 'flags', 'created_at', 'updated_at']); + jsonResponse.settings[0].key.should.eql('labs'); + jsonResponse.settings[0].value.should.eql(JSON.stringify({})); }); it('Can read deprecated default_locale', function (done) { @@ -648,31 +653,35 @@ describe('Settings API (canary)', function () { }); }); - it('Can\'t edit labs dropped in v4', function (done) { + it('Can edit labs', async function () { const settingToChange = { - settings: [{key: 'labs', value: JSON.stringify({members: false})}] + settings: [{ + key: 'labs', + value: JSON.stringify({ + matchHelper: true + }) + }] }; - request.put(localUtils.API.getApiQuery('settings/')) + const res = await request.put(localUtils.API.getApiQuery('settings/')) .set('Origin', config.get('url')) .send(settingToChange) .expect('Content-Type', /json/) .expect('Cache-Control', testUtils.cacheRules.private) - .expect(200) - .end(function (err, res) { - if (err) { - return done(err); - } + .expect(200); - const jsonResponse = res.body; + const jsonResponse = res.body; - should.exist(jsonResponse); - should.exist(jsonResponse.settings); + should.exist(jsonResponse); + should.exist(jsonResponse.settings); - jsonResponse.settings.length.should.eql(0); + jsonResponse.settings.length.should.eql(1); + testUtils.API.checkResponseValue(jsonResponse.settings[0], ['id', 'group', 'key', 'value', 'type', 'flags', 'created_at', 'updated_at']); + jsonResponse.settings[0].key.should.eql('labs'); - done(); - }); + jsonResponse.settings[0].value.should.eql(JSON.stringify({ + matchHelper: true + })); }); it('Can\'t edit non existent setting', function () { diff --git a/test/regression/api/v2/admin/settings_spec.js b/test/regression/api/v2/admin/settings_spec.js index 7c9a439a42..395c199301 100644 --- a/test/regression/api/v2/admin/settings_spec.js +++ b/test/regression/api/v2/admin/settings_spec.js @@ -79,7 +79,8 @@ const defaultSettingsKeyTypes = [ {key: 'oauth_client_id', type: 'oauth'}, {key: 'oauth_client_secret', type: 'oauth'}, {key: 'editor_default_email_recipients', type: 'editor'}, - {key: 'editor_default_email_recipients_filter', type: 'editor'} + {key: 'editor_default_email_recipients_filter', type: 'editor'}, + {key: 'labs', type: 'blog'} ]; describe('Settings API (v2)', function () { @@ -264,19 +265,23 @@ describe('Settings API (v2)', function () { }); }); - it('Can\'t read labs dropped in v4', function (done) { - request.get(localUtils.API.getApiQuery('settings/labs/')) + it('Can read labs', async function () { + const res = await request.get(localUtils.API.getApiQuery('settings/labs/')) .set('Origin', config.get('url')) .expect('Content-Type', /json/) .expect('Cache-Control', testUtils.cacheRules.private) - .expect(404) - .end(function (err, res) { - if (err) { - return done(err); - } + .expect(200); - done(); - }); + should.not.exist(res.headers['x-cache-invalidate']); + const jsonResponse = res.body; + + should.exist(jsonResponse); + should.exist(jsonResponse.settings); + + jsonResponse.settings.length.should.eql(1); + testUtils.API.checkResponseValue(jsonResponse.settings[0], ['id', 'key', 'value', 'type', 'flags', 'created_at', 'updated_at']); + jsonResponse.settings[0].key.should.eql('labs'); + jsonResponse.settings[0].value.should.eql(JSON.stringify({})); }); it('Can read default_locale deprecated in v3', function (done) { @@ -516,31 +521,35 @@ describe('Settings API (v2)', function () { }); }); - it('Can\'t edit labs dropped in v4', function (done) { + it('Can edit labs', async function () { const settingToChange = { - settings: [{key: 'labs', value: JSON.stringify({members: false})}] + settings: [{ + key: 'labs', + value: JSON.stringify({ + matchHelper: true + }) + }] }; - request.put(localUtils.API.getApiQuery('settings/')) + const res = await request.put(localUtils.API.getApiQuery('settings/')) .set('Origin', config.get('url')) .send(settingToChange) .expect('Content-Type', /json/) .expect('Cache-Control', testUtils.cacheRules.private) - .expect(200) - .end(function (err, res) { - if (err) { - return done(err); - } + .expect(200); - const jsonResponse = res.body; + const jsonResponse = res.body; - should.exist(jsonResponse); - should.exist(jsonResponse.settings); + should.exist(jsonResponse); + should.exist(jsonResponse.settings); - jsonResponse.settings.length.should.eql(0); + jsonResponse.settings.length.should.eql(1); + testUtils.API.checkResponseValue(jsonResponse.settings[0], ['id', 'key', 'value', 'type', 'flags', 'created_at', 'updated_at']); + jsonResponse.settings[0].key.should.eql('labs'); - done(); - }); + jsonResponse.settings[0].value.should.eql(JSON.stringify({ + matchHelper: true + })); }); it('Can\'t edit non existent setting', function () { diff --git a/test/regression/api/v3/admin/settings_spec.js b/test/regression/api/v3/admin/settings_spec.js index 08b06ce310..9fd6d79f8d 100644 --- a/test/regression/api/v3/admin/settings_spec.js +++ b/test/regression/api/v3/admin/settings_spec.js @@ -83,7 +83,8 @@ const defaultSettingsKeyTypes = [ {key: 'oauth_client_id', type: 'oauth'}, {key: 'oauth_client_secret', type: 'oauth'}, {key: 'editor_default_email_recipients', type: 'editor'}, - {key: 'editor_default_email_recipients_filter', type: 'editor'} + {key: 'editor_default_email_recipients_filter', type: 'editor'}, + {key: 'labs', type: 'blog'} ]; describe('Settings API (v3)', function () { @@ -281,19 +282,23 @@ describe('Settings API (v3)', function () { }); }); - it('Can\'t read labs dropped in v4', function (done) { - request.get(localUtils.API.getApiQuery('settings/labs/')) + it('Can read labs', async function () { + const res = await request.get(localUtils.API.getApiQuery('settings/labs/')) .set('Origin', config.get('url')) .expect('Content-Type', /json/) .expect('Cache-Control', testUtils.cacheRules.private) - .expect(404) - .end(function (err, res) { - if (err) { - return done(err); - } + .expect(200); - done(); - }); + should.not.exist(res.headers['x-cache-invalidate']); + const jsonResponse = res.body; + + should.exist(jsonResponse); + should.exist(jsonResponse.settings); + + jsonResponse.settings.length.should.eql(1); + testUtils.API.checkResponseValue(jsonResponse.settings[0], ['id', 'group', 'key', 'value', 'type', 'flags', 'created_at', 'updated_at']); + jsonResponse.settings[0].key.should.eql('labs'); + jsonResponse.settings[0].value.should.eql(JSON.stringify({})); }); it('Can read deprecated default_locale', function (done) { @@ -459,31 +464,35 @@ describe('Settings API (v3)', function () { }); }); - it('Can\'t edit labs dropped in v4', function (done) { + it('Can edit labs', async function () { const settingToChange = { - settings: [{key: 'labs', value: JSON.stringify({members: false})}] + settings: [{ + key: 'labs', + value: JSON.stringify({ + matchHelper: true + }) + }] }; - request.put(localUtils.API.getApiQuery('settings/')) + const res = await request.put(localUtils.API.getApiQuery('settings/')) .set('Origin', config.get('url')) .send(settingToChange) .expect('Content-Type', /json/) .expect('Cache-Control', testUtils.cacheRules.private) - .expect(200) - .end(function (err, res) { - if (err) { - return done(err); - } + .expect(200); - const jsonResponse = res.body; + const jsonResponse = res.body; - should.exist(jsonResponse); - should.exist(jsonResponse.settings); + should.exist(jsonResponse); + should.exist(jsonResponse.settings); - jsonResponse.settings.length.should.eql(0); + jsonResponse.settings.length.should.eql(1); + testUtils.API.checkResponseValue(jsonResponse.settings[0], ['id', 'group', 'key', 'value', 'type', 'flags', 'created_at', 'updated_at']); + jsonResponse.settings[0].key.should.eql('labs'); - done(); - }); + jsonResponse.settings[0].value.should.eql(JSON.stringify({ + matchHelper: true + })); }); it('Can\'t read non existent setting', function (done) {