mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-12-21 01:41:46 +03:00
04fb7f8e69
- refactoring the acceptance tests to use async-await removes all the Promise chaining we had, and streamlines the coding styles we have across the code so test files are more alike
107 lines
3.5 KiB
JavaScript
107 lines
3.5 KiB
JavaScript
const should = require('should');
|
|
const supertest = require('supertest');
|
|
const _ = require('lodash');
|
|
const testUtils = require('../../utils');
|
|
const config = require('../../../core/shared/config');
|
|
const localUtils = require('./utils');
|
|
|
|
// Values to test against
|
|
const publicSettings = require('../../../core/server/services/settings/public');
|
|
const defaultSettings = require('../../../core/server/data/schema').defaultSettings;
|
|
|
|
const defaultSettingsKeys = [
|
|
'title',
|
|
'description',
|
|
'logo',
|
|
'icon',
|
|
'accent_color',
|
|
'cover_image',
|
|
'facebook',
|
|
'twitter',
|
|
'lang',
|
|
'timezone',
|
|
'codeinjection_head',
|
|
'codeinjection_foot',
|
|
'navigation',
|
|
'secondary_navigation',
|
|
'meta_title',
|
|
'meta_description',
|
|
'og_image',
|
|
'og_title',
|
|
'og_description',
|
|
'twitter_image',
|
|
'twitter_title',
|
|
'twitter_description',
|
|
'members_support_address',
|
|
'url'
|
|
];
|
|
|
|
describe('Settings Content API', function () {
|
|
let request;
|
|
|
|
before(async function () {
|
|
await testUtils.startGhost();
|
|
request = supertest.agent(config.get('url'));
|
|
await testUtils.initFixtures('api_keys');
|
|
});
|
|
|
|
it('Can request settings', async function () {
|
|
const key = localUtils.getValidKey();
|
|
const res = await request.get(localUtils.API.getApiQuery(`settings/?key=${key}`))
|
|
.set('Origin', testUtils.API.getURL())
|
|
.expect('Content-Type', /json/)
|
|
.expect('Cache-Control', testUtils.cacheRules.private)
|
|
.expect(200);
|
|
|
|
res.headers.vary.should.eql('Accept-Encoding');
|
|
should.exist(res.headers['access-control-allow-origin']);
|
|
should.not.exist(res.headers['x-cache-invalidate']);
|
|
|
|
const jsonResponse = res.body;
|
|
should.exist(jsonResponse.settings);
|
|
should.exist(jsonResponse.meta);
|
|
|
|
jsonResponse.settings.should.be.an.Object();
|
|
const settings = jsonResponse.settings;
|
|
|
|
// Verify we have the right keys for settings
|
|
const publicProperties = _.filter(_.values(publicSettings), (o) => {
|
|
return (o !== 'brand');
|
|
});
|
|
|
|
const flattenedPublicSettings = [];
|
|
_.each(defaultSettings, function each(_settings) {
|
|
_.each(_settings, function eachSetting(setting) {
|
|
const flags = setting.flags || '';
|
|
if (setting.group === 'site' || (flags.includes('PUBLIC'))) {
|
|
flattenedPublicSettings.push(setting);
|
|
}
|
|
});
|
|
});
|
|
|
|
// settings.should.have.properties(publicProperties);
|
|
// Object.keys(settings).length.should.equal(22);
|
|
Object.keys(settings).should.deepEqual(defaultSettingsKeys);
|
|
// Verify that we are returning the defaults for each value
|
|
_.forEach(settings, (value, settingsKey) => {
|
|
// `url` does not come from the settings cache
|
|
if (settingsKey === 'url') {
|
|
should(value).eql(`${config.get('url')}/`);
|
|
return;
|
|
}
|
|
|
|
let defaultKey = _.findKey(publicSettings, v => v === settingsKey);
|
|
let defaultValue = _.find(flattenedPublicSettings, setting => setting.key === defaultKey).defaultValue;
|
|
|
|
// Convert empty strings to null
|
|
defaultValue = defaultValue || null;
|
|
|
|
if (defaultKey === 'navigation' || defaultKey === 'secondary_navigation') {
|
|
defaultValue = JSON.parse(defaultValue);
|
|
}
|
|
|
|
should(value).eql(defaultValue);
|
|
});
|
|
});
|
|
});
|