| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244 |
- const { assert } = require('chai');
- const TimeMatcher = require('../src/time-matcher');
- const moment = require('moment-timezone');
-
- describe('TimeMatcher', () => {
- describe('wildcard', () => {
- it('should accept wildcard for second', () => {
- let matcher = new TimeMatcher('* * * * * *');
- assert.isTrue(matcher.match(new Date()));
- });
-
- it('should accept wildcard for minute', () => {
- let matcher = new TimeMatcher('0 * * * * *');
- assert.isTrue(matcher.match(new Date(2018, 0, 1, 10, 20, 0)));
- assert.isFalse(matcher.match(new Date(2018, 0, 1, 10, 20, 1)));
- });
-
- it('should accept wildcard for hour', () => {
- let matcher = new TimeMatcher('0 0 * * * *');
- assert.isTrue(matcher.match(new Date(2018, 0, 1, 10, 0, 0)));
- assert.isFalse(matcher.match(new Date(2018, 0, 1, 10, 1, 0)));
- });
-
- it('should accept wildcard for day', () => {
- let matcher = new TimeMatcher('0 0 0 * * *');
- assert.isTrue(matcher.match(new Date(2018, 0, 1, 0, 0, 0)));
- assert.isFalse(matcher.match(new Date(2018, 0, 1, 1, 0, 0)));
- });
-
- it('should accept wildcard for month', () => {
- let matcher = new TimeMatcher('0 0 0 1 * *');
- assert.isTrue(matcher.match(new Date(2018, 0, 1, 0, 0, 0)));
- assert.isFalse(matcher.match(new Date(2018, 0, 2, 0, 0, 0)));
- });
-
- it('should accept wildcard for week day', () => {
- let matcher = new TimeMatcher('0 0 0 1 4 *');
- assert.isTrue(matcher.match(new Date(2018, 3, 1, 0, 0, 0)));
- assert.isFalse(matcher.match(new Date(2018, 3, 2, 0, 0, 0)));
- });
- });
-
- describe('single value', () => {
- it('should accept single value for second', () => {
- let matcher = new TimeMatcher('5 * * * * *');
- assert.isTrue(matcher.match(new Date(2018, 0, 1, 0, 0, 5)));
- assert.isFalse(matcher.match(new Date(2018, 0, 1, 0, 0, 6)));
- });
-
- it('should accept single value for minute', () => {
- let matcher = new TimeMatcher('0 5 * * * *');
- assert.isTrue(matcher.match(new Date(2018, 0, 1, 0, 5, 0)));
- assert.isFalse(matcher.match(new Date(2018, 0, 1, 0, 6, 0)));
- });
-
- it('should accept single value for hour', () => {
- let matcher = new TimeMatcher('0 0 5 * * *');
- assert.isTrue(matcher.match(new Date(2018, 0, 1, 5, 0, 0)));
- assert.isFalse(matcher.match(new Date(2018, 0, 1, 6, 0, 0)));
- });
-
- it('should accept single value for day', () => {
- let matcher = new TimeMatcher('0 0 0 5 * *');
- assert.isTrue(matcher.match(new Date(2018, 0, 5, 0, 0, 0)));
- assert.isFalse(matcher.match(new Date(2018, 0, 6, 0, 0, 0)));
- });
-
- it('should accept single value for month', () => {
- let matcher = new TimeMatcher('0 0 0 1 5 *');
- assert.isTrue(matcher.match(new Date(2018, 4, 1, 0, 0, 0)));
- assert.isFalse(matcher.match(new Date(2018, 5, 1, 0, 0, 0)));
- });
-
- it('should accept single value for week day', () => {
- let matcher = new TimeMatcher('0 0 0 * * monday');
- assert.isTrue(matcher.match(new Date(2018, 4, 7, 0, 0, 0)));
- assert.isFalse(matcher.match(new Date(2018, 4, 8, 0, 0, 0)));
- });
- });
-
- describe('multiple values', () => {
- it('should accept multiple values for second', () => {
- let matcher = new TimeMatcher('5,6 * * * * *');
- assert.isTrue(matcher.match(new Date(2018, 0, 1, 0, 0, 5)));
- assert.isTrue(matcher.match(new Date(2018, 0, 1, 0, 0, 6)));
- assert.isFalse(matcher.match(new Date(2018, 0, 1, 0, 0, 7)));
- });
-
- it('should accept multiple values for minute', () => {
- let matcher = new TimeMatcher('0 5,6 * * * *');
- assert.isTrue(matcher.match(new Date(2018, 0, 1, 0, 5, 0)));
- assert.isTrue(matcher.match(new Date(2018, 0, 1, 0, 6, 0)));
- assert.isFalse(matcher.match(new Date(2018, 0, 1, 0, 7, 0)));
- });
-
- it('should accept multiple values for hour', () => {
- let matcher = new TimeMatcher('0 0 5,6 * * *');
- assert.isTrue(matcher.match(new Date(2018, 0, 1, 5, 0, 0)));
- assert.isTrue(matcher.match(new Date(2018, 0, 1, 6, 0, 0)));
- assert.isFalse(matcher.match(new Date(2018, 0, 1, 7, 0, 0)));
- });
-
- it('should accept multiple values for day', () => {
- let matcher = new TimeMatcher('0 0 0 5,6 * *');
- assert.isTrue(matcher.match(new Date(2018, 0, 5, 0, 0, 0)));
- assert.isTrue(matcher.match(new Date(2018, 0, 6, 0, 0, 0)));
- assert.isFalse(matcher.match(new Date(2018, 0, 7, 0, 0, 0)));
- });
-
- it('should accept multiple values for month', () => {
- let matcher = new TimeMatcher('0 0 0 1 may,june *');
- assert.isTrue(matcher.match(new Date(2018, 4, 1, 0, 0, 0)));
- assert.isTrue(matcher.match(new Date(2018, 5, 1, 0, 0, 0)));
- assert.isFalse(matcher.match(new Date(2018, 6, 1, 0, 0, 0)));
- });
-
- it('should accept multiple values for week day', () => {
- let matcher = new TimeMatcher('0 0 0 * * monday,tue');
- assert.isTrue(matcher.match(new Date(2018, 4, 7, 0, 0, 0)));
- assert.isTrue(matcher.match(new Date(2018, 4, 8, 0, 0, 0)));
- assert.isFalse(matcher.match(new Date(2018, 4, 9, 0, 0, 0)));
- });
- });
-
- describe('range', () => {
- it('should accept range for second', () => {
- let matcher = new TimeMatcher('5-7 * * * * *');
- assert.isTrue(matcher.match(new Date(2018, 0, 1, 0, 0, 5)));
- assert.isTrue(matcher.match(new Date(2018, 0, 1, 0, 0, 6)));
- assert.isTrue(matcher.match(new Date(2018, 0, 1, 0, 0, 7)));
- assert.isFalse(matcher.match(new Date(2018, 0, 1, 0, 0, 8)));
- });
-
- it('should accept range for minute', () => {
- let matcher = new TimeMatcher('0 5-7 * * * *');
- assert.isTrue(matcher.match(new Date(2018, 0, 1, 0, 5, 0)));
- assert.isTrue(matcher.match(new Date(2018, 0, 1, 0, 6, 0)));
- assert.isTrue(matcher.match(new Date(2018, 0, 1, 0, 7, 0)));
- assert.isFalse(matcher.match(new Date(2018, 0, 1, 0, 8, 0)));
- });
-
- it('should accept range for hour', () => {
- let matcher = new TimeMatcher('0 0 5-7 * * *');
- assert.isTrue(matcher.match(new Date(2018, 0, 1, 5, 0, 0)));
- assert.isTrue(matcher.match(new Date(2018, 0, 1, 6, 0, 0)));
- assert.isTrue(matcher.match(new Date(2018, 0, 1, 7, 0, 0)));
- assert.isFalse(matcher.match(new Date(2018, 0, 1, 8, 0, 0)));
- });
-
- it('should accept range for day', () => {
- let matcher = new TimeMatcher('0 0 0 5-7 * *');
- assert.isTrue(matcher.match(new Date(2018, 0, 5, 0, 0, 0)));
- assert.isTrue(matcher.match(new Date(2018, 0, 6, 0, 0, 0)));
- assert.isTrue(matcher.match(new Date(2018, 0, 7, 0, 0, 0)));
- assert.isFalse(matcher.match(new Date(2018, 0, 8, 0, 0, 0)));
- });
-
- it('should accept range for month', () => {
- let matcher = new TimeMatcher('0 0 0 1 may-july *');
- assert.isTrue(matcher.match(new Date(2018, 4, 1, 0, 0, 0)));
- assert.isTrue(matcher.match(new Date(2018, 5, 1, 0, 0, 0)));
- assert.isTrue(matcher.match(new Date(2018, 6, 1, 0, 0, 0)));
- assert.isFalse(matcher.match(new Date(2018, 7, 1, 0, 0, 0)));
- });
-
- it('should accept range for week day', () => {
- let matcher = new TimeMatcher('0 0 0 * * monday-wed');
- assert.isTrue(matcher.match(new Date(2018, 4, 7, 0, 0, 0)));
- assert.isTrue(matcher.match(new Date(2018, 4, 8, 0, 0, 0)));
- assert.isTrue(matcher.match(new Date(2018, 4, 9, 0, 0, 0)));
- assert.isFalse(matcher.match(new Date(2018, 4, 10, 0, 0, 0)));
- });
- });
-
- describe('step values', () => {
- it('should accept step values for second', () => {
- let matcher = new TimeMatcher('*/2 * * * * *');
- assert.isTrue(matcher.match(new Date(2018, 0, 1, 0, 0, 2)));
- assert.isTrue(matcher.match(new Date(2018, 0, 1, 0, 0, 6)));
- assert.isFalse(matcher.match(new Date(2018, 0, 1, 0, 0, 7)));
- });
-
- it('should accept step values for minute', () => {
- let matcher = new TimeMatcher('0 */2 * * * *');
- assert.isTrue(matcher.match(new Date(2018, 0, 1, 0, 2, 0)));
- assert.isTrue(matcher.match(new Date(2018, 0, 1, 0, 6, 0)));
- assert.isFalse(matcher.match(new Date(2018, 0, 1, 0, 7, 0)));
- });
-
- it('should accept step values for hour', () => {
- let matcher = new TimeMatcher('0 0 */2 * * *');
- assert.isTrue(matcher.match(new Date(2018, 0, 1, 2, 0, 0)));
- assert.isTrue(matcher.match(new Date(2018, 0, 1, 6, 0, 0)));
- assert.isFalse(matcher.match(new Date(2018, 0, 1, 7, 0, 0)));
- });
-
- it('should accept step values for day', () => {
- let matcher = new TimeMatcher('0 0 0 */2 * *');
- assert.isTrue(matcher.match(new Date(2018, 0, 2, 0, 0, 0)));
- assert.isTrue(matcher.match(new Date(2018, 0, 6, 0, 0, 0)));
- assert.isFalse(matcher.match(new Date(2018, 0, 7, 0, 0, 0)));
- });
-
- it('should accept step values for month', () => {
- let matcher = new TimeMatcher('0 0 0 1 */2 *');
- assert.isTrue(matcher.match(new Date(2018, 1, 1, 0, 0, 0)));
- assert.isTrue(matcher.match(new Date(2018, 5, 1, 0, 0, 0)));
- assert.isFalse(matcher.match(new Date(2018, 6, 1, 0, 0, 0)));
- });
-
- it('should accept step values for week day', () => {
- let matcher = new TimeMatcher('0 0 0 * * */2');
- assert.isTrue(matcher.match(new Date(2018, 4, 6, 0, 0, 0)));
- assert.isTrue(matcher.match(new Date(2018, 4, 8, 0, 0, 0)));
- assert.isFalse(matcher.match(new Date(2018, 4, 9, 0, 0, 0)));
- });
- });
-
- describe('timezone', ()=>{
- it('should match with timezone America/Sao_Paulo', () => {
- let matcher = new TimeMatcher('0 0 0 * * *', 'America/Sao_Paulo');
- let utcTime = new Date('Thu Oct 11 2018 03:00:00Z');
- assert.isTrue(matcher.match(utcTime));
- });
-
- it('should match with timezone Europe/Rome', () => {
- let matcher = new TimeMatcher('0 0 0 * * *', 'Europe/Rome');
- let utcTime = new Date('Thu Oct 11 2018 22:00:00Z');
- assert.isTrue(matcher.match(utcTime));
- });
-
- it('should match with all available timezone of moment-timezone', () => {
- const allTimeZone = moment.tz.names();
- for (let zone in allTimeZone) {
- const tmp = moment();
- const expected = moment.tz(tmp,allTimeZone[zone]);
- const pattern = expected.second() + ' ' + expected.minute() + ' ' + expected.hour() + ' ' + expected.date() + ' ' + (expected.month()+1) + ' ' + expected.day();
- const matcher = new TimeMatcher(pattern, allTimeZone[zone]);
- const utcTime = new Date(tmp.year(), tmp.month(), tmp.date(), tmp.hour(), tmp.minute(), tmp.second(), tmp.millisecond());
- assert.isTrue(matcher.match(utcTime));
- }
- });
- });
- });
|