node-schedule 1.2.5 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -1
- package/lib/schedule.js +11 -6
- package/package.json +1 -1
- package/test/.eslintrc +5 -0
- package/test/cancel-long-running-jobs.js +24 -0
- package/test/convenience-method-test.js +713 -0
- package/test/date-convenience-methods-test.js +59 -0
- package/test/es6/job-test.js +33 -0
- package/test/job-test.js +517 -0
- package/test/range-test.js +77 -0
- package/test/recurrence-rule-test.js +375 -0
- package/test/schedule-cron-jobs.js +134 -0
- package/test/start-end-test.js +327 -0
|
@@ -0,0 +1,713 @@
|
|
|
1
|
+
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var sinon = require('sinon');
|
|
5
|
+
var main = require('../package.json').main;
|
|
6
|
+
var schedule = require('../' + main);
|
|
7
|
+
|
|
8
|
+
var clock;
|
|
9
|
+
|
|
10
|
+
module.exports = {
|
|
11
|
+
setUp: function(cb) {
|
|
12
|
+
clock = sinon.useFakeTimers();
|
|
13
|
+
cb();
|
|
14
|
+
},
|
|
15
|
+
".scheduleJob": {
|
|
16
|
+
"Returns Job instance": function(test) {
|
|
17
|
+
var job = schedule.scheduleJob(new Date(Date.now() + 1000), function() {});
|
|
18
|
+
|
|
19
|
+
test.ok(job instanceof schedule.Job);
|
|
20
|
+
|
|
21
|
+
job.cancel();
|
|
22
|
+
test.done();
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
".scheduleJob(Date, fn)": {
|
|
26
|
+
"Runs job once at some date": function(test) {
|
|
27
|
+
test.expect(1);
|
|
28
|
+
|
|
29
|
+
schedule.scheduleJob(new Date(Date.now() + 3000), function() {
|
|
30
|
+
test.ok(true);
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
setTimeout(function() {
|
|
34
|
+
test.done();
|
|
35
|
+
}, 3250);
|
|
36
|
+
|
|
37
|
+
clock.tick(3250);
|
|
38
|
+
},
|
|
39
|
+
"Job doesn't emit initial 'scheduled' event": function(test) {
|
|
40
|
+
var job = schedule.scheduleJob(new Date(Date.now() + 1000), function() {});
|
|
41
|
+
|
|
42
|
+
job.on('scheduled', function() {
|
|
43
|
+
test.ok(false);
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
setTimeout(function() {
|
|
47
|
+
test.done();
|
|
48
|
+
}, 1250);
|
|
49
|
+
|
|
50
|
+
clock.tick(1250);
|
|
51
|
+
},
|
|
52
|
+
"Won't run job if scheduled in the past": function(test) {
|
|
53
|
+
test.expect(1);
|
|
54
|
+
var job = schedule.scheduleJob(new Date(Date.now() - 3000), function() {
|
|
55
|
+
test.ok(false);
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
test.equal(job, null);
|
|
59
|
+
|
|
60
|
+
setTimeout(function() {
|
|
61
|
+
test.done();
|
|
62
|
+
}, 1000);
|
|
63
|
+
|
|
64
|
+
clock.tick(1000);
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
".scheduleJob(RecurrenceRule, fn)": {
|
|
68
|
+
"Runs job at interval based on recur rule, repeating indefinitely": function(test) {
|
|
69
|
+
test.expect(3);
|
|
70
|
+
|
|
71
|
+
var rule = new schedule.RecurrenceRule();
|
|
72
|
+
rule.second = null; // fire every second
|
|
73
|
+
|
|
74
|
+
var job = schedule.scheduleJob(rule, function() {
|
|
75
|
+
test.ok(true);
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
setTimeout(function() {
|
|
79
|
+
job.cancel();
|
|
80
|
+
test.done();
|
|
81
|
+
}, 3250);
|
|
82
|
+
|
|
83
|
+
clock.tick(3250);
|
|
84
|
+
},
|
|
85
|
+
"Job doesn't emit initial 'scheduled' event": function(test) {
|
|
86
|
+
/*
|
|
87
|
+
* If this was Job#schedule it'd fire 4 times.
|
|
88
|
+
*/
|
|
89
|
+
test.expect(3);
|
|
90
|
+
|
|
91
|
+
var rule = new schedule.RecurrenceRule();
|
|
92
|
+
rule.second = null; // fire every second
|
|
93
|
+
|
|
94
|
+
var job = new schedule.scheduleJob(rule, function() {});
|
|
95
|
+
|
|
96
|
+
job.on('scheduled', function(runOnDate) {
|
|
97
|
+
test.ok(true);
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
setTimeout(function() {
|
|
101
|
+
job.cancel();
|
|
102
|
+
test.done();
|
|
103
|
+
}, 3250);
|
|
104
|
+
|
|
105
|
+
clock.tick(3250);
|
|
106
|
+
},
|
|
107
|
+
"Doesn't invoke job if recur rule schedules it in the past": function(test) {
|
|
108
|
+
test.expect(1);
|
|
109
|
+
var rule = new schedule.RecurrenceRule();
|
|
110
|
+
rule.year = 1960;
|
|
111
|
+
|
|
112
|
+
var job = schedule.scheduleJob(rule, function() {
|
|
113
|
+
test.ok(false);
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
test.equal(job, null);
|
|
117
|
+
|
|
118
|
+
setTimeout(function() {
|
|
119
|
+
test.done();
|
|
120
|
+
}, 1000);
|
|
121
|
+
|
|
122
|
+
clock.tick(1000);
|
|
123
|
+
}
|
|
124
|
+
},
|
|
125
|
+
".scheduleJob({...}, fn)": {
|
|
126
|
+
"Runs job at interval based on object, repeating indefinitely": function(test) {
|
|
127
|
+
test.expect(3);
|
|
128
|
+
|
|
129
|
+
var job = new schedule.scheduleJob({
|
|
130
|
+
second: null // Fire every second
|
|
131
|
+
}, function() {
|
|
132
|
+
test.ok(true);
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
setTimeout(function() {
|
|
136
|
+
job.cancel();
|
|
137
|
+
test.done();
|
|
138
|
+
}, 3250);
|
|
139
|
+
|
|
140
|
+
clock.tick(3250);
|
|
141
|
+
},
|
|
142
|
+
"Job doesn't emit initial 'scheduled' event": function(test) {
|
|
143
|
+
/*
|
|
144
|
+
* With Job#schedule this would be 3:
|
|
145
|
+
* scheduled at time 0
|
|
146
|
+
* scheduled at time 1000
|
|
147
|
+
* scheduled at time 2000
|
|
148
|
+
*/
|
|
149
|
+
test.expect(2);
|
|
150
|
+
|
|
151
|
+
var job = schedule.scheduleJob({
|
|
152
|
+
second: null // fire every second
|
|
153
|
+
}, function() {});
|
|
154
|
+
|
|
155
|
+
job.on('scheduled', function() {
|
|
156
|
+
test.ok(true);
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
setTimeout(function() {
|
|
160
|
+
job.cancel();
|
|
161
|
+
test.done();
|
|
162
|
+
}, 2250);
|
|
163
|
+
|
|
164
|
+
clock.tick(2250);
|
|
165
|
+
},
|
|
166
|
+
"Doesn't invoke job if object schedules it in the past": function(test) {
|
|
167
|
+
test.expect(1);
|
|
168
|
+
|
|
169
|
+
var job = schedule.scheduleJob({
|
|
170
|
+
year: 1960
|
|
171
|
+
}, function() {
|
|
172
|
+
test.ok(false);
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
test.equal(job, null);
|
|
176
|
+
|
|
177
|
+
setTimeout(function() {
|
|
178
|
+
test.done();
|
|
179
|
+
}, 1000);
|
|
180
|
+
|
|
181
|
+
clock.tick(1000);
|
|
182
|
+
}
|
|
183
|
+
},
|
|
184
|
+
".scheduleJob({...}, {...}, fn)": {
|
|
185
|
+
"Callback called for each job if callback is provided": function(test) {
|
|
186
|
+
test.expect(3);
|
|
187
|
+
|
|
188
|
+
var job = new schedule.scheduleJob({
|
|
189
|
+
second: null // Fire every second
|
|
190
|
+
}, function() {}, function() {
|
|
191
|
+
test.ok(true);
|
|
192
|
+
});
|
|
193
|
+
|
|
194
|
+
setTimeout(function() {
|
|
195
|
+
job.cancel();
|
|
196
|
+
test.done();
|
|
197
|
+
}, 3250);
|
|
198
|
+
|
|
199
|
+
clock.tick(3250);
|
|
200
|
+
}
|
|
201
|
+
},
|
|
202
|
+
".rescheduleJob(job, {...})": {
|
|
203
|
+
"Reschedule jobs from object based to object based": function(test) {
|
|
204
|
+
test.expect(3);
|
|
205
|
+
|
|
206
|
+
var job = new schedule.scheduleJob({
|
|
207
|
+
second: null
|
|
208
|
+
}, function() {
|
|
209
|
+
test.ok(true);
|
|
210
|
+
});
|
|
211
|
+
|
|
212
|
+
setTimeout(function() {
|
|
213
|
+
schedule.rescheduleJob(job, {
|
|
214
|
+
minute: null
|
|
215
|
+
});
|
|
216
|
+
}, 3250);
|
|
217
|
+
|
|
218
|
+
setTimeout(function() {
|
|
219
|
+
job.cancel();
|
|
220
|
+
test.done();
|
|
221
|
+
}, 5000);
|
|
222
|
+
|
|
223
|
+
clock.tick(5000);
|
|
224
|
+
},
|
|
225
|
+
"Reschedule jobs from every minutes to every second": function(test) {
|
|
226
|
+
test.expect(3);
|
|
227
|
+
|
|
228
|
+
var timeout = 60 * 1000;
|
|
229
|
+
|
|
230
|
+
var job = new schedule.scheduleJob({
|
|
231
|
+
minute: null
|
|
232
|
+
}, function() {
|
|
233
|
+
test.ok(true);
|
|
234
|
+
});
|
|
235
|
+
|
|
236
|
+
setTimeout(function() {
|
|
237
|
+
schedule.rescheduleJob(job, {
|
|
238
|
+
second: null
|
|
239
|
+
});
|
|
240
|
+
}, timeout);
|
|
241
|
+
|
|
242
|
+
setTimeout(function() {
|
|
243
|
+
job.cancel();
|
|
244
|
+
test.done();
|
|
245
|
+
}, timeout + 2250);
|
|
246
|
+
|
|
247
|
+
clock.tick(timeout + 2250);
|
|
248
|
+
}
|
|
249
|
+
},
|
|
250
|
+
".rescheduleJob(job, Date)": {
|
|
251
|
+
"Reschedule jobs from Date to Date": function(test) {
|
|
252
|
+
test.expect(1);
|
|
253
|
+
|
|
254
|
+
var job = new schedule.scheduleJob(new Date(Date.now() + 3000), function() {
|
|
255
|
+
test.ok(true);
|
|
256
|
+
});
|
|
257
|
+
|
|
258
|
+
setTimeout(function() {
|
|
259
|
+
schedule.rescheduleJob(job, new Date(Date.now() + 5000));
|
|
260
|
+
}, 1000);
|
|
261
|
+
|
|
262
|
+
setTimeout(function() {
|
|
263
|
+
test.done();
|
|
264
|
+
}, 6150);
|
|
265
|
+
|
|
266
|
+
clock.tick(6150);
|
|
267
|
+
},
|
|
268
|
+
"Reschedule jobs that has been executed": function(test) {
|
|
269
|
+
test.expect(2);
|
|
270
|
+
|
|
271
|
+
var job = new schedule.scheduleJob(new Date(Date.now() + 1000), function() {
|
|
272
|
+
test.ok(true);
|
|
273
|
+
});
|
|
274
|
+
|
|
275
|
+
setTimeout(function() {
|
|
276
|
+
schedule.rescheduleJob(job, new Date(Date.now() + 2000));
|
|
277
|
+
}, 2000);
|
|
278
|
+
|
|
279
|
+
setTimeout(function() {
|
|
280
|
+
test.done();
|
|
281
|
+
}, 5150);
|
|
282
|
+
|
|
283
|
+
clock.tick(5150);
|
|
284
|
+
}
|
|
285
|
+
},
|
|
286
|
+
".rescheduleJob(job, RecurrenceRule)": {
|
|
287
|
+
"Reschedule jobs from RecurrenceRule to RecurrenceRule": function(test) {
|
|
288
|
+
test.expect(3);
|
|
289
|
+
|
|
290
|
+
var timeout = 60 * 1000;
|
|
291
|
+
|
|
292
|
+
var rule = new schedule.RecurrenceRule();
|
|
293
|
+
rule.second = null; // fire every second
|
|
294
|
+
|
|
295
|
+
var job = schedule.scheduleJob(rule, function() {
|
|
296
|
+
test.ok(true);
|
|
297
|
+
});
|
|
298
|
+
|
|
299
|
+
var newRule = new schedule.RecurrenceRule();
|
|
300
|
+
newRule.minute = null;
|
|
301
|
+
|
|
302
|
+
setTimeout(function() {
|
|
303
|
+
schedule.rescheduleJob(job, newRule);
|
|
304
|
+
}, 2250);
|
|
305
|
+
|
|
306
|
+
setTimeout(function() {
|
|
307
|
+
job.cancel();
|
|
308
|
+
test.done();
|
|
309
|
+
}, timeout + 2250);
|
|
310
|
+
|
|
311
|
+
clock.tick(timeout + 2250);
|
|
312
|
+
},
|
|
313
|
+
"Reschedule jobs from RecurrenceRule to Date": function(test) {
|
|
314
|
+
test.expect(3);
|
|
315
|
+
|
|
316
|
+
var rule = new schedule.RecurrenceRule();
|
|
317
|
+
rule.second = null; // fire every second
|
|
318
|
+
|
|
319
|
+
var job = schedule.scheduleJob(rule, function() {
|
|
320
|
+
test.ok(true);
|
|
321
|
+
});
|
|
322
|
+
|
|
323
|
+
setTimeout(function() {
|
|
324
|
+
schedule.rescheduleJob(job, new Date(Date.now() + 2000));
|
|
325
|
+
}, 2150);
|
|
326
|
+
|
|
327
|
+
setTimeout(function() {
|
|
328
|
+
test.done();
|
|
329
|
+
}, 4250);
|
|
330
|
+
|
|
331
|
+
clock.tick(4250);
|
|
332
|
+
},
|
|
333
|
+
"Reschedule jobs from RecurrenceRule to {...}": function(test) {
|
|
334
|
+
test.expect(3);
|
|
335
|
+
|
|
336
|
+
var timeout = 60 * 1000;
|
|
337
|
+
|
|
338
|
+
var rule = new schedule.RecurrenceRule();
|
|
339
|
+
rule.second = null; // fire every second
|
|
340
|
+
|
|
341
|
+
var job = schedule.scheduleJob(rule, function() {
|
|
342
|
+
test.ok(true);
|
|
343
|
+
});
|
|
344
|
+
|
|
345
|
+
setTimeout(function() {
|
|
346
|
+
schedule.rescheduleJob(job, {
|
|
347
|
+
minute: null
|
|
348
|
+
});
|
|
349
|
+
}, 2150);
|
|
350
|
+
|
|
351
|
+
setTimeout(function() {
|
|
352
|
+
job.cancel();
|
|
353
|
+
test.done();
|
|
354
|
+
}, timeout + 2150);
|
|
355
|
+
|
|
356
|
+
clock.tick(timeout + 2150);
|
|
357
|
+
},
|
|
358
|
+
"Reschedule jobs that is not available": function(test) {
|
|
359
|
+
test.expect(4);
|
|
360
|
+
|
|
361
|
+
var rule = new schedule.RecurrenceRule();
|
|
362
|
+
rule.second = null; // fire every second
|
|
363
|
+
|
|
364
|
+
var job = schedule.scheduleJob(rule, function() {
|
|
365
|
+
test.ok(true);
|
|
366
|
+
});
|
|
367
|
+
|
|
368
|
+
setTimeout(function() {
|
|
369
|
+
schedule.rescheduleJob(null, new Date(Date.now() + 2000));
|
|
370
|
+
}, 2150);
|
|
371
|
+
|
|
372
|
+
setTimeout(function() {
|
|
373
|
+
job.cancel();
|
|
374
|
+
test.done();
|
|
375
|
+
}, 4250);
|
|
376
|
+
|
|
377
|
+
clock.tick(4250);
|
|
378
|
+
}
|
|
379
|
+
},
|
|
380
|
+
'.rescheduleJob("job name", {...})': {
|
|
381
|
+
"Reschedule jobs from object based to object based": function(test) {
|
|
382
|
+
test.expect(3);
|
|
383
|
+
|
|
384
|
+
var job = new schedule.scheduleJob({
|
|
385
|
+
second: null
|
|
386
|
+
}, function() {
|
|
387
|
+
test.ok(true);
|
|
388
|
+
});
|
|
389
|
+
|
|
390
|
+
setTimeout(function() {
|
|
391
|
+
schedule.rescheduleJob(job.name, {
|
|
392
|
+
minute: null
|
|
393
|
+
});
|
|
394
|
+
}, 3250);
|
|
395
|
+
|
|
396
|
+
setTimeout(function() {
|
|
397
|
+
job.cancel();
|
|
398
|
+
test.done();
|
|
399
|
+
}, 5000);
|
|
400
|
+
|
|
401
|
+
clock.tick(5000);
|
|
402
|
+
},
|
|
403
|
+
"Reschedule jobs from every minutes to every second": function(test) {
|
|
404
|
+
test.expect(3);
|
|
405
|
+
|
|
406
|
+
var timeout = 60 * 1000;
|
|
407
|
+
|
|
408
|
+
var job = new schedule.scheduleJob({
|
|
409
|
+
minute: null
|
|
410
|
+
}, function() {
|
|
411
|
+
test.ok(true);
|
|
412
|
+
});
|
|
413
|
+
|
|
414
|
+
setTimeout(function() {
|
|
415
|
+
schedule.rescheduleJob(job.name, {
|
|
416
|
+
second: null
|
|
417
|
+
});
|
|
418
|
+
}, timeout);
|
|
419
|
+
|
|
420
|
+
setTimeout(function() {
|
|
421
|
+
job.cancel();
|
|
422
|
+
test.done();
|
|
423
|
+
}, timeout + 2250);
|
|
424
|
+
|
|
425
|
+
clock.tick(timeout + 2250);
|
|
426
|
+
}
|
|
427
|
+
},
|
|
428
|
+
'.rescheduleJob("job name", Date)': {
|
|
429
|
+
"Reschedule jobs from Date to Date": function(test) {
|
|
430
|
+
test.expect(1);
|
|
431
|
+
|
|
432
|
+
var job = new schedule.scheduleJob(new Date(Date.now() + 3000), function() {
|
|
433
|
+
test.ok(true);
|
|
434
|
+
});
|
|
435
|
+
|
|
436
|
+
setTimeout(function() {
|
|
437
|
+
schedule.rescheduleJob(job.name, new Date(Date.now() + 5000));
|
|
438
|
+
}, 1000);
|
|
439
|
+
|
|
440
|
+
setTimeout(function() {
|
|
441
|
+
test.done();
|
|
442
|
+
}, 6150);
|
|
443
|
+
|
|
444
|
+
clock.tick(6150);
|
|
445
|
+
},
|
|
446
|
+
"Reschedule jobs that has been executed": function(test) {
|
|
447
|
+
test.expect(2);
|
|
448
|
+
|
|
449
|
+
var job = new schedule.scheduleJob(new Date(Date.now() + 1000), function() {
|
|
450
|
+
test.ok(true);
|
|
451
|
+
});
|
|
452
|
+
|
|
453
|
+
setTimeout(function() {
|
|
454
|
+
schedule.rescheduleJob(job.name, new Date(Date.now() + 2000));
|
|
455
|
+
}, 2000);
|
|
456
|
+
|
|
457
|
+
setTimeout(function() {
|
|
458
|
+
test.done();
|
|
459
|
+
}, 5150);
|
|
460
|
+
|
|
461
|
+
clock.tick(5150);
|
|
462
|
+
}
|
|
463
|
+
},
|
|
464
|
+
'.rescheduleJob("job name", RecurrenceRule)': {
|
|
465
|
+
"Reschedule jobs from RecurrenceRule to RecurrenceRule": function(test) {
|
|
466
|
+
test.expect(3);
|
|
467
|
+
|
|
468
|
+
var timeout = 60 * 1000;
|
|
469
|
+
|
|
470
|
+
var rule = new schedule.RecurrenceRule();
|
|
471
|
+
rule.second = null; // fire every second
|
|
472
|
+
|
|
473
|
+
var job = schedule.scheduleJob(rule, function() {
|
|
474
|
+
test.ok(true);
|
|
475
|
+
});
|
|
476
|
+
|
|
477
|
+
var newRule = new schedule.RecurrenceRule();
|
|
478
|
+
newRule.minute = null;
|
|
479
|
+
|
|
480
|
+
setTimeout(function() {
|
|
481
|
+
schedule.rescheduleJob(job.name, newRule);
|
|
482
|
+
}, 2250);
|
|
483
|
+
|
|
484
|
+
setTimeout(function() {
|
|
485
|
+
job.cancel();
|
|
486
|
+
test.done();
|
|
487
|
+
}, timeout + 2250);
|
|
488
|
+
|
|
489
|
+
clock.tick(timeout + 2250);
|
|
490
|
+
},
|
|
491
|
+
"Reschedule jobs from RecurrenceRule to Date": function(test) {
|
|
492
|
+
test.expect(3);
|
|
493
|
+
|
|
494
|
+
var rule = new schedule.RecurrenceRule();
|
|
495
|
+
rule.second = null; // fire every second
|
|
496
|
+
|
|
497
|
+
var job = schedule.scheduleJob(rule, function() {
|
|
498
|
+
test.ok(true);
|
|
499
|
+
});
|
|
500
|
+
|
|
501
|
+
setTimeout(function() {
|
|
502
|
+
schedule.rescheduleJob(job.name, new Date(Date.now() + 2000));
|
|
503
|
+
}, 2150);
|
|
504
|
+
|
|
505
|
+
setTimeout(function() {
|
|
506
|
+
test.done();
|
|
507
|
+
}, 4250);
|
|
508
|
+
|
|
509
|
+
clock.tick(4250);
|
|
510
|
+
},
|
|
511
|
+
"Reschedule jobs from RecurrenceRule to {...}": function(test) {
|
|
512
|
+
test.expect(3);
|
|
513
|
+
|
|
514
|
+
var timeout = 60 * 1000;
|
|
515
|
+
|
|
516
|
+
var rule = new schedule.RecurrenceRule();
|
|
517
|
+
rule.second = null; // fire every second
|
|
518
|
+
|
|
519
|
+
var job = schedule.scheduleJob(rule, function() {
|
|
520
|
+
test.ok(true);
|
|
521
|
+
});
|
|
522
|
+
|
|
523
|
+
setTimeout(function() {
|
|
524
|
+
schedule.rescheduleJob(job.name, {
|
|
525
|
+
minute: null
|
|
526
|
+
});
|
|
527
|
+
}, 2150);
|
|
528
|
+
|
|
529
|
+
setTimeout(function() {
|
|
530
|
+
job.cancel();
|
|
531
|
+
test.done();
|
|
532
|
+
}, timeout + 2150);
|
|
533
|
+
|
|
534
|
+
clock.tick(timeout + 2150);
|
|
535
|
+
},
|
|
536
|
+
"Reschedule jobs that is not available": function(test) {
|
|
537
|
+
test.expect(4);
|
|
538
|
+
|
|
539
|
+
var rule = new schedule.RecurrenceRule();
|
|
540
|
+
rule.second = null; // fire every second
|
|
541
|
+
|
|
542
|
+
var job = schedule.scheduleJob(rule, function() {
|
|
543
|
+
test.ok(true);
|
|
544
|
+
});
|
|
545
|
+
|
|
546
|
+
setTimeout(function() {
|
|
547
|
+
schedule.rescheduleJob("Blah", new Date(Date.now() + 2000));
|
|
548
|
+
}, 2150);
|
|
549
|
+
|
|
550
|
+
setTimeout(function() {
|
|
551
|
+
job.cancel();
|
|
552
|
+
test.done();
|
|
553
|
+
}, 4250);
|
|
554
|
+
|
|
555
|
+
clock.tick(4250);
|
|
556
|
+
}
|
|
557
|
+
},
|
|
558
|
+
".cancelJob(Job)": {
|
|
559
|
+
"Prevents all future invocations of Job passed in": function(test) {
|
|
560
|
+
test.expect(2);
|
|
561
|
+
|
|
562
|
+
var job = schedule.scheduleJob({
|
|
563
|
+
second: null
|
|
564
|
+
}, function() {
|
|
565
|
+
test.ok(true);
|
|
566
|
+
});
|
|
567
|
+
|
|
568
|
+
setTimeout(function() {
|
|
569
|
+
schedule.cancelJob(job);
|
|
570
|
+
}, 2250);
|
|
571
|
+
|
|
572
|
+
setTimeout(function() {
|
|
573
|
+
test.done();
|
|
574
|
+
}, 3250);
|
|
575
|
+
|
|
576
|
+
clock.tick(3250);
|
|
577
|
+
},
|
|
578
|
+
"Can cancel Jobs scheduled with Job#schedule": function(test) {
|
|
579
|
+
test.expect(2);
|
|
580
|
+
|
|
581
|
+
var job = new schedule.Job(function() {
|
|
582
|
+
test.ok(true);
|
|
583
|
+
});
|
|
584
|
+
|
|
585
|
+
job.schedule({
|
|
586
|
+
second: null
|
|
587
|
+
});
|
|
588
|
+
|
|
589
|
+
setTimeout(function() {
|
|
590
|
+
schedule.cancelJob(job);
|
|
591
|
+
}, 2250);
|
|
592
|
+
|
|
593
|
+
setTimeout(function() {
|
|
594
|
+
test.done();
|
|
595
|
+
}, 3250);
|
|
596
|
+
|
|
597
|
+
clock.tick(3250);
|
|
598
|
+
},
|
|
599
|
+
"Job emits 'canceled' event": function(test) {
|
|
600
|
+
test.expect(1);
|
|
601
|
+
|
|
602
|
+
var job = schedule.scheduleJob({
|
|
603
|
+
second: null
|
|
604
|
+
}, function() {});
|
|
605
|
+
|
|
606
|
+
job.on('canceled', function() {
|
|
607
|
+
test.ok(true);
|
|
608
|
+
});
|
|
609
|
+
|
|
610
|
+
setTimeout(function() {
|
|
611
|
+
schedule.cancelJob(job);
|
|
612
|
+
test.done();
|
|
613
|
+
}, 1250);
|
|
614
|
+
|
|
615
|
+
clock.tick(1250);
|
|
616
|
+
}
|
|
617
|
+
},
|
|
618
|
+
'.cancelJob("job name")': {
|
|
619
|
+
"Prevents all future invocations of Job identified by name": function(test) {
|
|
620
|
+
test.expect(2);
|
|
621
|
+
|
|
622
|
+
var job = schedule.scheduleJob({
|
|
623
|
+
second: null
|
|
624
|
+
}, function() {
|
|
625
|
+
test.ok(true);
|
|
626
|
+
});
|
|
627
|
+
|
|
628
|
+
setTimeout(function() {
|
|
629
|
+
schedule.cancelJob(job.name);
|
|
630
|
+
}, 2250);
|
|
631
|
+
|
|
632
|
+
setTimeout(function() {
|
|
633
|
+
test.done();
|
|
634
|
+
}, 3250);
|
|
635
|
+
|
|
636
|
+
clock.tick(3250);
|
|
637
|
+
},
|
|
638
|
+
/*
|
|
639
|
+
"Can cancel Jobs scheduled with Job#schedule": function(test) {
|
|
640
|
+
test.expect(2);
|
|
641
|
+
|
|
642
|
+
var job = new schedule.Job(function() {
|
|
643
|
+
test.ok(true);
|
|
644
|
+
});
|
|
645
|
+
|
|
646
|
+
job.schedule({
|
|
647
|
+
second: null
|
|
648
|
+
});
|
|
649
|
+
|
|
650
|
+
setTimeout(function() {
|
|
651
|
+
schedule.cancelJob(job.name);
|
|
652
|
+
}, 2250);
|
|
653
|
+
|
|
654
|
+
setTimeout(function() {
|
|
655
|
+
test.done();
|
|
656
|
+
}, 3250);
|
|
657
|
+
},*/
|
|
658
|
+
"Job emits 'canceled' event": function(test) {
|
|
659
|
+
test.expect(1);
|
|
660
|
+
|
|
661
|
+
var job = schedule.scheduleJob({
|
|
662
|
+
second: null
|
|
663
|
+
}, function() {});
|
|
664
|
+
|
|
665
|
+
job.on('canceled', function() {
|
|
666
|
+
test.ok(true);
|
|
667
|
+
});
|
|
668
|
+
|
|
669
|
+
setTimeout(function() {
|
|
670
|
+
schedule.cancelJob(job.name);
|
|
671
|
+
test.done();
|
|
672
|
+
}, 1250);
|
|
673
|
+
|
|
674
|
+
clock.tick(1250);
|
|
675
|
+
},
|
|
676
|
+
"Does nothing if no job found by that name": function(test) {
|
|
677
|
+
test.expect(3);
|
|
678
|
+
|
|
679
|
+
var job = schedule.scheduleJob({
|
|
680
|
+
second: null
|
|
681
|
+
}, function() {
|
|
682
|
+
test.ok(true);
|
|
683
|
+
});
|
|
684
|
+
|
|
685
|
+
setTimeout(function() {
|
|
686
|
+
// This cancel should not affect anything
|
|
687
|
+
schedule.cancelJob('blah');
|
|
688
|
+
}, 2250);
|
|
689
|
+
|
|
690
|
+
setTimeout(function() {
|
|
691
|
+
job.cancel(); // prevent tests from hanging
|
|
692
|
+
test.done();
|
|
693
|
+
}, 3250);
|
|
694
|
+
|
|
695
|
+
clock.tick(3250);
|
|
696
|
+
}
|
|
697
|
+
},
|
|
698
|
+
'.pendingInvocations()': {
|
|
699
|
+
"Retrieves pendingInvocations of the job": function(test) {
|
|
700
|
+
var job = schedule.scheduleJob(new Date(Date.now() + 1000), function() {});
|
|
701
|
+
|
|
702
|
+
test.ok(job instanceof schedule.Job);
|
|
703
|
+
test.ok(job.pendingInvocations()[0].job);
|
|
704
|
+
|
|
705
|
+
job.cancel();
|
|
706
|
+
test.done();
|
|
707
|
+
}
|
|
708
|
+
},
|
|
709
|
+
tearDown: function(cb) {
|
|
710
|
+
clock.restore();
|
|
711
|
+
cb();
|
|
712
|
+
}
|
|
713
|
+
};
|