mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-04-08 02:52:39 -05:00
Moved default settings population test to regression suite
closes https://github.com/TryGhost/Team/issues/860
refs 5405b6ca7c
- The slow test was running slow because it's not a "unit test" it is testing much more. Moved it to a correct suite - regression which simplified the logic a lot (no need to mock db calls).
- Brought back the 2000ms limit as the bottleneck has been solved
This commit is contained in:
parent
f52d0136ef
commit
4f78bf01a2
3 changed files with 55 additions and 102 deletions
|
@ -29,7 +29,7 @@
|
|||
"test": "mocha --require=./test/utils/overrides.js --exit --trace-warnings --recursive --extension=test.js --timeout=60000",
|
||||
"test:all": "yarn test:unit && yarn test:acceptance && yarn lint",
|
||||
"test:debug": "DEBUG=ghost:test* yarn test",
|
||||
"test:unit": "c8 --all -n 'core/{*.js,frontend,server,shared}' --reporter text-summary mocha --require=./test/utils/overrides.js --exit --trace-warnings --recursive --extension=test.js './test/unit' --timeout=3000",
|
||||
"test:unit": "c8 --all -n 'core/{*.js,frontend,server,shared}' --reporter text-summary mocha --require=./test/utils/overrides.js --exit --trace-warnings --recursive --extension=test.js './test/unit' --timeout=2000",
|
||||
"test:acceptance": "mocha --require=./test/utils/overrides.js --exit --trace-warnings --recursive --extension=test.js './test/api-acceptance' './test/frontend-acceptance' --timeout=10000",
|
||||
"test:regression": "mocha --require=./test/utils/overrides.js --exit --trace-warnings --recursive --extension=test.js './test/regression' --timeout=60000",
|
||||
"test:slow": "yarn test:unit --reporter=mocha-slow-test-reporter && yarn test:acceptance --reporter=mocha-slow-test-reporter",
|
||||
|
|
54
test/regression/models/model_settings.test.js
Normal file
54
test/regression/models/model_settings.test.js
Normal file
|
@ -0,0 +1,54 @@
|
|||
const should = require('should');
|
||||
const testUtils = require('../../utils');
|
||||
const db = require('../../../core/server/data/db');
|
||||
|
||||
// Stuff we are testing
|
||||
const models = require('../../../core/server/models');
|
||||
|
||||
describe('Settings Model', function () {
|
||||
before(models.init);
|
||||
afterEach(testUtils.teardownDb);
|
||||
|
||||
describe('defaults', function () {
|
||||
it('populates all defaults', async function () {
|
||||
const settings = await models.Settings.findAll();
|
||||
settings.length.should.equal(0);
|
||||
|
||||
await models.Settings.populateDefaults();
|
||||
|
||||
const settingsPopulated = await models.Settings.findAll();
|
||||
settingsPopulated.length.should.equal(93);
|
||||
});
|
||||
|
||||
it('doesn\'t overwrite any existing settings', async function () {
|
||||
const now = db.knex.raw('CURRENT_TIMESTAMP');
|
||||
await db.knex
|
||||
.table('settings')
|
||||
.insert({
|
||||
id: 'test_id',
|
||||
key: 'title',
|
||||
value: 'Testing Defaults',
|
||||
flags: 'PUBLIC',
|
||||
type: 'string',
|
||||
created_at: now,
|
||||
created_by: 1,
|
||||
updated_at: now,
|
||||
updated_by: 1
|
||||
});
|
||||
|
||||
const settings = await models.Settings.findAll();
|
||||
settings.length.should.equal(1);
|
||||
|
||||
await models.Settings.populateDefaults();
|
||||
|
||||
const settingsPopulated = await models.Settings.findAll();
|
||||
settingsPopulated.length.should.equal(93);
|
||||
|
||||
const titleSetting = settingsPopulated.models.find(s => s.get('key') === 'title');
|
||||
titleSetting.get('value').should.equal('Testing Defaults');
|
||||
|
||||
const descriptionSetting = settingsPopulated.models.find(s => s.get('key') === 'description');
|
||||
descriptionSetting.get('value').should.equal('Thoughts, stories and ideas');
|
||||
});
|
||||
});
|
||||
});
|
|
@ -4,7 +4,6 @@ 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 () {
|
||||
|
@ -81,106 +80,6 @@ describe('Unit: models/settings', function () {
|
|||
});
|
||||
});
|
||||
|
||||
describe('defaults', function () {
|
||||
let tracker;
|
||||
let eventSpy;
|
||||
|
||||
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);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('format', function () {
|
||||
it('transforms urls when persisting to db', function () {
|
||||
const setting = models.Settings.forge();
|
||||
|
|
Loading…
Add table
Reference in a new issue