123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412 |
- describe('timeValidator', () => {
- var id = 'testContainer';
- beforeEach(function() {
- this.$container = $(`<div id="${id}"></div>`).appendTo('body');
- });
- afterEach(function() {
- if (this.$container) {
- destroy();
- this.$container.remove();
- }
- });
- var arrayOfObjects = function() {
- return [
- {time: '4:10:05 am', name: 'Ted', lastName: 'Right'},
- {time: '17:15:25', name: 'Frank', lastName: 'Honest'},
- {time: '14:65:45 am', name: 'Joan', lastName: 'Well'},
- {time: '33:25:05', name: 'Sid', lastName: 'Strong'}
- ];
- };
- it('should validate an empty string (default behavior)', (done) => {
- var onAfterValidate = jasmine.createSpy('onAfterValidate');
- handsontable({
- data: arrayOfObjects(),
- columns: [
- {data: 'time', type: 'time'},
- {data: 'name'},
- {data: 'lastName'}
- ],
- afterValidate: onAfterValidate
- });
- setDataAtCell(0, 0, '');
- setTimeout(() => {
- expect(onAfterValidate).toHaveBeenCalledWith(true, '', 0, 'time', undefined, undefined);
- done();
- }, 100);
- });
- it('should not positively validate a non-date format', (done) => {
- var onAfterValidate = jasmine.createSpy('onAfterValidate');
- handsontable({
- data: arrayOfObjects(),
- columns: [
- {data: 'time', type: 'time'},
- {data: 'name'},
- {data: 'lastName'}
- ],
- afterValidate: onAfterValidate
- });
- setDataAtCell(0, 0, 'nd');
- setTimeout(() => {
- expect(onAfterValidate).toHaveBeenCalledWith(false, 'nd', 0, 'time', undefined, undefined);
- done();
- }, 100);
- });
- it('should not positively validate a incorrect time string', (done) => {
- var onAfterValidate = jasmine.createSpy('onAfterValidate');
- handsontable({
- data: arrayOfObjects(),
- columns: [
- {data: 'time', type: 'time'},
- {data: 'name'},
- {data: 'lastName'}
- ],
- afterValidate: onAfterValidate
- });
- setDataAtCell(0, 0, '30:10:25');
- setTimeout(() => {
- expect(onAfterValidate).toHaveBeenCalledWith(false, '30:10:25', 0, 'time', undefined, undefined);
- done();
- }, 100);
- });
- it('should not positively validate a time string in not default format', (done) => {
- var onAfterValidate = jasmine.createSpy('onAfterValidate');
- handsontable({
- data: arrayOfObjects(),
- columns: [
- {data: 'time', type: 'time'},
- {data: 'name'},
- {data: 'lastName'}
- ],
- afterValidate: onAfterValidate
- });
- setDataAtCell(1, 0, '20:20:01');
- setTimeout(() => {
- expect(onAfterValidate).toHaveBeenCalledWith(false, '20:20:01', 1, 'time', undefined, undefined);
- done();
- }, 100);
- });
- it('should not positively validate a time string in wrong format (if custom format is provided)', (done) => {
- var onAfterValidate = jasmine.createSpy('onAfterValidate');
- handsontable({
- data: arrayOfObjects(),
- columns: [
- {data: 'time', type: 'time', timeFormat: 'HH:mm:ss'},
- {data: 'name'},
- {data: 'lastName'}
- ],
- afterValidate: onAfterValidate
- });
- setDataAtCell(1, 0, '5:10:15 am');
- setTimeout(() => {
- expect(onAfterValidate).toHaveBeenCalledWith(false, '5:10:15 am', 1, 'time', undefined, undefined);
- done();
- }, 100);
- });
- it('should positively validate a date string in correct format (if custom format is provided)', (done) => {
- var onAfterValidate = jasmine.createSpy('onAfterValidate');
- handsontable({
- data: arrayOfObjects(),
- columns: [
- {data: 'time', type: 'time', timeFormat: 'HH:mm:ss'},
- {data: 'name'},
- {data: 'lastName'}
- ],
- afterValidate: onAfterValidate
- });
- setDataAtCell(1, 0, '16:32:03');
- setTimeout(() => {
- expect(onAfterValidate).toHaveBeenCalledWith(true, '16:32:03', 1, 'time', undefined, undefined);
- done();
- }, 100);
- });
- describe('allowEmpty', () => {
- it('should not validate an empty string when allowEmpty is set as `false`', (done) => {
- var onAfterValidate = jasmine.createSpy('onAfterValidate');
- handsontable({
- data: arrayOfObjects(),
- columns: [
- {data: 'time', type: 'time', dateFormat: 'HH:mm', allowEmpty: false},
- {data: 'name'},
- {data: 'lastName'}
- ],
- afterValidate: onAfterValidate
- });
- setDataAtCell(1, 0, '');
- setTimeout(() => {
- expect(onAfterValidate).toHaveBeenCalledWith(false, '', 1, 'time', undefined, undefined);
- done();
- }, 100);
- });
- it('should not validate `null` when allowEmpty is set as `false`', (done) => {
- var onAfterValidate = jasmine.createSpy('onAfterValidate');
- handsontable({
- data: arrayOfObjects(),
- columns: [
- {data: 'time', type: 'time', dateFormat: 'HH:mm', allowEmpty: false},
- {data: 'name'},
- {data: 'lastName'}
- ],
- afterValidate: onAfterValidate
- });
- setDataAtCell(1, 0, null);
- setTimeout(() => {
- expect(onAfterValidate).toHaveBeenCalledWith(false, null, 1, 'time', undefined, undefined);
- done();
- }, 100);
- });
- it('should not validate `undefined` when allowEmpty is set as `false`', (done) => {
- var onAfterValidate = jasmine.createSpy('onAfterValidate');
- handsontable({
- data: arrayOfObjects(),
- columns: [
- {data: 'time', type: 'time', dateFormat: 'HH:mm', allowEmpty: false},
- {data: 'name'},
- {data: 'lastName'}
- ],
- afterValidate: onAfterValidate
- });
- setDataAtCell(1, 0, void 0);
- setTimeout(() => {
- expect(onAfterValidate).toHaveBeenCalledWith(false, void 0, 1, 'time', undefined, undefined);
- done();
- }, 100);
- });
- });
- describe('correctFormat', () => {
- it('should not make any changes to entered string if correctFormat is not set', (done) => {
- var onAfterValidate = jasmine.createSpy('onAfterValidate');
- handsontable({
- data: arrayOfObjects(),
- columns: [
- {data: 'time', type: 'time', timeFormat: 'h:mm:ss a'},
- {data: 'name'},
- {data: 'lastName'}
- ],
- afterValidate: onAfterValidate
- });
- setDataAtCell(1, 0, '13:00:00');
- setTimeout(() => {
- expect(onAfterValidate).toHaveBeenCalledWith(false, '13:00:00', 1, 'time', undefined, undefined);
- done();
- }, 100);
- });
- it('should not make any changes to entered string if correctFormat is set to false', (done) => {
- var onAfterValidate = jasmine.createSpy('onAfterValidate');
- handsontable({
- data: arrayOfObjects(),
- columns: [
- {data: 'time', type: 'time', timeFormat: 'h:mm:ss a', correctFormat: false},
- {data: 'name'},
- {data: 'lastName'}
- ],
- afterValidate: onAfterValidate
- });
- setDataAtCell(1, 0, '13:00:00');
- setTimeout(() => {
- expect(onAfterValidate).toHaveBeenCalledWith(false, '13:00:00', 1, 'time', undefined, undefined);
- done();
- }, 100);
- });
- it('should rewrite the string to the correct format if a time-string in different format is provided', (done) => {
- var onAfterValidate = jasmine.createSpy('onAfterValidate');
- handsontable({
- data: arrayOfObjects(),
- columns: [
- {data: 'time', type: 'time', timeFormat: 'h:mm:ss a', correctFormat: true},
- {data: 'lastName'}
- ],
- afterValidate: onAfterValidate
- });
- setDataAtCell(1, 0, '16:35:01');
- setTimeout(() => {
- expect(onAfterValidate).toHaveBeenCalledWith(true, '16:35:01', 1, 'time', undefined, undefined);
- }, 100);
- setTimeout(() => {
- expect(getDataAtCell(1, 0)).toEqual('4:35:01 pm');
- done();
- }, 130);
- });
- it('should rewrite the string to the correct format if a time in micro-timestamp format is provided', (done) => {
- var onAfterValidate = jasmine.createSpy('onAfterValidate');
- handsontable({
- data: arrayOfObjects(),
- columns: [
- {data: 'time', type: 'time', timeFormat: 'HH:mm:ss', correctFormat: true},
- {data: 'lastName'}
- ],
- afterValidate: onAfterValidate
- });
- var currentDateTime = new Date();
- setDataAtCell(1, 0, currentDateTime.getTime()); // timestamp in milliseconds
- setTimeout(() => {
- expect(onAfterValidate).toHaveBeenCalledWith(true, currentDateTime.getTime(), 1, 'time', undefined, undefined);
- }, 100);
- setTimeout(() => {
- var addLeadingZero = function(number) {
- return number < 10 ? `0${number}` : number;
- };
- expect(getDataAtCell(1, 0)).toEqual(`${addLeadingZero(currentDateTime.getHours())}:${addLeadingZero(currentDateTime.getMinutes())}:${
- addLeadingZero(currentDateTime.getSeconds())}`);
- done();
- }, 130);
- });
- it('should rewrite the string to the correct format if a time in ISO8601 format is provided', (done) => {
- var onAfterValidate = jasmine.createSpy('onAfterValidate');
- handsontable({
- data: arrayOfObjects(),
- columns: [
- {data: 'time', type: 'time', timeFormat: 'HH:mm:ss', correctFormat: true},
- {data: 'lastName'}
- ],
- afterValidate: onAfterValidate
- });
- var currentDateTime = new Date();
- setDataAtCell(1, 0, currentDateTime.toISOString()); // ISO-formatted datetime, sth like '2016-02-19T12:40:04.983Z'
- setTimeout(() => {
- expect(onAfterValidate).toHaveBeenCalledWith(true, currentDateTime.toISOString(), 1, 'time', undefined, undefined);
- }, 100);
- setTimeout(() => {
- var addLeadingZero = function(number) {
- return number < 10 ? `0${number}` : number;
- };
- expect(getDataAtCell(1, 0)).toEqual(`${addLeadingZero(currentDateTime.getHours())}:${addLeadingZero(currentDateTime.getMinutes())}:${
- addLeadingZero(currentDateTime.getSeconds())}`);
- done();
- }, 130);
- });
- it('should rewrite one and two-digit number to the correct format at hours', (done) => {
- var onAfterValidate = jasmine.createSpy('onAfterValidate');
- handsontable({
- data: arrayOfObjects(),
- columns: [
- {data: 'time', type: 'time', timeFormat: 'hh:mm:ss a', correctFormat: true},
- {data: 'lastName'}
- ],
- afterValidate: onAfterValidate
- });
- setDataAtCell(1, 0, '19');
- setTimeout(() => {
- expect(onAfterValidate).toHaveBeenCalledWith(true, '19', 1, 'time', undefined, undefined);
- }, 100);
- setTimeout(() => {
- expect(getDataAtCell(1, 0)).toEqual('07:00:00 pm');
- done();
- }, 130);
- });
- it('should rewrite one and two-digit number to the correct format at minutes', (done) => {
- var onAfterValidate = jasmine.createSpy('onAfterValidate');
- handsontable({
- data: arrayOfObjects(),
- columns: [
- {data: 'time', type: 'time', timeFormat: 'mm:ss', correctFormat: true},
- {data: 'lastName'}
- ],
- afterValidate: onAfterValidate
- });
- setDataAtCell(1, 0, '57');
- setTimeout(() => {
- expect(onAfterValidate).toHaveBeenCalledWith(true, '57', 1, 'time', undefined, undefined);
- }, 100);
- setTimeout(() => {
- expect(getDataAtCell(1, 0)).toEqual('57:00');
- done();
- }, 130);
- });
- it('should not try to correct format of non-date strings', (done) => {
- var onAfterValidate = jasmine.createSpy('onAfterValidate');
- handsontable({
- data: arrayOfObjects(),
- columns: [
- {data: 'time', type: 'time', timeFormat: 'HH:mm:ss', correctFormat: true},
- {data: 'name'},
- {data: 'lastName'}
- ],
- afterValidate: onAfterValidate
- });
- setDataAtCell(1, 0, 'test non-time string');
- setTimeout(() => {
- expect(onAfterValidate).toHaveBeenCalledWith(false, 'test non-time string', 1, 'time', undefined, undefined);
- done();
- }, 100);
- });
- });
- });
|