diff --git a/test/regression/site/email_routes.test.js b/test/regression/site/email_routes.test.js new file mode 100644 index 0000000000..ee0cc06ecb --- /dev/null +++ b/test/regression/site/email_routes.test.js @@ -0,0 +1,77 @@ +// # 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'); + +describe('Frontend Routing: Email Routes', function () { + let request; + let emailPosts; + + afterEach(function () { + sinon.restore(); + }); + + before(async function () { + 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: '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 when accessed by slug', function () { + return request.get(`/${emailPosts[0].get('slug')}/`) + .expect(404); + }); + + it('404s unknown uuids', function () { + return request.get('/email/aac6b4f6-e1f3-406c-9247-c94a0496d39f/') + .expect(404); + }); +});