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
243 lines
8.9 KiB
JavaScript
243 lines
8.9 KiB
JavaScript
const should = require('should');
|
|
const _ = require('lodash');
|
|
const supertest = require('supertest');
|
|
const os = require('os');
|
|
const fs = require('fs-extra');
|
|
const config = require('../../../core/shared/config');
|
|
const testUtils = require('../../utils');
|
|
const localUtils = require('./utils');
|
|
|
|
describe('Settings API', function () {
|
|
let request;
|
|
let ghostServer;
|
|
|
|
before(async function () {
|
|
ghostServer = await testUtils.startGhost();
|
|
request = supertest.agent(config.get('url'));
|
|
await localUtils.doAuth(request);
|
|
});
|
|
|
|
after(function () {
|
|
return ghostServer.stop();
|
|
});
|
|
|
|
it('Can request all settings', async function () {
|
|
const res = await request.get(localUtils.API.getApiQuery('settings/'))
|
|
.set('Origin', config.get('url'))
|
|
.expect('Content-Type', /json/)
|
|
.expect('Cache-Control', testUtils.cacheRules.private)
|
|
.expect(200);
|
|
|
|
should.not.exist(res.headers['x-cache-invalidate']);
|
|
const jsonResponse = res.body;
|
|
should.exist(jsonResponse);
|
|
|
|
localUtils.API.checkResponse(jsonResponse, 'settings');
|
|
|
|
JSON.parse(_.find(jsonResponse.settings, {key: 'unsplash'}).value).isActive.should.eql(true);
|
|
JSON.parse(_.find(jsonResponse.settings, {key: 'amp'}).value).should.eql(true);
|
|
should.not.exist(_.find(jsonResponse.settings, {key: 'permalinks'}));
|
|
should.not.exist(_.find(jsonResponse.settings, {key: 'ghost_head'}));
|
|
should.not.exist(_.find(jsonResponse.settings, {key: 'ghost_foot'}));
|
|
|
|
testUtils.API.isISO8601(jsonResponse.settings[0].created_at).should.be.true();
|
|
jsonResponse.settings[0].created_at.should.be.an.instanceof(String);
|
|
|
|
should.not.exist(_.find(jsonResponse.settings, function (setting) {
|
|
return setting.type === 'core';
|
|
}));
|
|
});
|
|
|
|
it('Can read a setting', async function () {
|
|
const res = await request.get(localUtils.API.getApiQuery('settings/codeinjection_head/'))
|
|
.set('Origin', config.get('url'))
|
|
.expect('Content-Type', /json/)
|
|
.expect('Cache-Control', testUtils.cacheRules.private)
|
|
.expect(200);
|
|
|
|
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('codeinjection_head');
|
|
testUtils.API.isISO8601(jsonResponse.settings[0].created_at).should.be.true();
|
|
});
|
|
|
|
it('Can edit a setting', async function () {
|
|
const res = await request.get(localUtils.API.getApiQuery('settings/'))
|
|
.set('Origin', config.get('url'))
|
|
.expect('Content-Type', /json/)
|
|
.expect('Cache-Control', testUtils.cacheRules.private);
|
|
|
|
const jsonResponse = res.body;
|
|
const changedValue = [];
|
|
|
|
const settingToChange = {
|
|
settings: [
|
|
{
|
|
key: 'title',
|
|
value: changedValue
|
|
},
|
|
{
|
|
key: 'codeinjection_head',
|
|
value: null
|
|
},
|
|
{
|
|
key: 'navigation',
|
|
value: {label: 'label1'}
|
|
},
|
|
{
|
|
key: 'slack',
|
|
value: JSON.stringify({username: 'username'})
|
|
},
|
|
{
|
|
key: 'is_private',
|
|
value: false
|
|
},
|
|
{
|
|
key: 'meta_title',
|
|
value: 'SEO title'
|
|
},
|
|
{
|
|
key: 'meta_description',
|
|
value: 'SEO description'
|
|
},
|
|
{
|
|
key: 'og_image',
|
|
value: '/content/images/2019/07/facebook.png'
|
|
},
|
|
{
|
|
key: 'og_title',
|
|
value: 'facebook title'
|
|
},
|
|
{
|
|
key: 'og_description',
|
|
value: 'facebook description'
|
|
},
|
|
{
|
|
key: 'twitter_image',
|
|
value: '/content/images/2019/07/twitter.png'
|
|
},
|
|
{
|
|
key: 'twitter_title',
|
|
value: 'twitter title'
|
|
},
|
|
{
|
|
key: 'twitter_description',
|
|
value: 'twitter description'
|
|
},
|
|
{
|
|
key: 'labs',
|
|
value: '{"subscribers":false,"members":true}'
|
|
},
|
|
{
|
|
key: 'lang',
|
|
value: 'ua'
|
|
},
|
|
{
|
|
key: 'timezone',
|
|
value: 'Pacific/Auckland'
|
|
}
|
|
]
|
|
};
|
|
|
|
should.exist(jsonResponse);
|
|
should.exist(jsonResponse.settings);
|
|
|
|
const {body, headers} = 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);
|
|
|
|
const putBody = body;
|
|
headers['x-cache-invalidate'].should.eql('/*');
|
|
should.exist(putBody);
|
|
|
|
putBody.settings[0].key.should.eql('title');
|
|
putBody.settings[0].value.should.eql(JSON.stringify(changedValue));
|
|
|
|
putBody.settings[1].key.should.eql('codeinjection_head');
|
|
should.equal(putBody.settings[1].value, null);
|
|
|
|
putBody.settings[2].key.should.eql('navigation');
|
|
should.equal(putBody.settings[2].value, JSON.stringify({label: 'label1'}));
|
|
|
|
putBody.settings[3].key.should.eql('slack');
|
|
should.equal(putBody.settings[3].value, JSON.stringify({username: 'username'}));
|
|
|
|
putBody.settings[4].key.should.eql('is_private');
|
|
should.equal(putBody.settings[4].value, false);
|
|
|
|
putBody.settings[5].key.should.eql('meta_title');
|
|
should.equal(putBody.settings[5].value, 'SEO title');
|
|
|
|
putBody.settings[6].key.should.eql('meta_description');
|
|
should.equal(putBody.settings[6].value, 'SEO description');
|
|
|
|
putBody.settings[6].key.should.eql('meta_description');
|
|
should.equal(putBody.settings[6].value, 'SEO description');
|
|
|
|
putBody.settings[7].key.should.eql('og_image');
|
|
should.equal(putBody.settings[7].value, '/content/images/2019/07/facebook.png');
|
|
|
|
putBody.settings[8].key.should.eql('og_title');
|
|
should.equal(putBody.settings[8].value, 'facebook title');
|
|
|
|
putBody.settings[9].key.should.eql('og_description');
|
|
should.equal(putBody.settings[9].value, 'facebook description');
|
|
|
|
putBody.settings[10].key.should.eql('twitter_image');
|
|
should.equal(putBody.settings[10].value, '/content/images/2019/07/twitter.png');
|
|
|
|
putBody.settings[11].key.should.eql('twitter_title');
|
|
should.equal(putBody.settings[11].value, 'twitter title');
|
|
|
|
putBody.settings[12].key.should.eql('twitter_description');
|
|
should.equal(putBody.settings[12].value, 'twitter description');
|
|
|
|
putBody.settings[13].key.should.eql('labs');
|
|
should.equal(putBody.settings[13].value, '{"subscribers":false,"members":true}');
|
|
|
|
putBody.settings[14].key.should.eql('lang');
|
|
should.equal(putBody.settings[14].value, 'ua');
|
|
|
|
putBody.settings[15].key.should.eql('timezone');
|
|
should.equal(putBody.settings[15].value, 'Pacific/Auckland');
|
|
|
|
localUtils.API.checkResponse(putBody, 'settings');
|
|
});
|
|
|
|
it('Can download routes.yaml', async function () {
|
|
const res = await request.get(localUtils.API.getApiQuery('settings/routes/yaml/'))
|
|
.set('Origin', config.get('url'))
|
|
.set('Accept', 'application/yaml')
|
|
.expect(200);
|
|
|
|
res.headers['content-disposition'].should.eql('Attachment; filename="routes.yaml"');
|
|
res.headers['content-type'].should.eql('application/yaml; charset=utf-8');
|
|
res.headers['content-length'].should.eql('138');
|
|
});
|
|
|
|
it('Can upload routes.yaml', async function () {
|
|
const newRoutesYamlPath = `${os.tmpdir()}/routes.yaml`;
|
|
|
|
await fs.writeFile(newRoutesYamlPath, 'routes:\ncollections:\ntaxonomies:\n');
|
|
const res = await request
|
|
.post(localUtils.API.getApiQuery('settings/routes/yaml/'))
|
|
.set('Origin', config.get('url'))
|
|
.attach('routes', newRoutesYamlPath)
|
|
.expect('Content-Type', /application\/json/)
|
|
.expect(200);
|
|
|
|
res.headers['x-cache-invalidate'].should.eql('/*');
|
|
await ghostServer.stop();
|
|
});
|
|
});
|