mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-02-10 23:36:14 -05:00
Allows disabling of timestamps when importing posts
fixes #1696 - this is a temp workaround until full fledged support is added directly to bookshelfjs - when importing we use the import json blob’s timestamps as the value that’s set in the DB - added tests for this change
This commit is contained in:
parent
d33effaa88
commit
32528de4a4
3 changed files with 39 additions and 9 deletions
|
@ -92,7 +92,7 @@ function importTags(ops, tableData, transaction) {
|
||||||
function importPosts(ops, tableData, transaction) {
|
function importPosts(ops, tableData, transaction) {
|
||||||
tableData = stripProperties(['id'], tableData);
|
tableData = stripProperties(['id'], tableData);
|
||||||
_.each(tableData, function (post) {
|
_.each(tableData, function (post) {
|
||||||
ops.push(models.Post.add(post, {transacting: transaction}));
|
ops.push(models.Post.add(post, {transacting: transaction, importing: true}));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -196,7 +196,16 @@ ghostBookshelf.Model = ghostBookshelf.Model.extend({
|
||||||
*/
|
*/
|
||||||
add: function (newObj, options) {
|
add: function (newObj, options) {
|
||||||
options = options || {};
|
options = options || {};
|
||||||
return this.forge(newObj).save(null, options);
|
var instance = this.forge(newObj);
|
||||||
|
// We allow you to disable timestamps
|
||||||
|
// when importing posts so that
|
||||||
|
// the new posts `updated_at` value
|
||||||
|
// is the same as the import json blob.
|
||||||
|
// More details refer to https://github.com/TryGhost/Ghost/issues/1696
|
||||||
|
if (options.importing) {
|
||||||
|
instance.hasTimestamps = false;
|
||||||
|
}
|
||||||
|
return instance.save(null, options);
|
||||||
},
|
},
|
||||||
|
|
||||||
create: function () {
|
create: function () {
|
||||||
|
|
|
@ -3,6 +3,7 @@ var testUtils = require('../utils'),
|
||||||
should = require('should'),
|
should = require('should'),
|
||||||
sinon = require('sinon'),
|
sinon = require('sinon'),
|
||||||
when = require('when'),
|
when = require('when'),
|
||||||
|
assert = require('assert'),
|
||||||
_ = require("underscore"),
|
_ = require("underscore"),
|
||||||
errors = require('../../server/errorHandling'),
|
errors = require('../../server/errorHandling'),
|
||||||
|
|
||||||
|
@ -116,7 +117,8 @@ describe("Import", function () {
|
||||||
should.exist(Importer001);
|
should.exist(Importer001);
|
||||||
|
|
||||||
it("imports data from 001", function (done) {
|
it("imports data from 001", function (done) {
|
||||||
var exportData;
|
var exportData,
|
||||||
|
timestamp = 1349928000000;
|
||||||
|
|
||||||
// Migrate to version 001
|
// Migrate to version 001
|
||||||
migration.migrateUp().then(function () {
|
migration.migrateUp().then(function () {
|
||||||
|
@ -132,6 +134,11 @@ describe("Import", function () {
|
||||||
}).then(function (exported) {
|
}).then(function (exported) {
|
||||||
exportData = exported;
|
exportData = exported;
|
||||||
|
|
||||||
|
// Modify timestamp data for testing
|
||||||
|
exportData.data.posts[0].created_at = timestamp;
|
||||||
|
exportData.data.posts[0].updated_at = timestamp;
|
||||||
|
exportData.data.posts[0].published_at = timestamp;
|
||||||
|
|
||||||
return importer("001", exportData);
|
return importer("001", exportData);
|
||||||
}).then(function () {
|
}).then(function () {
|
||||||
// Grab the data from tables
|
// Grab the data from tables
|
||||||
|
@ -142,21 +149,35 @@ describe("Import", function () {
|
||||||
knex("tags").select()
|
knex("tags").select()
|
||||||
]);
|
]);
|
||||||
}).then(function (importedData) {
|
}).then(function (importedData) {
|
||||||
|
|
||||||
should.exist(importedData);
|
should.exist(importedData);
|
||||||
|
|
||||||
importedData.length.should.equal(4, 'Did not get data successfully');
|
importedData.length.should.equal(4, 'Did not get data successfully');
|
||||||
|
|
||||||
|
var users = importedData[0],
|
||||||
|
posts = importedData[1],
|
||||||
|
settings = importedData[2],
|
||||||
|
tags = importedData[3];
|
||||||
|
|
||||||
// we always have 0 users as there isn't one in fixtures
|
// we always have 0 users as there isn't one in fixtures
|
||||||
importedData[0].length.should.equal(0, 'There should not be a user');
|
users.length.should.equal(0, 'There should not be a user');
|
||||||
// import no longer requires all data to be dropped, and adds posts
|
// import no longer requires all data to be dropped, and adds posts
|
||||||
importedData[1].length.should.equal(exportData.data.posts.length + 1, 'Wrong number of posts');
|
posts.length.should.equal(exportData.data.posts.length + 1, 'Wrong number of posts');
|
||||||
|
|
||||||
// test settings
|
// test settings
|
||||||
importedData[2].length.should.be.above(0, 'Wrong number of settings');
|
settings.length.should.be.above(0, 'Wrong number of settings');
|
||||||
_.findWhere(importedData[2], {key: "databaseVersion"}).value.should.equal("001", 'Wrong database version');
|
_.findWhere(settings, {key: "databaseVersion"}).value.should.equal("001", 'Wrong database version');
|
||||||
|
|
||||||
// test tags
|
// test tags
|
||||||
importedData[3].length.should.equal(exportData.data.tags.length, 'no new tags');
|
tags.length.should.equal(exportData.data.tags.length, 'no new tags');
|
||||||
|
|
||||||
|
// Ensure imported post retains set timestamp
|
||||||
|
// When in sqlite we are returned a unix timestamp number,
|
||||||
|
// in MySQL we're returned a date object.
|
||||||
|
// We pass the returned post always through the date object
|
||||||
|
// to ensure the return is consistant for all DBs.
|
||||||
|
assert.equal( new Date(posts[1].created_at).getTime(), timestamp);
|
||||||
|
assert.equal( new Date(posts[1].updated_at).getTime(), timestamp);
|
||||||
|
assert.equal( new Date(posts[1].published_at).getTime(), timestamp);
|
||||||
|
|
||||||
done();
|
done();
|
||||||
}).then(null, done);
|
}).then(null, done);
|
||||||
|
|
Loading…
Add table
Reference in a new issue