diff --git a/core/server/api/canary/pages.js b/core/server/api/canary/pages.js index bae973dd10..e98cacc019 100644 --- a/core/server/api/canary/pages.js +++ b/core/server/api/canary/pages.js @@ -85,12 +85,16 @@ module.exports = { statusCode: 201, headers: {}, options: [ - 'include' + 'include', + 'source' ], validation: { options: { include: { values: ALLOWED_INCLUDES + }, + source: { + values: ['html'] } } }, @@ -117,6 +121,7 @@ module.exports = { options: [ 'include', 'id', + 'source', // NOTE: only for internal context 'forUpdate', 'transacting' @@ -128,6 +133,9 @@ module.exports = { }, id: { required: true + }, + source: { + values: ['html'] } } }, diff --git a/core/server/api/v2/pages.js b/core/server/api/v2/pages.js index bae973dd10..e98cacc019 100644 --- a/core/server/api/v2/pages.js +++ b/core/server/api/v2/pages.js @@ -85,12 +85,16 @@ module.exports = { statusCode: 201, headers: {}, options: [ - 'include' + 'include', + 'source' ], validation: { options: { include: { values: ALLOWED_INCLUDES + }, + source: { + values: ['html'] } } }, @@ -117,6 +121,7 @@ module.exports = { options: [ 'include', 'id', + 'source', // NOTE: only for internal context 'forUpdate', 'transacting' @@ -128,6 +133,9 @@ module.exports = { }, id: { required: true + }, + source: { + values: ['html'] } } }, diff --git a/core/test/regression/api/canary/admin/pages_spec.js b/core/test/regression/api/canary/admin/pages_spec.js new file mode 100644 index 0000000000..d9d0fe175b --- /dev/null +++ b/core/test/regression/api/canary/admin/pages_spec.js @@ -0,0 +1,47 @@ +const should = require('should'); +const supertest = require('supertest'); +const testUtils = require('../../../../utils'); +const config = require('../../../../../server/config'); +const localUtils = require('./utils'); +const ghost = testUtils.startGhost; +let request; + +describe('Pages API', function () { + before(function () { + return ghost() + .then(function (_ghostServer) { + request = supertest.agent(config.get('url')); + }) + .then(function () { + return localUtils.doAuth(request, 'posts'); + }); + }); + + describe('Edit', function () { + it('accepts html source', function () { + return request + .get(localUtils.API.getApiQuery(`pages/${testUtils.DataGenerator.Content.posts[5].id}/`)) + .set('Origin', config.get('url')) + .expect(200) + .then((res) => { + res.body.pages[0].slug.should.equal('static-page-test'); + + return request + .put(localUtils.API.getApiQuery('pages/' + testUtils.DataGenerator.Content.posts[5].id + '/?source=html')) + .set('Origin', config.get('url')) + .send({ + pages: [{ + html: '

HTML Ipsum presents

', + updated_at: res.body.pages[0].updated_at + }] + }) + .expect('Content-Type', /json/) + .expect('Cache-Control', testUtils.cacheRules.private) + .expect(200); + }) + .then((res) => { + res.body.pages[0].mobiledoc.should.equal('{"version":"0.3.1","atoms":[],"cards":[],"markups":[],"sections":[[1,"p",[[0,[],0,"HTML Ipsum presents"]]]]}'); + }); + }); + }); +}); diff --git a/core/test/regression/api/v2/admin/pages_spec.js b/core/test/regression/api/v2/admin/pages_spec.js new file mode 100644 index 0000000000..d9d0fe175b --- /dev/null +++ b/core/test/regression/api/v2/admin/pages_spec.js @@ -0,0 +1,47 @@ +const should = require('should'); +const supertest = require('supertest'); +const testUtils = require('../../../../utils'); +const config = require('../../../../../server/config'); +const localUtils = require('./utils'); +const ghost = testUtils.startGhost; +let request; + +describe('Pages API', function () { + before(function () { + return ghost() + .then(function (_ghostServer) { + request = supertest.agent(config.get('url')); + }) + .then(function () { + return localUtils.doAuth(request, 'posts'); + }); + }); + + describe('Edit', function () { + it('accepts html source', function () { + return request + .get(localUtils.API.getApiQuery(`pages/${testUtils.DataGenerator.Content.posts[5].id}/`)) + .set('Origin', config.get('url')) + .expect(200) + .then((res) => { + res.body.pages[0].slug.should.equal('static-page-test'); + + return request + .put(localUtils.API.getApiQuery('pages/' + testUtils.DataGenerator.Content.posts[5].id + '/?source=html')) + .set('Origin', config.get('url')) + .send({ + pages: [{ + html: '

HTML Ipsum presents

', + updated_at: res.body.pages[0].updated_at + }] + }) + .expect('Content-Type', /json/) + .expect('Cache-Control', testUtils.cacheRules.private) + .expect(200); + }) + .then((res) => { + res.body.pages[0].mobiledoc.should.equal('{"version":"0.3.1","atoms":[],"cards":[],"markups":[],"sections":[[1,"p",[[0,[],0,"HTML Ipsum presents"]]]]}'); + }); + }); + }); +});