From 648662af9370628412019ce4a74e5e2e0ae923fe Mon Sep 17 00:00:00 2001 From: Naz Date: Mon, 19 Jul 2021 13:14:53 +0400 Subject: [PATCH] Reverted "Moved disguised unit tests into regression test suite" refs https://github.com/TryGhost/Ghost/commit/bf587d4055104810513fdf5cd8ed69aea73cc5d5 - The change broke regression tests and due to this change being out of scope of the cycle dicided to rever it and increase the time limit on unit tests instead - We should focus on refactoring moving slow unit tests in the next cleanup period --- test/regression/models/model_settings.test.js | 112 ------------------ test/unit/models/settings.test.js | 77 ++++++++++++ 2 files changed, 77 insertions(+), 112 deletions(-) delete mode 100644 test/regression/models/model_settings.test.js diff --git a/test/regression/models/model_settings.test.js b/test/regression/models/model_settings.test.js deleted file mode 100644 index 65a449bf49..0000000000 --- a/test/regression/models/model_settings.test.js +++ /dev/null @@ -1,112 +0,0 @@ -const should = require('should'); -const sinon = require('sinon'); -const mockDb = require('mock-knex'); - -const models = require('../../../core/server/models'); -const {knex} = require('../../../core/server/data/db'); -const events = require('../../../core/server/lib/common/events'); -const defaultSettings = require('../../../core/server/data/schema/default-settings'); - -describe('Settings Model', function () { - let tracker; - let eventSpy; - - before(function () { - models.init(); - }); - - beforeEach(function () { - mockDb.mock(knex); - tracker = mockDb.getTracker(); - tracker.install(); - }); - - afterEach(function () { - mockDb.unmock(knex); - tracker.uninstall(); - }); - - beforeEach(function () { - eventSpy = sinon.spy(events, 'emit'); - }); - - afterEach(function () { - sinon.restore(); - }); - - it('populates unset defaults', function () { - let insertQueries = []; - - tracker.on('query', (query) => { - // skip group and flags columns so we can test the insertion column skip - if (query.method === 'columnInfo') { - return query.response([ - {name: 'id', type: 'varchar'}, - // {name: 'group', type: 'varchar'}, - {name: 'key', type: 'varchar'}, - {name: 'value', type: 'varchar'}, - {name: 'type', type: 'varchar'}, - // {name: 'flags', type: 'varchar'}, - {name: 'created_at', type: 'datetime'}, - {name: 'created_by', type: 'varchar'}, - {name: 'updated_at', type: 'varchar'}, - {name: 'updated_by', type: 'datetime'} - ]); - } - - if (query.method === 'insert') { - insertQueries.push(query); - } - - return query.response([{}]); - }); - - return models.Settings.populateDefaults() - .then(() => { - const numberOfSettings = Object.keys(defaultSettings).reduce((settings, settingGroup) => { - return settings.concat(Object.keys(defaultSettings[settingGroup])); - }, []).length; - - insertQueries.length.should.equal(numberOfSettings); - - // non-existent columns should not be populated - insertQueries[0].sql.should.not.match(/group/); - insertQueries[0].sql.should.not.match(/flags/); - - // no events are emitted because we're not using the model layer - eventSpy.callCount.should.equal(0); - }); - }); - - it('doesn\'t overwrite any existing settings', function () { - let insertQueries = []; - - tracker.on('query', (query) => { - if (query.method === 'columnInfo') { - return query.response([ - {name: 'id', type: 'varchar'}, - {name: 'key', type: 'varchar'}, - {name: 'value', type: 'varchar'} - ]); - } - - if (query.method === 'insert') { - insertQueries.push(query); - } - - return query.response([{ - key: 'description', - value: 'Adam\'s Blog' - }]); - }); - - return models.Settings.populateDefaults() - .then(() => { - const numberOfSettings = Object.keys(defaultSettings).reduce((settings, settingGroup) => { - return settings.concat(Object.keys(defaultSettings[settingGroup])); - }, []).length; - - insertQueries.length.should.equal(numberOfSettings - 1); - }); - }); -}); diff --git a/test/unit/models/settings.test.js b/test/unit/models/settings.test.js index e43dc06a17..bcbe0e0b2a 100644 --- a/test/unit/models/settings.test.js +++ b/test/unit/models/settings.test.js @@ -4,6 +4,7 @@ const mockDb = require('mock-knex'); const models = require('../../../core/server/models'); const {knex} = require('../../../core/server/data/db'); const events = require('../../../core/server/lib/common/events'); +const defaultSettings = require('../../../core/server/data/schema/default-settings'); const errors = require('@tryghost/errors'); describe('Unit: models/settings', function () { @@ -102,6 +103,82 @@ describe('Unit: models/settings', function () { afterEach(function () { sinon.restore(); }); + + it('populates unset defaults', function () { + let insertQueries = []; + + tracker.on('query', (query) => { + // skip group and flags columns so we can test the insertion column skip + if (query.method === 'columnInfo') { + return query.response([ + {name: 'id', type: 'varchar'}, + // {name: 'group', type: 'varchar'}, + {name: 'key', type: 'varchar'}, + {name: 'value', type: 'varchar'}, + {name: 'type', type: 'varchar'}, + // {name: 'flags', type: 'varchar'}, + {name: 'created_at', type: 'datetime'}, + {name: 'created_by', type: 'varchar'}, + {name: 'updated_at', type: 'varchar'}, + {name: 'updated_by', type: 'datetime'} + ]); + } + + if (query.method === 'insert') { + insertQueries.push(query); + } + + return query.response([{}]); + }); + + return models.Settings.populateDefaults() + .then(() => { + const numberOfSettings = Object.keys(defaultSettings).reduce((settings, settingGroup) => { + return settings.concat(Object.keys(defaultSettings[settingGroup])); + }, []).length; + + insertQueries.length.should.equal(numberOfSettings); + + // non-existent columns should not be populated + insertQueries[0].sql.should.not.match(/group/); + insertQueries[0].sql.should.not.match(/flags/); + + // no events are emitted because we're not using the model layer + eventSpy.callCount.should.equal(0); + }); + }); + + it('doesn\'t overwrite any existing settings', function () { + let insertQueries = []; + + tracker.on('query', (query) => { + if (query.method === 'columnInfo') { + return query.response([ + {name: 'id', type: 'varchar'}, + {name: 'key', type: 'varchar'}, + {name: 'value', type: 'varchar'} + ]); + } + + if (query.method === 'insert') { + insertQueries.push(query); + } + + return query.response([{ + key: 'description', + value: 'Adam\'s Blog' + }]); + }); + + return models.Settings.populateDefaults() + .then(() => { + const numberOfSettings = Object.keys(defaultSettings).reduce((settings, settingGroup) => { + return settings.concat(Object.keys(defaultSettings[settingGroup])); + }, []).length; + + insertQueries.length.should.equal(numberOfSettings - 1); + }); + }); }); describe('format', function () {