Ghost/test/regression/site/email_routes.test.js
Naz 937d9e58d1 Switched post routing to uuid instead of slug
refs https://github.com/TryGhost/Team/issues/990

- Relying on uuid instead of slug makes the posts less discoverable and partially soves discoverability through overriden robots.txt files
2021-08-19 12:27:45 +04:00

88 lines
2.8 KiB
JavaScript

// # Frontend Route tests
// As it stands, these tests depend on the database, and as such are integration tests.
// Mocking out the models to not touch the DB would turn these into unit tests, and should probably be done in future,
// But then again testing real code, rather than mock code, might be more useful...
const should = require('should');
const sinon = require('sinon');
const supertest = require('supertest');
const cheerio = require('cheerio');
const testUtils = require('../../utils');
const config = require('../../../core/shared/config');
const settingsCache = require('../../../core/shared/settings-cache');
const bridge = require('../../../core/bridge');
describe('Frontend Routing: Email Routes', function () {
let request;
let emailPosts;
before(async function () {
sinon.stub(bridge, 'getFrontendApiVersion')
.returns('v4');
const originalSettingsCacheGetFn = settingsCache.get;
// NOTE: this wacky stubbing can be removed once emailOnlyPosts enters GA stage
sinon.stub(settingsCache, 'get').callsFake(function (key, options) {
if (key === 'labs') {
return {
emailOnlyPosts: true
};
}
return originalSettingsCacheGetFn(key, options);
});
await testUtils.startGhost();
request = supertest.agent(config.get('url'));
emailPosts = await testUtils.fixtures.insertPosts([{
title: 'I am visible through email route!',
status: 'sent',
posts_meta: {
email_only: true
}
}, {
title: 'I am NOT visible through email route!',
status: 'draft',
posts_meta: {
email_only: true
}
}]);
});
after(function () {
sinon.restore();
});
it('should display email_only post', async function () {
const res = await request.get(`/email/${emailPosts[0].get('uuid')}/`)
.expect('Content-Type', /html/)
.expect(200);
const $ = cheerio.load(res.text);
$('title').text().should.equal('I am visible through email route!');
should.not.exist(res.headers['x-cache-invalidate']);
should.not.exist(res.headers['X-CSRF-Token']);
should.not.exist(res.headers['set-cookie']);
should.exist(res.headers.date);
});
it('404s for draft email only post', function () {
return request.get(`/email/${emailPosts[1].get('uuid')}/`)
.expect(404);
});
it('404s known slug', function () {
return request.get(`/email/${emailPosts[0].get('slug')}/`)
.expect(404);
});
it('404s unknown slug', function () {
return request.get('/email/random-slug/')
.expect(404);
});
});