0
Fork 0
mirror of https://github.com/TryGhost/Ghost.git synced 2025-02-10 23:36:14 -05:00

Fixed importer not handling post.page->post.type conversion (#11025)

no issue

- updates the attribute sanitiser of the posts importer to convert `post.page=true/false` to `post.type='page'/'post'
- gives precedence to `post.type` if an imported post somehow has both `post.page` and `post.type` attributes
This commit is contained in:
Kevin Ansfield 2019-08-16 19:41:38 +01:00 committed by GitHub
parent 61420ae67f
commit 25f91aa102
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 107 additions and 6 deletions

View file

@ -1,9 +1,9 @@
const debug = require('ghost-ignition').debug('importer:posts'),
_ = require('lodash'),
uuid = require('uuid'),
BaseImporter = require('./base'),
converters = require('../../../../lib/mobiledoc/converters'),
validation = require('../../../validation');
const debug = require('ghost-ignition').debug('importer:posts');
const _ = require('lodash');
const uuid = require('uuid');
const BaseImporter = require('./base');
const converters = require('../../../../lib/mobiledoc/converters');
const validation = require('../../../validation');
class PostsImporter extends BaseImporter {
constructor(allDataFromFile) {
@ -21,6 +21,16 @@ class PostsImporter extends BaseImporter {
if (!validation.validator.isUUID(obj.uuid || '')) {
obj.uuid = uuid.v4();
}
// we used to have post.page=true/false
// we now have post.type='page'/'post'
// give precedence to post.type if both are present
if (_.has(obj, 'page')) {
if (_.isEmpty(obj.type)) {
obj.type = obj.page ? 'page' : 'post';
}
delete obj.page;
}
});
}

View file

@ -0,0 +1,91 @@
const should = require('should');
const find = require('lodash/find');
const PostsImporter = require('../../../../../../server/data/importer/importers/data/posts');
describe.only('PostsImporter', function () {
describe('#beforeImport', function () {
it('converts post.page to post.type', function () {
const fakePosts = [{
slug: 'page-false',
page: false
}, {
slug: 'page-true',
page: true
}, {
slug: 'type-post',
type: 'post'
}, {
slug: 'type-page',
type: 'page'
}];
const importer = new PostsImporter({posts: fakePosts});
importer.beforeImport();
const pageFalse = find(importer.dataToImport, {slug: 'page-false'});
should.exist(pageFalse);
should.not.exist(pageFalse.page, 'pageFalse.page should not exist');
should.exist(pageFalse.type, 'pageFalse.type should exist');
pageFalse.type.should.equal('post');
const pageTrue = find(importer.dataToImport, {slug: 'page-true'});
should.exist(pageTrue);
should.not.exist(pageTrue.page, 'pageTrue.page should not exist');
should.exist(pageTrue.type, 'pageTrue.type should exist');
pageTrue.type.should.equal('page');
const typePost = find(importer.dataToImport, {slug: 'type-post'});
should.exist(typePost);
should.not.exist(typePost.page, 'typePost.page should not exist');
should.exist(typePost.type, 'typePost.type should exist');
typePost.type.should.equal('post');
const typePage = find(importer.dataToImport, {slug: 'type-page'});
should.exist(typePage);
should.not.exist(typePage.page, 'typePage.page should not exist');
should.exist(typePage.type, 'typePage.type should exist');
typePage.type.should.equal('page');
});
it('gives precedence to post.type when post.page is also present', function () {
const fakePosts = [{
slug: 'page-false-type-page',
page: false,
type: 'page'
}, {
slug: 'page-true-type-page',
page: true,
type: 'page'
}, {
slug: 'page-false-type-post',
page: false,
type: 'post'
}, {
slug: 'page-true-type-post',
page: true,
type: 'post'
}];
const importer = new PostsImporter({posts: fakePosts});
importer.beforeImport();
const pageFalseTypePage = find(importer.dataToImport, {slug: 'page-false-type-page'});
should.exist(pageFalseTypePage);
pageFalseTypePage.type.should.equal('page', 'pageFalseTypePage.type');
const pageTrueTypePage = find(importer.dataToImport, {slug: 'page-true-type-page'});
should.exist(pageTrueTypePage);
pageTrueTypePage.type.should.equal('page', 'pageTrueTypePage.type');
const pageFalseTypePost = find(importer.dataToImport, {slug: 'page-false-type-post'});
should.exist(pageFalseTypePost);
pageFalseTypePost.type.should.equal('post', 'pageFalseTypePost.type');
const pageTrueTypePost = find(importer.dataToImport, {slug: 'page-true-type-post'});
should.exist(pageTrueTypePost);
pageTrueTypePost.type.should.equal('post', 'pageTrueTypePost.type');
});
});
});