0
Fork 0
mirror of https://github.com/TryGhost/Ghost.git synced 2025-02-10 23:36:14 -05:00

Enabled all labs flags when testing (#13036)

no issue

Shows impact of new code behind labs flags through the existing acceptance/regression tests. Allows for existing tests to be updated to match new behaviour rather than requiring separate tests where individual flags are enabled. Should result in minimal test updating once code reaches GA.

- adds a forced `'labs:enabled'` fixture op that edits the `labs` setting to enable all flags then restarts the settings service to pick up the new setting
- modifies labs service to not remove ALPHA_FEATURE labs settings when running in a testing environment
This commit is contained in:
Kevin Ansfield 2021-06-10 12:54:34 +01:00 committed by GitHub
parent 139cf448d7
commit f49f7699aa
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 42 additions and 5 deletions

View file

@ -187,7 +187,8 @@ module.exports = {
'array',
'string',
'number',
'boolean'
'boolean',
'object'
]]
}
},

View file

@ -24,7 +24,7 @@ module.exports.getAll = () => {
const labs = _.cloneDeep(settingsCache.get('labs')) || {};
ALPHA_FEATURES.forEach((alphaKey) => {
if (labs[alphaKey] && !(config.get('enableDeveloperExperiments'))) {
if (labs[alphaKey] && !(config.get('enableDeveloperExperiments') || process.env.NODE_ENV.match(/^testing/))) {
delete labs[alphaKey];
}
});

View file

@ -677,8 +677,10 @@ describe('Settings API (canary)', function () {
jsonResponse.settings.length.should.eql(1);
testUtils.API.checkResponseValue(jsonResponse.settings[0], ['id', 'group', 'key', 'value', 'type', 'flags', 'created_at', 'updated_at']);
const jsonObjectRegex = /^\{.*\}$/; // '{...}'
jsonResponse.settings[0].key.should.eql('labs');
jsonResponse.settings[0].value.should.eql(JSON.stringify({}));
jsonResponse.settings[0].value.should.match(jsonObjectRegex);
});
it('Can read deprecated default_locale', function (done) {

View file

@ -286,8 +286,10 @@ describe('Settings API (v2)', function () {
jsonResponse.settings.length.should.eql(1);
testUtils.API.checkResponseValue(jsonResponse.settings[0], ['id', 'key', 'value', 'type', 'flags', 'created_at', 'updated_at']);
const jsonObjectRegex = /^\{.*\}$/; // '{...}'
jsonResponse.settings[0].key.should.eql('labs');
jsonResponse.settings[0].value.should.eql(JSON.stringify({}));
jsonResponse.settings[0].value.should.match(jsonObjectRegex);
});
it('Can read default_locale deprecated in v3', function (done) {

View file

@ -303,8 +303,10 @@ describe('Settings API (v3)', function () {
jsonResponse.settings.length.should.eql(1);
testUtils.API.checkResponseValue(jsonResponse.settings[0], ['id', 'group', 'key', 'value', 'type', 'flags', 'created_at', 'updated_at']);
const jsonObjectRegex = /^\{.*\}$/; // '{...}'
jsonResponse.settings[0].key.should.eql('labs');
jsonResponse.settings[0].value.should.eql(JSON.stringify({}));
jsonResponse.settings[0].value.should.match(jsonObjectRegex);
});
it('Can read deprecated default_locale', function (done) {

View file

@ -19,6 +19,7 @@ describe('Labs Service', function () {
it('returns an alpha flag when dev experiments in toggled', function () {
configUtils.set('enableDeveloperExperiments', true);
sinon.stub(process.env, 'NODE_ENV').value('production');
sinon.stub(settingsCache, 'get');
settingsCache.get.withArgs('labs').returns({
multipleProducts: true
@ -35,6 +36,7 @@ describe('Labs Service', function () {
it('returns a falsy alpha flag when dev experiments in NOT toggled', function () {
configUtils.set('enableDeveloperExperiments', false);
sinon.stub(process.env, 'NODE_ENV').value('production');
sinon.stub(settingsCache, 'get');
settingsCache.get.withArgs('labs').returns({
multipleProducts: true

View file

@ -15,6 +15,7 @@ const emailAnalyticsService = require('../../core/server/services/email-analytic
const permissions = require('../../core/server/services/permissions');
const settingsService = require('../../core/server/services/settings');
const settingsCache = require('../../core/server/services/settings/cache');
const labsService = require('../../core/server/services/labs');
// Other Test Utilities
const context = require('./fixtures/context');
@ -536,6 +537,28 @@ const fixtures = {
return Promise.map(DataGenerator.forKnex.snippets, function (snippet) {
return models.Snippet.add(snippet, context.internal);
});
},
async enableAllLabsFeatures() {
const labsValue = Object.fromEntries(labsService.WRITABLE_KEYS_ALLOWLIST.map(key => [key, true]));
const labsSetting = DataGenerator.forKnex.createSetting({
key: 'labs',
group: 'labs',
type: 'object',
value: JSON.stringify(labsValue)
});
const existingLabsSetting = await models.Settings.findOne({key: 'labs'});
if (existingLabsSetting) {
delete labsSetting.id;
await models.Settings.edit(labsSetting);
} else {
await models.Settings.add(labsSetting);
}
settingsCache.shutdown();
await settingsService.init();
}
};
@ -624,6 +647,9 @@ const toDoList = {
},
snippets: function insertSnippets() {
return fixtures.insertSnippets();
},
'labs:enabled': function enableAllLabsFeatures() {
return fixtures.enableAllLabsFeatures();
}
};
@ -660,6 +686,8 @@ const getFixtureOps = (toDos) => {
delete toDos.init;
}
fixtureOps.push(toDoList['labs:enabled']);
// Go through our list of things to do, and add them to an array
_.each(toDos, function (value, toDo) {
let tmp;