mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-04-08 02:52:39 -05:00
parent
748c664b78
commit
8c6ba47b0e
2 changed files with 65 additions and 8 deletions
|
@ -23,7 +23,7 @@ events.on('token.added', function (tokenModel) {
|
|||
events.on('settings.activeTimezone.edited', function (settingModel) {
|
||||
var newTimezone = settingModel.attributes.value,
|
||||
previousTimezone = settingModel._updatedAttributes.value,
|
||||
timezoneOffset = moment.tz(newTimezone).utcOffset();
|
||||
timezoneOffsetDiff = moment.tz(newTimezone).utcOffset() - moment.tz(previousTimezone).utcOffset();
|
||||
|
||||
// CASE: TZ was updated, but did not change
|
||||
if (previousTimezone === newTimezone) {
|
||||
|
@ -38,7 +38,7 @@ events.on('settings.activeTimezone.edited', function (settingModel) {
|
|||
|
||||
return sequence(results.map(function (post) {
|
||||
return function reschedulePostIfPossible() {
|
||||
var newPublishedAtMoment = moment(post.get('published_at')).add(timezoneOffset, 'minutes');
|
||||
var newPublishedAtMoment = moment(post.get('published_at')).add(timezoneOffsetDiff, 'minutes');
|
||||
|
||||
/**
|
||||
* CASE:
|
||||
|
|
|
@ -15,13 +15,14 @@ describe('Models: listeners', function () {
|
|||
var eventsToRemember = {},
|
||||
scope = {
|
||||
posts: [],
|
||||
publishedAtFutureMoment: moment().add(2, 'days').startOf('hour'),
|
||||
timezoneOffset: 420,
|
||||
publishedAtFutureMoment1: moment().add(2, 'days').startOf('hour'),
|
||||
publishedAtFutureMoment3: moment().add(10, 'hours').startOf('hour'),
|
||||
timezoneOffset: -480,
|
||||
newTimezone: 'America/Los_Angeles',
|
||||
oldTimezone: 'Europe/London'
|
||||
};
|
||||
|
||||
beforeEach(testUtils.teardown);
|
||||
before(testUtils.teardown);
|
||||
beforeEach(testUtils.setup());
|
||||
|
||||
beforeEach(function () {
|
||||
|
@ -34,6 +35,7 @@ describe('Models: listeners', function () {
|
|||
|
||||
afterEach(function (done) {
|
||||
events.on.restore();
|
||||
scope.posts = [];
|
||||
testUtils.teardown(done);
|
||||
});
|
||||
|
||||
|
@ -44,7 +46,7 @@ describe('Models: listeners', function () {
|
|||
beforeEach(function (done) {
|
||||
// will get rescheduled
|
||||
scope.posts.push(testUtils.DataGenerator.forKnex.createPost({
|
||||
published_at: scope.publishedAtFutureMoment.toDate(),
|
||||
published_at: scope.publishedAtFutureMoment1.toDate(),
|
||||
status: 'scheduled',
|
||||
title: '1',
|
||||
slug: '1'
|
||||
|
@ -58,10 +60,18 @@ describe('Models: listeners', function () {
|
|||
slug: '2'
|
||||
}));
|
||||
|
||||
// will get rescheduled
|
||||
scope.posts.push(testUtils.DataGenerator.forKnex.createPost({
|
||||
published_at: scope.publishedAtFutureMoment3.toDate(),
|
||||
status: 'scheduled',
|
||||
title: '3',
|
||||
slug: '3'
|
||||
}));
|
||||
|
||||
Promise.all(scope.posts.map(function (post) {
|
||||
return models.Post.add(post, testUtils.context.owner);
|
||||
})).then(function (result) {
|
||||
result.length.should.eql(2);
|
||||
result.length.should.eql(3);
|
||||
posts = result;
|
||||
done();
|
||||
}).catch(function (err) {
|
||||
|
@ -85,11 +95,58 @@ describe('Models: listeners', function () {
|
|||
}),
|
||||
post2 = _.find(results.models, function (post) {
|
||||
return post.get('title') === '2';
|
||||
}),
|
||||
post3 = _.find(results.models, function (post) {
|
||||
return post.get('title') === '3';
|
||||
});
|
||||
|
||||
if (results.models.length === posts.length &&
|
||||
post1.get('status') === 'scheduled' &&
|
||||
post2.get('status') === 'draft' &&
|
||||
moment(post1.get('published_at')).diff(scope.publishedAtFutureMoment.clone().subtract(scope.timezoneOffset, 'minutes')) === 0) {
|
||||
post3.get('status') === 'scheduled' &&
|
||||
moment(post1.get('published_at')).diff(scope.publishedAtFutureMoment1.clone().add(scope.timezoneOffset, 'minutes')) === 0 &&
|
||||
moment(post3.get('published_at')).diff(scope.publishedAtFutureMoment3.clone().add(scope.timezoneOffset, 'minutes')) === 0) {
|
||||
return done();
|
||||
}
|
||||
|
||||
clearTimeout(timeout);
|
||||
timeout = setTimeout(retry, 500);
|
||||
})
|
||||
.catch(done);
|
||||
})();
|
||||
});
|
||||
|
||||
it('activeTimezone changes change: from a TZ to UTC', function (done) {
|
||||
var timeout;
|
||||
|
||||
scope.timezoneOffset = -180;
|
||||
scope.oldTimezone = 'Asia/Baghdad';
|
||||
scope.newTimezone = 'Etc/UTC';
|
||||
|
||||
eventsToRemember['settings.activeTimezone.edited']({
|
||||
attributes: {value: scope.newTimezone},
|
||||
_updatedAttributes: {value: scope.oldTimezone}
|
||||
});
|
||||
|
||||
(function retry() {
|
||||
models.Post.findAll({context: {internal: true}})
|
||||
.then(function (results) {
|
||||
var post1 = _.find(results.models, function (post) {
|
||||
return post.get('title') === '1';
|
||||
}),
|
||||
post2 = _.find(results.models, function (post) {
|
||||
return post.get('title') === '2';
|
||||
}),
|
||||
post3 = _.find(results.models, function (post) {
|
||||
return post.get('title') === '3';
|
||||
});
|
||||
|
||||
if (results.models.length === posts.length &&
|
||||
post1.get('status') === 'scheduled' &&
|
||||
post2.get('status') === 'draft' &&
|
||||
post3.get('status') === 'scheduled' &&
|
||||
moment(post1.get('published_at')).diff(scope.publishedAtFutureMoment1.clone().add(scope.timezoneOffset, 'minutes')) === 0 &&
|
||||
moment(post3.get('published_at')).diff(scope.publishedAtFutureMoment3.clone().add(scope.timezoneOffset, 'minutes')) === 0) {
|
||||
return done();
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue