You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
374 lines
12 KiB
374 lines
12 KiB
'use strict';
|
|
|
|
import { assert } from 'chai';
|
|
import _ from 'lodash';
|
|
import {
|
|
getHumanTimesetsNormalized,
|
|
humanTimesetToKamailio,
|
|
kamailioTimesetToHuman,
|
|
} from '../../src/helpers/kamailio-timesets-converter'
|
|
|
|
function deepEqualCheckAndInputDataMutationCheck(data, expectedResult, actionFn) {
|
|
const clonnedData = _.cloneDeep(data)
|
|
assert.deepEqual(actionFn(clonnedData), expectedResult)
|
|
assert.deepEqual(clonnedData, data, 'Original data were mutated')
|
|
}
|
|
|
|
describe('function getHumanTimesetsNormalized', function() {
|
|
|
|
it('case: resort', function(){
|
|
|
|
const options = [
|
|
{ weekday: 3, from: '9:00', to: '10:00' },
|
|
{ weekday: 2, from: '11:25', to: '15:00' },
|
|
{ weekday: 2, from: '9:12', to: '9:22' },
|
|
{ weekday: 2, from: '9:00', to: '9:10' }
|
|
];
|
|
const convertedData = [
|
|
{ weekday: 2, from: '9:00', to: '9:10' },
|
|
{ weekday: 2, from: '9:12', to: '9:22' },
|
|
{ weekday: 2, from: '11:25', to: '15:00' },
|
|
{ weekday: 3, from: '9:00', to: '10:00' }
|
|
]
|
|
deepEqualCheckAndInputDataMutationCheck(options, convertedData, data => getHumanTimesetsNormalized(data))
|
|
});
|
|
|
|
it('case: combine chunks and remove duplicates', function(){
|
|
|
|
const options = [
|
|
{ weekday: 2, from: '9:00', to: '10:00' },
|
|
{ weekday: 2, from: '10:00', to: '12:00' },
|
|
{ weekday: 3, from: '11:25', to: '15:00' },
|
|
{ weekday: 3, from: '11:25', to: '15:00' },
|
|
{ weekday: 3, from: '9:00', to: '9:30' },
|
|
{ weekday: 3, from: '9:10', to: '11:30' },
|
|
{ weekday: 3, from: '10:00', to: '11:30' },
|
|
{ weekday: 3, from: '8:00', to: '8:59' }
|
|
];
|
|
const convertedData = [
|
|
{ weekday: 2, from: '9:00', to: '12:00' },
|
|
{ weekday: 3, from: '8:00', to: '8:59' },
|
|
{ weekday: 3, from: '9:00', to: '15:00' }
|
|
]
|
|
deepEqualCheckAndInputDataMutationCheck(options, convertedData, data => getHumanTimesetsNormalized(data))
|
|
});
|
|
})
|
|
|
|
describe('Human readable timesets to Kamailio format converter helpers', function() {
|
|
|
|
it('case: an empty set', function(){
|
|
|
|
const options = [];
|
|
const convertedData = []
|
|
deepEqualCheckAndInputDataMutationCheck(options, convertedData, data => humanTimesetToKamailio(data))
|
|
|
|
const options2 = undefined;
|
|
const convertedData2 = []
|
|
deepEqualCheckAndInputDataMutationCheck(options2, convertedData2, data => humanTimesetToKamailio(data))
|
|
});
|
|
|
|
it('case: required field', function(){
|
|
|
|
let options = [{}];
|
|
assert.throws(() => humanTimesetToKamailio(options))
|
|
|
|
options = [{ weekday: 1 }];
|
|
assert.throws(() => humanTimesetToKamailio(options))
|
|
|
|
options = [{ weekday: 1, from: '1:00' }];
|
|
assert.throws(() => humanTimesetToKamailio(options))
|
|
|
|
options = [{ weekday: 1, to: '1:00' }];
|
|
assert.throws(() => humanTimesetToKamailio(options))
|
|
|
|
options = [{ weekday: 1, from: '1:00', to: '2:00' }];
|
|
assert.doesNotThrow(() => humanTimesetToKamailio(options))
|
|
});
|
|
|
|
it('case: Mon 6:00-6:05', function(){
|
|
|
|
let options = [
|
|
{ weekday: 2, from: '6:00', to: '6:05' }
|
|
];
|
|
let convertedData = [
|
|
{ wday: 2, hour: '6', minute: '0-4' }
|
|
];
|
|
|
|
deepEqualCheckAndInputDataMutationCheck(options, convertedData, data => humanTimesetToKamailio(data))
|
|
});
|
|
|
|
it('case: Mon 14:05-15:00', function(){
|
|
|
|
let options = [
|
|
{ weekday: 2, from: '14:05', to: '15:00' }
|
|
];
|
|
let convertedData = [
|
|
{ wday: 2, hour: '14', minute: '5-59' }
|
|
];
|
|
|
|
deepEqualCheckAndInputDataMutationCheck(options, convertedData, data => humanTimesetToKamailio(data))
|
|
});
|
|
|
|
it('case: Mon 6:00-15:00', function(){
|
|
|
|
let options = [
|
|
{ weekday: 2, from: '6:00', to: '15:00' }
|
|
];
|
|
let convertedData = [
|
|
{ wday: 2, hour: '6-14' }
|
|
];
|
|
|
|
deepEqualCheckAndInputDataMutationCheck(options, convertedData, data => humanTimesetToKamailio(data))
|
|
});
|
|
|
|
it('case: Fri 3:02-21:41', function(){
|
|
|
|
let options = [
|
|
{ weekday: 6, from: '3:02', to: '21:41' }
|
|
];
|
|
let convertedData = [
|
|
{ wday: 6, hour: '3', minute: '2-59' },
|
|
{ wday: 6, hour: '4-20' },
|
|
{ wday: 6, hour: '21', minute: '0-40' }
|
|
];
|
|
|
|
deepEqualCheckAndInputDataMutationCheck(options, convertedData, data => humanTimesetToKamailio(data))
|
|
});
|
|
|
|
it('case: Mon 9:01-10:00, Mon 14:05-15:00, Mon 11:00-11:29', function(){
|
|
|
|
let options = [
|
|
{ weekday: 2, from: '9:01', to: '10:00' },
|
|
{ weekday: 2, from: '14:05', to: '15:00' },
|
|
{ weekday: 2, from: '11:00', to: '11:29' }
|
|
];
|
|
let convertedData = [
|
|
{ wday: 2, hour: '9', minute: '1-59' },
|
|
{ wday: 2, hour: '11', minute: '0-28' },
|
|
{ wday: 2, hour: '14', minute: '5-59' }
|
|
];
|
|
|
|
deepEqualCheckAndInputDataMutationCheck(options, convertedData, data => humanTimesetToKamailio(data))
|
|
});
|
|
|
|
it('case: Mon 0:00-23:59, Tue 0:00-23:58', function(){
|
|
|
|
//NOTE: 23:59 should be treated as 24:00 for TO field in interval
|
|
let options = [
|
|
{ weekday: 2, from: '0:00', to: '23:59' },
|
|
{ weekday: 3, from: '0:00', to: '23:58' }
|
|
];
|
|
let convertedData = [
|
|
{ wday: 2, hour: '0-23' },
|
|
{ wday: 3, hour: '0-22' },
|
|
{ wday: 3, hour: '23', minute: '0-57' }
|
|
];
|
|
|
|
deepEqualCheckAndInputDataMutationCheck(options, convertedData, data => humanTimesetToKamailio(data))
|
|
});
|
|
|
|
it('case: automatic combining time intervals', function(){
|
|
|
|
let options = [
|
|
{ weekday: 3, from: '6:22', to: '7:44' },
|
|
{ weekday: 3, from: '5:10', to: '8:00' },
|
|
{ weekday: 3, from: '4:00', to: '7:00' },
|
|
{ weekday: 3, from: '8:30', to: '11:00' },
|
|
{ weekday: 3, from: '8:00', to: '9:30' },
|
|
|
|
{ weekday: 2, from: '2:00', to: '20:00' },
|
|
];
|
|
let convertedData = [
|
|
{ wday: 2, hour: '2-19' },
|
|
{ wday: 3, hour: '4-10' },
|
|
];
|
|
|
|
deepEqualCheckAndInputDataMutationCheck(options, convertedData, data => humanTimesetToKamailio(data))
|
|
});
|
|
|
|
it('case: wday range', function(){
|
|
|
|
let options = [
|
|
{ weekday: 6, from: '8:00', to: '17:00' },
|
|
{ weekday: 7, from: '8:00', to: '17:00' },
|
|
|
|
{ weekday: 1, from: '8:00', to: '17:00' },
|
|
|
|
{ weekday: 2, from: '8:00', to: '17:30' },
|
|
{ weekday: 3, from: '8:00', to: '17:30' },
|
|
{ weekday: 4, from: '8:00', to: '17:30' }
|
|
];
|
|
let convertedData = [
|
|
{ wday: '1-4', hour: '8-16' },
|
|
{ wday: '2-4', hour: '17', minute: '0-29' },
|
|
{ wday: '6-7', hour: '8-16' }
|
|
];
|
|
|
|
deepEqualCheckAndInputDataMutationCheck(options, convertedData, data => humanTimesetToKamailio(data))
|
|
});
|
|
|
|
});
|
|
|
|
describe('Kamailio format to Human readable timesets converter helpers', function() {
|
|
|
|
it('case: an empty set', function(){
|
|
|
|
const options = [];
|
|
const convertedData = []
|
|
deepEqualCheckAndInputDataMutationCheck(options, convertedData, data => kamailioTimesetToHuman(data))
|
|
|
|
const options2 = undefined;
|
|
const convertedData2 = []
|
|
deepEqualCheckAndInputDataMutationCheck(options2, convertedData2, data => kamailioTimesetToHuman(data))
|
|
});
|
|
|
|
it('case: required field', function(){
|
|
|
|
const options = [{}];
|
|
assert.throws(() => kamailioTimesetToHuman(options))
|
|
|
|
const options2 = [{ wday: 1 }];
|
|
assert.doesNotThrow(() => kamailioTimesetToHuman(options2))
|
|
});
|
|
|
|
it('case: not supported fields', function(){
|
|
|
|
//There is not exception if we have empty not supported fields
|
|
let options = [
|
|
{ wday: 1, hour: '1', minute: '1',
|
|
second: '', month: '', year: null, week: '', yday: '', mday: '' }
|
|
];
|
|
|
|
assert.doesNotThrow(() => kamailioTimesetToHuman(options))
|
|
|
|
//There should be an exception if we have a not empty not supported field
|
|
let options2 = [
|
|
{ weekday: 1, from: '1:00', to: '2:00',
|
|
second: '1', month: '1'}
|
|
];
|
|
|
|
assert.throws(() => kamailioTimesetToHuman(options2))
|
|
});
|
|
|
|
it('case: Mon 6:00-6:05', function(){
|
|
|
|
let options = [
|
|
{ wday: 2, hour: '6', minute: '0-4' }
|
|
];
|
|
let convertedData = [
|
|
{ weekday: 2, from: '6:00', to: '6:05' }
|
|
];
|
|
|
|
deepEqualCheckAndInputDataMutationCheck(options, convertedData, data => kamailioTimesetToHuman(data))
|
|
});
|
|
|
|
it('case: Mon 14:05-15:00', function(){
|
|
|
|
let options = [
|
|
{ wday: 2, hour: '14', minute: '5-59' }
|
|
];
|
|
let convertedData = [
|
|
{ weekday: 2, from: '14:05', to: '15:00' }
|
|
];
|
|
|
|
deepEqualCheckAndInputDataMutationCheck(options, convertedData, data => kamailioTimesetToHuman(data))
|
|
});
|
|
|
|
it('case: Mon 6:00-15:00', function(){
|
|
let options = [
|
|
{ wday: 2, hour: '6-14' }
|
|
];
|
|
let convertedData = [
|
|
{ weekday: 2, from: '6:00', to: '15:00' }
|
|
];
|
|
|
|
deepEqualCheckAndInputDataMutationCheck(options, convertedData, data => kamailioTimesetToHuman(data))
|
|
});
|
|
|
|
it('case: Fri 3:02-21:41', function(){
|
|
|
|
let options = [
|
|
{ wday: 6, hour: '3', minute: '2-59' },
|
|
{ wday: 6, hour: '4-20' },
|
|
{ wday: 6, hour: '21', minute: '0-40' }
|
|
];
|
|
let convertedData = [
|
|
{ weekday: 6, from: '3:02', to: '21:41' }
|
|
];
|
|
|
|
deepEqualCheckAndInputDataMutationCheck(options, convertedData, data => kamailioTimesetToHuman(data))
|
|
});
|
|
|
|
it('case: Mon Mon 11:00-11:29, 9:01-10:00, Mon 14:05-15:00', function(){
|
|
|
|
let options = [
|
|
{ wday: 2, hour: '11', minute: '0-28' },
|
|
{ wday: 2, hour: '9', minute: '1-59' },
|
|
{ wday: 2, hour: '14', minute: '5-59' }
|
|
];
|
|
let convertedData = [
|
|
{ weekday: 2, from: '9:01', to: '10:00' },
|
|
{ weekday: 2, from: '11:00', to: '11:29' },
|
|
{ weekday: 2, from: '14:05', to: '15:00' }
|
|
];
|
|
|
|
deepEqualCheckAndInputDataMutationCheck(options, convertedData, data => kamailioTimesetToHuman(data))
|
|
});
|
|
|
|
it('case: Mon 0:00-23:59, Tue 0:00-23:58', function(){
|
|
|
|
//NOTE: 23:59 should be treated as 24:00 for TO field in interval
|
|
let options = [
|
|
{ wday: 2, hour: '0-23' },
|
|
|
|
{ wday: 3, hour: '0-22' },
|
|
{ wday: 3, hour: '23', minute: '0-57' }
|
|
];
|
|
let convertedData = [
|
|
{ weekday: 2, from: '0:00', to: '23:59' },
|
|
{ weekday: 3, from: '0:00', to: '23:58' }
|
|
];
|
|
|
|
deepEqualCheckAndInputDataMutationCheck(options, convertedData, data => kamailioTimesetToHuman(data))
|
|
});
|
|
|
|
it('case: automatic combining time intervals', function(){
|
|
|
|
let options = [
|
|
{ wday: 7, hour: '9-13' },
|
|
|
|
{ wday: 2, hour: '10-13' },
|
|
{ wday: 2, hour: '9', minute: '0-29' },
|
|
{ wday: 2, hour: '9', minute: '30-59' },
|
|
{ wday: 2, hour: '11-12', minute: '5-20' }
|
|
];
|
|
let convertedData = [
|
|
{ weekday: 2, from: '9:00', to: '14:00' },
|
|
{ weekday: 7, from: '9:00', to: '14:00' }
|
|
];
|
|
|
|
deepEqualCheckAndInputDataMutationCheck(options, convertedData, data => kamailioTimesetToHuman(data))
|
|
});
|
|
|
|
it('case: wday range', function(){
|
|
|
|
let options = [
|
|
{ wday: '1-4', hour: '8-16' },
|
|
{ wday: '2-4', hour: '17', minute: '0-29' },
|
|
{ wday: '6-7', hour: '8-16' }
|
|
];
|
|
let convertedData = [
|
|
{ weekday: 1, from: '8:00', to: '17:00' },
|
|
|
|
{ weekday: 2, from: '8:00', to: '17:30' },
|
|
{ weekday: 3, from: '8:00', to: '17:30' },
|
|
{ weekday: 4, from: '8:00', to: '17:30' },
|
|
|
|
{ weekday: 6, from: '8:00', to: '17:00' },
|
|
{ weekday: 7, from: '8:00', to: '17:00' }
|
|
];
|
|
|
|
deepEqualCheckAndInputDataMutationCheck(options, convertedData, data => kamailioTimesetToHuman(data))
|
|
});
|
|
})
|