Skip to content

Commit e9cdc2c

Browse files
authored
Merge pull request #4283 from Countly/feature/push-recurring-3
Feature/push recurring 3
2 parents 9d45852 + ed8afa0 commit e9cdc2c

File tree

6 files changed

+52
-54
lines changed

6 files changed

+52
-54
lines changed

plugins/push/api/api-message.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -487,8 +487,8 @@ module.exports.toggle = async params => {
487487
return true;
488488
}
489489

490-
if (!msg.triggerAutoOrApi()) {
491-
throw new ValidationError(`The message doesn't have Cohort or Event trigger`);
490+
if (!msg.triggerAutoOrApi() && !msg.triggerRescheduleable()) {
491+
throw new ValidationError(`The message doesn't have Cohort, Event, Multi or Recurring trigger`);
492492
}
493493

494494
if (data.active && msg.is(State.Streamable)) {

plugins/push/api/send/data/const.js

+2-4
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,6 @@ const MEDIA_MIME_ANDROID = [
2626
};
2727

2828
const DEFAULTS = {
29-
schedule_ahead: 5 * 60000, // schedule job needs to be scheduled this much ms prior to the job date
30-
schedule_ahead_tz: 24 * 60 * 60000, // schedule job needs to be scheduled this much ms prior to the job date if we send in users' timezones
3129
queue_insert_batch: 100000, // insert into "push" collection in batches of 100 000 records
3230
max_media_size: 1024 * 1024 // 1Mb is a very conservative limit for media attachments
3331
};
@@ -173,8 +171,8 @@ const Time = {
173171
SEND_AHEAD: 5 * 60000, // send message max 5min early
174172
TIME_TO_SEND: 2 * 60 * 60000, // generally 2min should be enough to send a notification
175173
TOO_LATE_TO_SEND: 1 * 60 * 60000, // send message max 1hr late
176-
WESTMOST_TIMEZONE: 14 * 60 * 60000, // the most western timezone possible
177-
SCHEDULE_AHEAD: 10 * 60000, // schedule messages this much ahead (plus WESTMOST_TIMEZONE for timezoned messages) to ensure audience calculation runs on time
174+
EASTMOST_TIMEZONE: 14 * 60 * 60000, // the most eastern timezone possible
175+
SCHEDULE_AHEAD: 10 * 60000, // schedule messages this much ahead (plus EASTMOST_TIMEZONE for timezoned messages) to ensure audience calculation runs on time
178176
};
179177

180178
/* eslint-enable key-spacing, no-multi-spaces */

plugins/push/api/send/data/message.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
'use strict';
2-
const { State, Status, STATUSES, Mongoable, DEFAULTS, S, S_REGEXP } = require('./const'),
2+
const { State, Status, STATUSES, Mongoable, S, S_REGEXP, Time } = require('./const'),
33
{ Filter } = require('./filter'),
44
{ Content } = require('./content'),
55
{ Trigger, PlainTrigger, TriggerKind } = require('./trigger'),
@@ -525,7 +525,7 @@ class Message extends Mongoable {
525525
*/
526526
get needsScheduling() {
527527
return this.state === State.Created && this.triggers.filter(t => t.kind === TriggerKind.Plain &&
528-
(!t.delayed || (t.delayed && !t.tz && t.start.getTime() > Date.now() - DEFAULTS.schedule_ahead) || (t.delayed && t.tz && t.start.getTime() > Date.now() - DEFAULTS.schedule_ahead_tz))).length > 0;
528+
(!t.delayed || (t.delayed && !t.tz && t.start.getTime() > Date.now() - Time.SCHEDULE_AHEAD) || (t.delayed && t.tz && t.start.getTime() > Date.now() - (Time.EASTMOST_TIMEZONE + Time.SCHEDULE_AHEAD)))).length > 0;
529529
}
530530

531531
/**
@@ -654,7 +654,7 @@ class Message extends Mongoable {
654654
}
655655
let date = Date.now();
656656
if (plain.delayed) {
657-
date = plain.start.getTime() - (plain.tz ? DEFAULTS.schedule_ahead_tz : DEFAULTS.schedule_ahead);
657+
date = plain.start.getTime() - (plain.tz ? (Time.EASTMOST_TIMEZONE + Time.SCHEDULE_AHEAD) : Time.SCHEDULE_AHEAD);
658658
}
659659
await require('../../../../../api/parts/jobs').job('push:schedule', {mid: this._id, aid: this.app}).replace().once(date);
660660
}
@@ -663,7 +663,7 @@ class Message extends Mongoable {
663663
await require('../../../../pluginManager').getPluginsApis().push.cache.write(this.id, this.json);
664664
}
665665
let resch = this.triggerRescheduleable();
666-
if (resch) {
666+
if (resch && (this.is(State.Done) || this.state === State.Created)) {
667667
let reference = resch.nextReference(resch.last),
668668
start = reference && resch.scheduleDate(reference);
669669
log.i('Rescheduling message %s: reference %s (was %s), start %s', this.id, reference, resch.last, start);

plugins/push/api/send/data/trigger.js

+10-10
Original file line numberDiff line numberDiff line change
@@ -933,7 +933,7 @@ class RecurringTrigger extends ReschedulingTrigger {
933933
date.setMilliseconds(0);
934934

935935
if (this.bucket === RecurringType.Daily) {
936-
let min = date.getTime() - Time.WESTMOST_TIMEZONE; // actual minimal date, in the most western timezone
936+
let min = date.getTime() - Time.EASTMOST_TIMEZONE; // actual minimal date, in the most western timezone
937937
if (min < this.start.getTime()) {
938938
date = new Date(date.getTime() + Time.DAY);
939939
}
@@ -945,7 +945,7 @@ class RecurringTrigger extends ReschedulingTrigger {
945945
days = days.filter(d => d.getTime() >= this.start.getTime());
946946
days.sort((a, b) => a.getTime() > b.getTime() ? 1 : -1);
947947
date = days.shift();
948-
while (days.length && date.getTime() - Time.WESTMOST_TIMEZONE < this.start.getTime()) {
948+
while (days.length && date.getTime() - Time.EASTMOST_TIMEZONE < this.start.getTime()) {
949949
date = days.shift();
950950
}
951951
}
@@ -963,7 +963,7 @@ class RecurringTrigger extends ReschedulingTrigger {
963963

964964
days.sort((a, b) => a.getTime() > b.getTime() ? 1 : -1);
965965
date = days.shift();
966-
while (days.length && date.getTime() - Time.WESTMOST_TIMEZONE < this.start.getTime()) {
966+
while (days.length && date.getTime() - Time.EASTMOST_TIMEZONE < this.start.getTime()) {
967967
date = days.shift();
968968
}
969969
}
@@ -1046,11 +1046,11 @@ class RecurringTrigger extends ReschedulingTrigger {
10461046
*/
10471047
scheduleDate(reference, now = Date.now()) {
10481048
let ref = reference,
1049-
date = new Date(ref.getTime() - Time.WESTMOST_TIMEZONE - Time.SCHEDULE_AHEAD),
1049+
date = new Date(ref.getTime() - Time.EASTMOST_TIMEZONE - Time.SCHEDULE_AHEAD),
10501050
i = 0;
10511051
while ((date.getTime() + Time.SCHEDULE_AHEAD < now || date.getTime() + Time.SCHEDULE_AHEAD < this.start.getTime()) && i < 100) {
10521052
ref = this.nextReference(ref);
1053-
date = new Date(ref.getTime() - Time.WESTMOST_TIMEZONE - Time.SCHEDULE_AHEAD);
1053+
date = new Date(ref.getTime() - Time.EASTMOST_TIMEZONE - Time.SCHEDULE_AHEAD);
10541054
i++;
10551055
}
10561056
if (i === 100) {
@@ -1208,7 +1208,7 @@ class MultiTrigger extends ReschedulingTrigger {
12081208
* @returns {Date} first reference date
12091209
*/
12101210
reference() {
1211-
return this.tz ? new Date(this.dates[0].getTime() - this.sctz * 60000) : this.dates[0];
1211+
return this.tz ? new Date(toDate(this.dates[0]).getTime() - this.sctz * 60000) : toDate(this.dates[0]);
12121212
}
12131213

12141214
/**
@@ -1219,8 +1219,8 @@ class MultiTrigger extends ReschedulingTrigger {
12191219
*/
12201220
nextReference(previousReference) {
12211221
if (previousReference) {
1222-
return this.dates.map(d => this.tz ? new Date(d.getTime() - this.sctz * 60000) : d)
1223-
.filter(d => d.getTime() > previousReference.getTime())[0];
1222+
return this.dates.map(d => this.tz ? new Date(toDate(d).getTime() - this.sctz * 60000) : toDate(d))
1223+
.filter(d => toDate(d).getTime() > toDate(previousReference).getTime())[0];
12241224
}
12251225
else {
12261226
return this.reference();
@@ -1239,14 +1239,14 @@ class MultiTrigger extends ReschedulingTrigger {
12391239
return null;
12401240
}
12411241
let ref = reference,
1242-
date = this.tz ? new Date(ref.getTime() - Time.WESTMOST_TIMEZONE - Time.SCHEDULE_AHEAD) : new Date(ref.getTime() - Time.SCHEDULE_AHEAD),
1242+
date = this.tz ? new Date(ref.getTime() - Time.EASTMOST_TIMEZONE - Time.SCHEDULE_AHEAD) : new Date(ref.getTime() - Time.SCHEDULE_AHEAD),
12431243
i = 0;
12441244
while (date.getTime() < now && i < 100) {
12451245
ref = this.nextReference(ref);
12461246
if (!ref) {
12471247
return null;
12481248
}
1249-
date = this.tz ? new Date(ref.getTime() - Time.WESTMOST_TIMEZONE - Time.SCHEDULE_AHEAD) : new Date(ref.getTime() - Time.SCHEDULE_AHEAD);
1249+
date = this.tz ? new Date(ref.getTime() - Time.EASTMOST_TIMEZONE - Time.SCHEDULE_AHEAD) : new Date(ref.getTime() - Time.SCHEDULE_AHEAD);
12501250
i++;
12511251
}
12521252
if (i === 100) {

plugins/push/frontend/public/javascripts/countly.views.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -467,10 +467,10 @@
467467
onStepClick: function(nextStep, currentStep) {
468468
this.validateContentOnEnterIfNecessary(nextStep, currentStep);
469469
this.fetchUserPropertyOptionsOnContentEnter(nextStep, currentStep);
470-
if (!this.validateStartDates(nextStep, currentStep)) {
471-
CountlyHelpers.notify({ message: CV.i18n('push-notification.start-date-validation-warning'), type: "error"});
472-
return;
473-
}
470+
// if (!this.validateStartDates(nextStep, currentStep)) {
471+
// CountlyHelpers.notify({ message: CV.i18n('push-notification.start-date-validation-warning'), type: "error"});
472+
// return;
473+
// }
474474
if (!this.validateDeliveryDates(nextStep, currentStep)) {
475475
CountlyHelpers.notify({ message: CV.i18n('push-notification-drawer.date-validation'), type: "error"});
476476
return;

plugins/push/tests/tests-recurring-trigger.js

+30-30
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ const should = require('should'),
33
{ MultiRecurringMapper, setNow } = require('../api/send/audience');
44

55
const SCHEDULE_AHEAD = 10 * 60000,
6-
WESTMOST_TIMEZONE = 14 * 60 * 60000,
6+
EASTMOST_TIMEZONE = 14 * 60 * 60000,
77
users = [
88
{_id: 1, uid: 1, tk: [{tk: {ip: 'ip'}}], tz: 0},
99
{_id: 2, uid: 2, tk: [{tk: {ip: 'ip'}}], tz: 180},
@@ -68,13 +68,13 @@ describe('PUSH RECURRING', () => {
6868
mapper = new MultiRecurringMapper({_id: 'appid', timezone: 'Europe/Moscow'}, new Message({triggers: [trigger.json]}), trigger, 'i', 'p');
6969

7070
should.equal(first.getTime() + sctz * 60000, trigger.nextReference().getTime());
71-
should.equal(first.getTime() + sctz * 60000 - WESTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(trigger.nextReference(), now).getTime());
71+
should.equal(first.getTime() + sctz * 60000 - EASTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(trigger.nextReference(), now).getTime());
7272
should.equal(first.getTime() + sctz * 60000, trigger.nextReference(start).getTime());
73-
should.equal(first.getTime() + sctz * 60000 - WESTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(trigger.nextReference(start), now).getTime());
73+
should.equal(first.getTime() + sctz * 60000 - EASTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(trigger.nextReference(start), now).getTime());
7474
should.equal(second.getTime() + sctz * 60000, trigger.nextReference(new Date(first.getTime() + 20)).getTime());
75-
should.equal(second.getTime() + sctz * 60000 - WESTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(trigger.nextReference(new Date(first.getTime() + 20)), now).getTime());
75+
should.equal(second.getTime() + sctz * 60000 - EASTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(trigger.nextReference(new Date(first.getTime() + 20)), now).getTime());
7676
should.equal(third.getTime() + sctz * 60000, trigger.nextReference(new Date(second.getTime() + 20)).getTime());
77-
should.equal(third.getTime() + sctz * 60000 - WESTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(trigger.nextReference(new Date(second.getTime() + 20)), now).getTime());
77+
should.equal(third.getTime() + sctz * 60000 - EASTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(trigger.nextReference(new Date(second.getTime() + 20)), now).getTime());
7878
should.equal(null, trigger.nextReference(third));
7979
should.equal(null, trigger.scheduleDate(trigger.nextReference(third), now));
8080
should.equal(null, trigger.nextReference(new Date(third.getTime() + 5 * 60000)));
@@ -108,11 +108,11 @@ describe('PUSH RECURRING', () => {
108108
third = trigger.nextReference(second);
109109

110110
should.equal(startZero.getTime() + time + Time.DAY + 0 * every * 24 * 60 * 60000, first.getTime());
111-
should.equal(startZero.getTime() + time + Time.DAY + 0 * every * 24 * 60 * 60000 - WESTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(first, now).getTime());
111+
should.equal(startZero.getTime() + time + Time.DAY + 0 * every * 24 * 60 * 60000 - EASTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(first, now).getTime());
112112
should.equal(startZero.getTime() + time + Time.DAY + 1 * every * 24 * 60 * 60000, second.getTime());
113-
should.equal(startZero.getTime() + time + Time.DAY + 1 * every * 24 * 60 * 60000 - WESTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(second, now).getTime());
113+
should.equal(startZero.getTime() + time + Time.DAY + 1 * every * 24 * 60 * 60000 - EASTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(second, now).getTime());
114114
should.equal(startZero.getTime() + time + Time.DAY + 2 * every * 24 * 60 * 60000, third.getTime());
115-
should.equal(startZero.getTime() + time + Time.DAY + 2 * every * 24 * 60 * 60000 - WESTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(third, now).getTime());
115+
should.equal(startZero.getTime() + time + Time.DAY + 2 * every * 24 * 60 * 60000 - EASTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(third, now).getTime());
116116

117117
let mapped = users.map(u => mapper.map(u, start));
118118
should.equal(mapped[0]._id.getTimestamp().getTime(), start.getTime());
@@ -141,11 +141,11 @@ describe('PUSH RECURRING', () => {
141141
third = trigger.nextReference(second);
142142

143143
should.equal(startZero.getTime() + time + 0 * every * 24 * 60 * 60000, first.getTime());
144-
should.equal(startZero.getTime() + time + 0 * every * 24 * 60 * 60000 - WESTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(first, now).getTime());
144+
should.equal(startZero.getTime() + time + 0 * every * 24 * 60 * 60000 - EASTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(first, now).getTime());
145145
should.equal(startZero.getTime() + time + 1 * every * 24 * 60 * 60000, second.getTime());
146-
should.equal(startZero.getTime() + time + 1 * every * 24 * 60 * 60000 - WESTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(second, now).getTime());
146+
should.equal(startZero.getTime() + time + 1 * every * 24 * 60 * 60000 - EASTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(second, now).getTime());
147147
should.equal(startZero.getTime() + time + 2 * every * 24 * 60 * 60000, third.getTime());
148-
should.equal(startZero.getTime() + time + 2 * every * 24 * 60 * 60000 - WESTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(third, now).getTime());
148+
should.equal(startZero.getTime() + time + 2 * every * 24 * 60 * 60000 - EASTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(third, now).getTime());
149149

150150
let mapped = users.map(u => mapper.map(u, first));
151151
should.equal(mapped[0]._id.getTimestamp().getTime(), first.getTime());
@@ -193,13 +193,13 @@ describe('PUSH RECURRING', () => {
193193
should.equal(six.getTime(), sixth.getTime());
194194
should.equal(sev.getTime(), seventh.getTime());
195195

196-
should.equal(first.getTime() - WESTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(first, now).getTime());
197-
should.equal(second.getTime() - WESTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(second, now).getTime());
198-
should.equal(third.getTime() - WESTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(third, now).getTime());
199-
should.equal(fourth.getTime() - WESTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(fourth, now).getTime());
200-
should.equal(fifth.getTime() - WESTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(fifth, now).getTime());
201-
should.equal(sixth.getTime() - WESTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(sixth, now).getTime());
202-
should.equal(seventh.getTime() - WESTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(seventh, now).getTime());
196+
should.equal(first.getTime() - EASTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(first, now).getTime());
197+
should.equal(second.getTime() - EASTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(second, now).getTime());
198+
should.equal(third.getTime() - EASTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(third, now).getTime());
199+
should.equal(fourth.getTime() - EASTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(fourth, now).getTime());
200+
should.equal(fifth.getTime() - EASTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(fifth, now).getTime());
201+
should.equal(sixth.getTime() - EASTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(sixth, now).getTime());
202+
should.equal(seventh.getTime() - EASTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(seventh, now).getTime());
203203

204204
let mapped = users.map(u => mapper.map(u, first));
205205
should.equal(mapped[0]._id.getTimestamp().getTime(), first.getTime());
@@ -245,12 +245,12 @@ describe('PUSH RECURRING', () => {
245245
should.equal(fif.getTime(), fifth.getTime());
246246
should.equal(six.getTime(), sixth.getTime());
247247

248-
should.equal(first.getTime() - WESTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(first, now).getTime());
249-
should.equal(second.getTime() - WESTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(second, now).getTime());
250-
should.equal(third.getTime() - WESTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(third, now).getTime());
251-
should.equal(fourth.getTime() - WESTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(fourth, now).getTime());
252-
should.equal(fifth.getTime() - WESTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(fifth, now).getTime());
253-
should.equal(sixth.getTime() - WESTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(sixth, now).getTime());
248+
should.equal(first.getTime() - EASTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(first, now).getTime());
249+
should.equal(second.getTime() - EASTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(second, now).getTime());
250+
should.equal(third.getTime() - EASTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(third, now).getTime());
251+
should.equal(fourth.getTime() - EASTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(fourth, now).getTime());
252+
should.equal(fifth.getTime() - EASTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(fifth, now).getTime());
253+
should.equal(sixth.getTime() - EASTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(sixth, now).getTime());
254254

255255
let mapped = users.map(u => mapper.map(u, first));
256256
should.equal(mapped[0]._id.getTimestamp().getTime(), first.getTime());
@@ -296,12 +296,12 @@ describe('PUSH RECURRING', () => {
296296
should.equal(fif.getTime(), fifth.getTime());
297297
should.equal(six.getTime(), sixth.getTime());
298298

299-
should.equal(first.getTime() - WESTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(first, now).getTime());
300-
should.equal(second.getTime() - WESTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(second, now).getTime());
301-
should.equal(third.getTime() - WESTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(third, now).getTime());
302-
should.equal(fourth.getTime() - WESTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(fourth, now).getTime());
303-
should.equal(fifth.getTime() - WESTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(fifth, now).getTime());
304-
should.equal(sixth.getTime() - WESTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(sixth, now).getTime());
299+
should.equal(first.getTime() - EASTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(first, now).getTime());
300+
should.equal(second.getTime() - EASTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(second, now).getTime());
301+
should.equal(third.getTime() - EASTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(third, now).getTime());
302+
should.equal(fourth.getTime() - EASTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(fourth, now).getTime());
303+
should.equal(fifth.getTime() - EASTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(fifth, now).getTime());
304+
should.equal(sixth.getTime() - EASTMOST_TIMEZONE - SCHEDULE_AHEAD, trigger.scheduleDate(sixth, now).getTime());
305305

306306
let mapped = users.map(u => mapper.map(u, first));
307307
should.equal(mapped[0]._id.getTimestamp().getTime(), first.getTime());

0 commit comments

Comments
 (0)