const testUtils = require('../../utils');
const {exportedBodyV1} = require('../../utils/fixtures/export/body-generator');
const models = require('../../../core/server/models');
const importer = require('../../../core/server/data/importer');
const dataImporter = importer.importers[1];
const importOptions = {
returnImportedData: true
};
describe('Importer 1.0', function () {
beforeEach(testUtils.teardownDb);
beforeEach(testUtils.setup('roles', 'owner'));
it('ensure amp field get\'s respected', function () {
const exportData = exportedBodyV1().db[0];
exportData.data.posts[0] = testUtils.DataGenerator.forKnex.createPost({
slug: 'post1',
amp: 2
});
exportData.data.posts[1] = testUtils.DataGenerator.forKnex.createPost({
slug: 'post2',
amp: null
});
return dataImporter.doImport(exportData, importOptions)
.then(function () {
return Promise.all([
models.Post.findPage(testUtils.context.internal)
]);
}).then(function (result) {
const posts = result[0].data.map(model => model.toJSON());
posts.length.should.eql(2);
posts[0].comment_id.should.eql(exportData.data.posts[1].id);
posts[1].comment_id.should.eql('2');
});
});
describe('migrate mobiledoc/html', function () {
it('invalid mobiledoc structure', function () {
const exportData = exportedBodyV1().db[0];
exportData.data.posts[0] = testUtils.DataGenerator.forKnex.createPost({
slug: 'post1',
html: 'test',
mobiledoc: '{}'
});
exportData.data.posts[1] = testUtils.DataGenerator.forKnex.createPost({
slug: 'post2'
});
exportData.data.posts[1].mobiledoc = '{';
const options = Object.assign({formats: 'mobiledoc,html'}, testUtils.context.internal);
return dataImporter.doImport(exportData, importOptions)
.then(function (result) {
return Promise.all([
models.Post.findPage(options)
]);
}).then(function (result) {
const posts = result[0].data.map(model => model.toJSON(options));
posts.length.should.eql(2);
should(posts[0].html).eql(null);
posts[0].mobiledoc.should.eql('{"version":"0.3.1","ghostVersion":"4.0","markups":[],"atoms":[],"cards":[],"sections":[[1,"p",[[0,[],0,""]]]]}');
should(posts[1].html).eql(null);
posts[1].mobiledoc.should.eql('{"version":"0.3.1","ghostVersion":"4.0","markups":[],"atoms":[],"cards":[],"sections":[[1,"p",[[0,[],0,""]]]]}');
});
});
it('mobiledoc is null, html field is set', function () {
const exportData = exportedBodyV1().db[0];
exportData.data.posts[0] = testUtils.DataGenerator.forKnex.createPost({
slug: 'post1',
html: '
This is my post content. '
});
exportData.data.posts[0].mobiledoc = null;
const options = Object.assign({formats: 'mobiledoc,html'}, testUtils.context.internal);
return dataImporter.doImport(exportData, importOptions)
.then(function () {
return Promise.all([
models.Post.findPage(options)
]);
}).then(function (result) {
const posts = result[0].data.map(model => model.toJSON(options));
posts.length.should.eql(1);
should(posts[0].html).eql(null);
posts[0].mobiledoc.should.eql('{"version":"0.3.1","ghostVersion":"4.0","markups":[],"atoms":[],"cards":[],"sections":[[1,"p",[[0,[],0,""]]]]}');
});
});
it('mobiledoc and html is null', function () {
const exportData = exportedBodyV1().db[0];
exportData.data.posts[0] = testUtils.DataGenerator.forKnex.createPost({
slug: 'post1'
});
exportData.data.posts[0].mobiledoc = null;
exportData.data.posts[0].html = null;
const options = Object.assign({formats: 'mobiledoc,html'}, testUtils.context.internal);
return dataImporter.doImport(exportData, importOptions)
.then(function () {
return Promise.all([
models.Post.findPage(options)
]);
}).then(function (result) {
const posts = result[0].data.map(model => model.toJSON(options));
posts.length.should.eql(1);
should(posts[0].html).eql(null);
posts[0].mobiledoc.should.eql('{"version":"0.3.1","ghostVersion":"4.0","markups":[],"atoms":[],"cards":[],"sections":[[1,"p",[[0,[],0,""]]]]}');
});
});
it('mobiledoc is set and html is null', function () {
const exportData = exportedBodyV1().db[0];
exportData.data.posts[0] = testUtils.DataGenerator.forKnex.createPost({
slug: 'post1'
});
exportData.data.posts[0].html = null;
const options = Object.assign({formats: 'mobiledoc,html'}, testUtils.context.internal);
return dataImporter.doImport(exportData, importOptions)
.then(function () {
return Promise.all([
models.Post.findPage(options)
]);
}).then(function (result) {
const posts = result[0].data.map(model => model.toJSON(options));
posts.length.should.eql(1);
posts[0].html.should.eql('markdown \n');
posts[0].mobiledoc.should.eql('{"version":"0.3.1","markups":[],"atoms":[],"cards":[["markdown",{"markdown":"## markdown"}]],"sections":[[10,0]],"ghostVersion":"3.0"}');
});
});
it('post has "kg-card-markdown" class', function () {
const exportData = exportedBodyV1().db[0];
exportData.data.posts[0] = testUtils.DataGenerator.forKnex.createPost({
slug: 'post1',
html: '
This is my post content. ',
mobiledoc: testUtils.DataGenerator.markdownToMobiledoc('# This is my post content')
});
const options = Object.assign({formats: 'mobiledoc,html'}, testUtils.context.internal);
return dataImporter.doImport(exportData, importOptions)
.then(function () {
return Promise.all([
models.Post.findPage(options)
]);
}).then(function (result) {
const posts = result[0].data.map(model => model.toJSON(options));
posts.length.should.eql(1);
posts[0].html.should.eql('This is my post content \n');
const expectedMobiledoc = JSON.parse(exportData.data.posts[0].mobiledoc);
expectedMobiledoc.ghostVersion = '3.0';
posts[0].mobiledoc.should.eql(JSON.stringify(expectedMobiledoc));
});
});
it('import old Koenig Beta post format', function () {
const exportData = exportedBodyV1().db[0];
exportData.data.posts[0] = testUtils.DataGenerator.forKnex.createPost({
slug: 'post1',
mobiledoc: JSON.stringify({
version: '0.3.1',
markups: [],
atoms: [],
cards: [
['image', {
imageStyle: 'wide',
src: 'source'
}],
['markdown', {
markdown: '# Post Content'
}]
],
sections: [[10,0],[10,1]]
})
});
delete exportData.data.posts[0].html;
exportData.data.posts[1] = testUtils.DataGenerator.forKnex.createPost({
slug: 'post2',
mobiledoc: JSON.stringify({
version: '0.3.1',
markups: [],
atoms: [],
cards: [
['markdown', {
markdown: '## Post Content'
}],
['image', {
imageStyle: 'not-wide',
src: 'source2'
}]
],
sections: [[10,0],[10,1]]
}),
html: '
Post Content \n'
});
const options = Object.assign({formats: 'mobiledoc,html'}, testUtils.context.internal);
return dataImporter.doImport(exportData, importOptions)
.then(function () {
return Promise.all([
models.Post.findPage(options)
]);
}).then(function (result) {
const posts = result[0].data.map(model => model.toJSON(options));
posts.length.should.eql(2);
posts[0].mobiledoc.should.eql('{"version":"0.3.1","markups":[],"atoms":[],"cards":[["markdown",{"markdown":"## Post Content"}],["image",{"src":"source2","cardWidth":"not-wide"}]],"sections":[[10,0],[10,1]],"ghostVersion":"3.0"}');
posts[0].html.should.eql('Post Content \n ');
posts[1].mobiledoc.should.eql('{"version":"0.3.1","markups":[],"atoms":[],"cards":[["image",{"src":"source","cardWidth":"wide"}],["markdown",{"markdown":"# Post Content"}]],"sections":[[10,0],[10,1]],"ghostVersion":"3.0"}');
posts[1].html.should.eql('Post Content \n');
});
});
});
});