0
Fork 0
mirror of https://github.com/TryGhost/Ghost.git synced 2025-01-20 22:42:53 -05:00

🐛 Ensure post tags sort order is correct when importing (#8481)

refs #6967, refs #5422

- imports posts tags by post id and sort order
- test: fix order problem (sqlite)
This commit is contained in:
Katharina Irrgang 2017-05-23 20:12:08 +02:00 committed by David Wolfe
parent 47b24b2d4f
commit 925d72198c
3 changed files with 522 additions and 5 deletions

View file

@ -32,8 +32,11 @@ class PostsImporter extends BaseImporter {
let postTags = this.posts_tags,
postsWithTags = new Map(),
self = this,
tags,
duplicatedTagsPerPost = {};
duplicatedTagsPerPost = {},
tagsToAttach = [],
foundOriginalTag;
postTags = _.orderBy(postTags, ['post_id', 'sort_order'], ['asc', 'asc']);
_.each(postTags, function (postTag) {
if (!postsWithTags.get(postTag.post_id)) {
@ -52,11 +55,19 @@ class PostsImporter extends BaseImporter {
});
postsWithTags.forEach(function (tagIds, postId) {
tags = _.filter(self.tags, function (tag) {
return _.indexOf(tagIds, tag.id) !== -1;
tagsToAttach = [];
_.each(tagIds, function (tagId) {
foundOriginalTag = _.find(self.tags, {id: tagId});
if (!foundOriginalTag) {
return;
}
tagsToAttach.push(foundOriginalTag);
});
_.each(tags, function (tag) {
_.each(tagsToAttach, function (tag) {
_.each(self.dataToImport, function (obj) {
if (obj.id === postId) {
if (!_.isArray(obj.tags)) {

View file

@ -9,6 +9,7 @@ var should = require('should'),
// Stuff we are testing
db = require('../../../../../server/data/db'),
models = require('../../../../../server/models'),
exporter = require('../../../../../server/data/export'),
importer = require('../../../../../server/data/importer'),
dataImporter = importer.importers[1],
@ -494,6 +495,54 @@ describe('Import', function () {
});
});
describe('004: order', function () {
beforeEach(testUtils.setup('roles', 'owner', 'settings'));
it('ensure post tag order is correct', function (done) {
var exportData;
testUtils.fixtures.loadExportFixture('export-004').then(function (exported) {
exportData = exported;
return dataImporter.doImport(exportData);
}).then(function () {
// Grab the data from tables
// NOTE: we have to return sorted data, sqlite can insert the posts in a different order
return Promise.all([
models.Post.findPage({include: ['tags']}),
models.Tag.findAll()
]);
}).then(function (importedData) {
should.exist(importedData);
importedData.length.should.equal(2, 'Did not get data successfully');
var posts = importedData[0].posts,
tags = importedData[1];
// test posts
posts.length.should.equal(exportData.data.posts.length, 'Wrong number of posts');
posts[0].tags.length.should.eql(1);
posts[0].tags[0].slug.should.eql(exportData.data.tags[0].slug);
// has a specific sort_order
posts[1].tags.length.should.eql(3);
posts[1].tags[0].slug.should.eql(exportData.data.tags[2].slug);
posts[1].tags[1].slug.should.eql(exportData.data.tags[0].slug);
posts[1].tags[2].slug.should.eql(exportData.data.tags[1].slug);
// sort_order property is missing (order depends on the posts_tags entries)
posts[2].tags.length.should.eql(2);
posts[2].tags[0].slug.should.eql(exportData.data.tags[1].slug);
posts[2].tags[1].slug.should.eql(exportData.data.tags[0].slug);
// test tags
tags.length.should.equal(exportData.data.tags.length, 'no new tags');
done();
}).catch(done);
});
});
describe('Validation', function () {
beforeEach(testUtils.setup('roles', 'owner', 'settings'));

View file

@ -0,0 +1,457 @@
{
"meta": {
"exported_on": 1388318311015,
"version": "003"
},
"data": {
"posts": [
{
"id": 1,
"uuid": "8492fbba-1102-4b53-8e3e-abe207952f0c",
"title": "Welcome to Ghost",
"slug": "welcome-to-ghost",
"markdown": "You're live! Nice.",
"html": "<p>You're live! Nice.</p>",
"image": null,
"featured": 0,
"page": 0,
"status": "published",
"language": "en_US",
"meta_title": null,
"meta_description": null,
"author_id": 1,
"created_at": 1425164400000,
"created_by": 1,
"updated_at": 1425164400000,
"updated_by": 1,
"published_at": 1425164400000,
"published_by": 1
},
{
"id": 2,
"uuid": "8492fbba-1102-4b53-8e3e-abe207952f0c",
"title": "order test",
"slug": "order-test",
"markdown": "order test",
"html": "<p>Order Test.</p>",
"image": null,
"featured": 0,
"page": 0,
"status": "published",
"language": "en_US",
"meta_title": null,
"meta_description": null,
"author_id": 1,
"created_at": 1267398000000,
"created_by": 1,
"updated_at": 1267398000000,
"updated_by": 1,
"published_at": 1267398000000,
"published_by": 1
},
{
"id": 3,
"uuid": "8492fbba-1102-4b53-8e3e-abe207952f0c",
"title": "has no sort order",
"slug": "no-order-test",
"markdown": "no-order test",
"html": "<p>No Order Test.</p>",
"image": null,
"featured": 0,
"page": 0,
"status": "published",
"language": "en_US",
"meta_title": null,
"meta_description": null,
"author_id": 1,
"created_at": 1362092400000,
"created_by": 1,
"updated_at": 1362092400000,
"updated_by": 1,
"published_at": 1362092400000,
"published_by": 1
}
],
"users": [
{
"id": 1,
"uuid": "e5188224-4742-4c32-a2d6-e9c5c5d4c123",
"name": "Joe Bloggs",
"slug": "joe-bloggs",
"password": "$2a$10$.pZeeBE0gHXd0PTnbT/ph.GEKgd0Wd3q2pWna3ynTGBkPKnGIKABC",
"email": "jbloggs@example.com",
"image": null,
"cover": null,
"bio": "A blogger",
"website": null,
"location": null,
"accessibility": null,
"status": "active",
"language": "en_US",
"meta_title": null,
"meta_description": null,
"last_login": null,
"created_at": 1388319501897,
"created_by": 1,
"updated_at": null,
"updated_by": null
}
],
"roles": [
{
"id": 1,
"uuid": "d2ea9c7f-7e6b-4cae-b009-35c298206852",
"name": "Administrator",
"description": "Administrators",
"created_at": 1388318310794,
"created_by": 1,
"updated_at": 1388318310794,
"updated_by": 1
},
{
"id": 2,
"uuid": "b0d7d6b0-5b88-45b5-b0e5-a487741b843d",
"name": "Editor",
"description": "Editors",
"created_at": 1388318310796,
"created_by": 1,
"updated_at": 1388318310796,
"updated_by": 1
},
{
"id": 3,
"uuid": "9f72e817-5490-4ccf-bc78-c557dc9613ca",
"name": "Author",
"description": "Authors",
"created_at": 1388318310799,
"created_by": 1,
"updated_at": 1388318310799,
"updated_by": 1
}
],
"roles_users": [
{
"id": 1,
"role_id": 1,
"user_id": 1
}
],
"permissions": [
{
"id": 1,
"uuid": "bdfbd261-e0fb-4c8e-abab-aece7a9e8e34",
"name": "Edit posts",
"object_type": "post",
"action_type": "edit",
"object_id": null,
"created_at": 1388318310803,
"created_by": 1,
"updated_at": 1388318310803,
"updated_by": 1
},
{
"id": 2,
"uuid": "580d31c4-e3db-40f3-969d-9a1caea9d1bb",
"name": "Remove posts",
"object_type": "post",
"action_type": "remove",
"object_id": null,
"created_at": 1388318310814,
"created_by": 1,
"updated_at": 1388318310814,
"updated_by": 1
},
{
"id": 3,
"uuid": "c1f8b024-e383-494a-835d-6fb673f143db",
"name": "Create posts",
"object_type": "post",
"action_type": "create",
"object_id": null,
"created_at": 1388318310818,
"created_by": 1,
"updated_at": 1388318310818,
"updated_by": 1
}
],
"permissions_users": [],
"permissions_roles": [
{
"id": 1,
"role_id": 1,
"permission_id": 1
},
{
"id": 2,
"role_id": 1,
"permission_id": 2
},
{
"id": 3,
"role_id": 1,
"permission_id": 3
}
],
"settings": [
{
"id": 2,
"uuid": "95ce1c53-69b0-4f5f-be91-d3aeb39046b5",
"key": "dbHash",
"value": null,
"type": "core",
"created_at": 1388318310829,
"created_by": 1,
"updated_at": 1388318310829,
"updated_by": 1
},
{
"id": 3,
"uuid": "c356fbde-0bc5-4fe1-9309-2510291aa34d",
"key": "title",
"value": "Ghost",
"type": "blog",
"created_at": 1388318310830,
"created_by": 1,
"updated_at": 1388318310830,
"updated_by": 1
},
{
"id": 4,
"uuid": "858dc11f-8f9e-4011-99ee-d94c48d5a2ce",
"key": "description",
"value": "Just a blogging platform.",
"type": "blog",
"created_at": 1388318310830,
"created_by": 1,
"updated_at": 1388318310830,
"updated_by": 1
},
{
"id": 5,
"uuid": "37ca5ae7-bca6-4dd5-8021-4ef6c6dcb097",
"key": "email",
"value": "josephinebloggs@example.com",
"type": "blog",
"created_at": 1388318310830,
"created_by": 1,
"updated_at": 1388318310830,
"updated_by": 1
},
{
"id": 6,
"uuid": "1672d62c-fab7-4f22-b333-8cf760189f67",
"key": "logo",
"value": "",
"type": "blog",
"created_at": 1388318310830,
"created_by": 1,
"updated_at": 1388318310830,
"updated_by": 1
},
{
"id": 7,
"uuid": "cd8b0456-578b-467a-857e-551bad17a14d",
"key": "cover",
"value": "",
"type": "blog",
"created_at": 1388318310830,
"created_by": 1,
"updated_at": 1388318310830,
"updated_by": 1
},
{
"id": 8,
"uuid": "c4a074a4-05c7-49f7-83eb-068302c15d82",
"key": "defaultLang",
"value": "en_US",
"type": "blog",
"created_at": 1388318310830,
"created_by": 1,
"updated_at": 1388318310830,
"updated_by": 1
},
{
"id": 9,
"uuid": "21f2f5da-9bee-4dae-b3b7-b8d7baf8be33",
"key": "postsPerPage",
"value": "6",
"type": "blog",
"created_at": 1388318310830,
"created_by": 1,
"updated_at": 1388318310830,
"updated_by": 1
},
{
"id": 10,
"uuid": "2d21b736-f85a-4119-a0e3-5fc898b1bf47",
"key": "forceI18n",
"value": "true",
"type": "blog",
"created_at": 1388318310831,
"created_by": 1,
"updated_at": 1388318310831,
"updated_by": 1
},
{
"id": 11,
"uuid": "5c5b91b8-6062-4104-b855-9e121f72b0f0",
"key": "permalinks",
"value": "/:slug/",
"type": "blog",
"created_at": 1388318310831,
"created_by": 1,
"updated_at": 1388318310831,
"updated_by": 1
},
{
"id": 12,
"uuid": "795cb328-3e38-4906-81a8-fcdff19d914f",
"key": "activeTheme",
"value": "notcasper",
"type": "theme",
"created_at": 1388318310831,
"created_by": 1,
"updated_at": 1388318310831,
"updated_by": 1
},
{
"id": 13,
"uuid": "f3afce35-5166-453e-86c3-50dfff74dca7",
"key": "activeApps",
"value": "[]",
"type": "plugin",
"created_at": 1388318310831,
"created_by": 1,
"updated_at": 1388318310831,
"updated_by": 1
},
{
"id": 14,
"uuid": "2ea560a3-2304-449d-a62b-f7b622987510",
"key": "installedApps",
"value": "[]",
"type": "plugin",
"created_at": 1388318310831,
"created_by": 1,
"updated_at": 1388318310831,
"updated_by": 1
}
],
"tags": [
{
"id": 1,
"uuid": "a950117a-9735-4584-931d-25a28015a80d",
"name": "two",
"slug": "two",
"description": null,
"parent_id": null,
"meta_title": null,
"meta_description": null,
"created_at": 1388318310790,
"created_by": 1,
"updated_at": 1388318310790,
"updated_by": 1
},
{
"id": 2,
"uuid": "a950117a-9735-4584-931d-25a28015a80d",
"name": "one",
"slug": "one",
"description": null,
"parent_id": null,
"meta_title": null,
"meta_description": null,
"created_at": 1388318310790,
"created_by": 1,
"updated_at": 1388318310790,
"updated_by": 1
},
{
"id": 3,
"uuid": "a950117a-9735-4584-931d-25a28015a80d",
"name": "three",
"slug": "three",
"description": null,
"parent_id": null,
"meta_title": null,
"meta_description": null,
"created_at": 1388318310790,
"created_by": 1,
"updated_at": 1388318310790,
"updated_by": 1
}
],
"posts_tags": [
{
"id": 1,
"post_id": 1,
"tag_id": 1
},
{
"id": 2,
"post_id": 2,
"tag_id": 2,
"sort_order": 0
},
{
"id": 3,
"post_id": 2,
"tag_id": 1,
"sort_order": 1
},
{
"id": 4,
"post_id": 3,
"tag_id": 3
},
{
"id": 5,
"post_id": 3,
"tag_id": 1
},
{
"id": 6,
"post_id": 3,
"tag_id": 2
}
],
"apps": [
{
"id": 1,
"uuid": "4d7557f0-0949-4946-9fe8-ec030e0727f0",
"name": "Kudos",
"slug": "kudos",
"version": "0.0.1",
"status": "installed",
"created_at": 1388318312790,
"created_by": 1,
"updated_at": 1388318312790,
"updated_by": 1
}
],
"app_settings": [
{
"id": 1,
"uuid": "790e4551-b9cc-4954-8f5d-b6e651bc7342",
"key": "position",
"value": "bottom",
"app_id": 1,
"created_at": 1388318312790,
"created_by": 1,
"updated_at": 1388318312790,
"updated_by": 1
},
{
"id": 2,
"uuid": "29682b66-cdeb-4773-9821-bcf40ea93b58",
"key": "size",
"value": "60",
"app_id": 1,
"created_at": 1388318312790,
"created_by": 1,
"updated_at": 1388318312790,
"updated_by": 1
}
]
}
}