diff --git a/core/server/models/base/index.js b/core/server/models/base/index.js index 2033362f57..1e7f0b6f28 100644 --- a/core/server/models/base/index.js +++ b/core/server/models/base/index.js @@ -283,7 +283,7 @@ ghostBookshelf.Model = ghostBookshelf.Model.extend({ */ onUpdating: function onUpdating(newObj, attr, options) { if (schema.tables[this.tableName].hasOwnProperty('updated_by')) { - if (!options.importing) { + if (!options.importing && !options.migrating) { this.set('updated_by', this.contextUser(options)); } } @@ -304,7 +304,9 @@ ghostBookshelf.Model = ghostBookshelf.Model.extend({ // CASE: do not allow setting only the `updated_at` field, exception: importing if (schema.tables[this.tableName].hasOwnProperty('updated_at') && !options.importing) { - if (newObj.hasChanged() && Object.keys(newObj.changed).length === 1 && newObj.changed.updated_at) { + if (options.migrating) { + newObj.set('updated_at', newObj.previous('updated_at')); + } else if (newObj.hasChanged() && Object.keys(newObj.changed).length === 1 && newObj.changed.updated_at) { newObj.set('updated_at', newObj.previous('updated_at')); } } diff --git a/core/test/unit/models/post_spec.js b/core/test/unit/models/post_spec.js index c0936fad21..3de90ac4f4 100644 --- a/core/test/unit/models/post_spec.js +++ b/core/test/unit/models/post_spec.js @@ -268,6 +268,45 @@ describe('Unit: models/post', function () { }); describe('edit', function () { + it('update post with options.migrating', function () { + const events = { + post: [], + tag: [] + }; + + sandbox.stub(models.Post.prototype, 'emitChange').callsFake(function (event) { + events.post.push(event); + }); + + sandbox.stub(models.Tag.prototype, 'emitChange').callsFake(function (event) { + events.tag.push(event); + }); + + let originalUpdatedAt; + let originalUpdatedBy; + + return models.Post.findOne({ + id: testUtils.DataGenerator.forKnex.posts[3].id, + status: 'draft' + }, {withRelated: ['tags']}) + .then((post) => { + originalUpdatedAt = post.get('updated_at'); + originalUpdatedBy = post.get('updated_by'); + + // post will be updated, tags relation not + return models.Post.edit({ + html: 'changed html' + }, _.merge({id: testUtils.DataGenerator.forKnex.posts[3].id, migrating: true}, testUtils.context.editor)); + }) + .then((post) => { + post.get('updated_at').should.eql(originalUpdatedAt); + post.get('updated_by').should.eql(originalUpdatedBy); + + events.post.should.eql(['edited']); + events.tag.should.eql([]); + }); + }); + it('update post, relation has not changed', function () { const events = { post: [],