2021-03-12 15:47:08 +13:00
const testUtils = require ( '../../utils' ) ;
2021-03-12 18:28:48 +13:00
const { exportedBodyV1 } = require ( '../../utils/fixtures/export/body-generator' ) ;
2021-03-12 15:47:08 +13:00
const models = require ( '../../../core/server/models' ) ;
const importer = require ( '../../../core/server/data/importer' ) ;
const dataImporter = importer . importers [ 1 ] ;
const importOptions = {
returnImportedData : true
} ;
describe ( 'Integration: Importer 1.0' , function ( ) {
beforeEach ( testUtils . teardownDb ) ;
beforeEach ( testUtils . setup ( 'roles' , 'owner' , 'settings' ) ) ;
it ( 'ensure amp field get\'s respected' , function ( ) {
2021-03-12 18:28:48 +13:00
const exportData = exportedBodyV1 ( ) . db [ 0 ] ;
2021-03-12 15:47:08 +13:00
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 ( ) {
2021-03-12 18:28:48 +13:00
const exportData = exportedBodyV1 ( ) . db [ 0 ] ;
2021-03-12 15:47:08 +13:00
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 ( ) {
2021-03-12 18:28:48 +13:00
const exportData = exportedBodyV1 ( ) . db [ 0 ] ;
2021-03-12 15:47:08 +13:00
exportData . data . posts [ 0 ] = testUtils . DataGenerator . forKnex . createPost ( {
slug : 'post1' ,
html : '<div><h1>This is my post content.</h1></div>'
} ) ;
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 ( ) {
2021-03-12 18:28:48 +13:00
const exportData = exportedBodyV1 ( ) . db [ 0 ] ;
2021-03-12 15:47:08 +13:00
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 ( ) {
2021-03-12 18:28:48 +13:00
const exportData = exportedBodyV1 ( ) . db [ 0 ] ;
2021-03-12 15:47:08 +13:00
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 ( '<!--kg-card-begin: markdown--><h2 id="markdown">markdown</h2>\n<!--kg-card-end: markdown-->' ) ;
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 ( ) {
2021-03-12 18:28:48 +13:00
const exportData = exportedBodyV1 ( ) . db [ 0 ] ;
2021-03-12 15:47:08 +13:00
exportData . data . posts [ 0 ] = testUtils . DataGenerator . forKnex . createPost ( {
slug : 'post1' ,
html : '<div class="kg-card-markdown"><h1>This is my post content.</h1></div>' ,
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 ( '<!--kg-card-begin: markdown--><h1 id="thisismypostcontent">This is my post content</h1>\n<!--kg-card-end: markdown-->' ) ;
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 ( ) {
2021-03-12 18:28:48 +13:00
const exportData = exportedBodyV1 ( ) . db [ 0 ] ;
2021-03-12 15:47:08 +13:00
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 : '<div class="kg-post"><h2 id="postcontent">Post Content</h2></div>\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 ( '<!--kg-card-begin: markdown--><h2 id="postcontent">Post Content</h2>\n<!--kg-card-end: markdown--><figure class="kg-card kg-image-card kg-width-not-wide"><img src="source2" class="kg-image" alt loading="lazy"></figure>' ) ;
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 ( '<figure class="kg-card kg-image-card kg-width-wide"><img src="source" class="kg-image" alt loading="lazy"></figure><!--kg-card-begin: markdown--><h1 id="postcontent">Post Content</h1>\n<!--kg-card-end: markdown-->' ) ;
} ) ;
} ) ;
} ) ;
} ) ;