UNPKG

@root-systems/redux-form-validators

Version:
186 lines (162 loc) 11.6 kB
'use strict'; var _assert = require('assert'); var _assert2 = _interopRequireDefault(_assert); var _index = require('../index'); var _helper = require('./helper'); var _helper2 = _interopRequireDefault(_helper); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var ERROR_FORMAT_ID = 'form.errors.dateFormat'; var ERROR_INVALID_ID = 'form.errors.dateInvalid'; var ERROR_RANGE_ID = 'form.errors.dateRange'; function test(value, params) { return (0, _helper2.default)((0, _index.date)(params)(value)); } function testParse(date, strDate, format, ymd) { var t = (0, _index.parseDate)(strDate, format, ymd).getTime(); return date ? date.getTime() === t : t !== t; // "t !== t" => invalid date (getTime returns NaN) } function testFormat(strDate, date, format, ymd) { return strDate == (0, _index.formatDate)(date, format, ymd); } describe('Validator: date', function () { it('should be invalid', function () { _assert2.default.equal(ERROR_FORMAT_ID, test('', { format: 'mm/dd/yyyy' })); _assert2.default.equal(ERROR_FORMAT_ID, test('12122016', { format: 'mm/dd/yyyy' })); _assert2.default.equal(ERROR_FORMAT_ID, test('12-12-2016', { format: 'mm/dd/yyyy' })); _assert2.default.equal(ERROR_FORMAT_ID, test('12/12//2016', { format: 'mm/dd/yyyy' })); _assert2.default.equal(ERROR_FORMAT_ID, test('12/12//16', { format: 'mm/dd/yyyy' })); _assert2.default.equal(ERROR_FORMAT_ID, test('12/12//16', { format: 'mm/dd' })); _assert2.default.equal(ERROR_INVALID_ID, test('02/29/2015', { format: 'mm/dd/yyyy' })); _assert2.default.equal(ERROR_INVALID_ID, test('13/20/2015', { format: 'mm/dd/yyyy' })); _assert2.default.equal(ERROR_INVALID_ID, test('00/10/2015', { format: 'mm/dd/yyyy' })); _assert2.default.equal(ERROR_INVALID_ID, test('01/00/2015', { format: 'mm/dd/yyyy' })); _assert2.default.equal(ERROR_RANGE_ID, test('01/01/2017', { format: 'mm/dd/yyyy', '=': new Date(2017, 0, 2) })); _assert2.default.equal(ERROR_RANGE_ID, test('01/01/2017', { format: 'mm/dd/yyyy', '!=': new Date(2017, 0, 1) })); _assert2.default.equal(ERROR_RANGE_ID, test('01/01/2017', { format: 'mm/dd/yyyy', '>': new Date(2017, 0) })); _assert2.default.equal(ERROR_RANGE_ID, test('01/01/0001', { format: 'mm/dd/yyyy', '>': 'today' })); _assert2.default.equal(ERROR_RANGE_ID, test('01/01/0001', { format: 'mm/dd/yyyy', '>': function _() { return new Date(); } })); _assert2.default.equal(ERROR_RANGE_ID, test('12/31/2016', { format: 'mm/dd/yyyy', '>=': new Date(2017, 0) })); _assert2.default.equal(ERROR_RANGE_ID, test('01/01/2017', { format: 'mm/dd/yyyy', '<': new Date(2016, 11, 31) })); _assert2.default.equal(ERROR_RANGE_ID, test('01/02/2017', { format: 'mm/dd/yyyy', '<=': new Date(2017, 0) })); _assert2.default.equal(ERROR_RANGE_ID, test('01/01/2018', { format: 'mm/dd/yyyy', '>': new Date(2016, 0), '<=': new Date(2017, 0) })); _assert2.default.equal(ERROR_RANGE_ID, test('01/01/2015', { format: 'mm/dd/yyyy', '>': new Date(2016, 0), '<=': new Date(2017, 0) })); }); it('should be valid', function () { _assert2.default.ok(!test('12/31/2017', { format: 'mm/dd/yyyy' })); _assert2.default.ok(!test('02/29/2016', { format: 'mm/dd/yyyy' })); _assert2.default.ok(!test('31/12/2017', { format: 'dd/mm/yyyy' })); _assert2.default.ok(!test('29/02/2016', { format: 'dd/mm/yyyy' })); _assert2.default.ok(!test('0020/0002/002016', { format: 'dddd/mmmm/yyyyyy' })); _assert2.default.ok(!test('12/12/16', { format: 'mm/dd/yy' })); _assert2.default.ok(!test('12/12/80', { format: 'mm/dd/yy' })); _assert2.default.ok(!test('2016/01', { format: 'yyyy/mm' })); // not comparable _assert2.default.ok(!test('2016/01', { format: 'yyyy/dd', '<': new Date(1000, 0, 1) })); _assert2.default.ok(!test('12/01', { format: 'mm/dd', '<': new Date(1000, 0, 1) })); _assert2.default.ok(!test('29/02/2016', { format: 'DD/MM/YYYY', ymd: 'YMD' })); _assert2.default.ok(!test('29/02/2016', { format: 'jj/mm/aaaa', ymd: 'amj' })); var d = new Date(); d.setDate(d.getDate() - 1); var yesterday = ('00' + (d.getMonth() + 1)).slice(-2) + '/' + ('00' + d.getDate()).slice(-2) + '/' + d.getFullYear(); _assert2.default.ok(!test('01/01/2017', { format: 'mm/dd/yyyy', '=': new Date(2017, 0, 1) })); _assert2.default.ok(!test('01/01/2017', { format: 'mm/dd/yyyy', '!=': new Date(2017, 0, 2) })); _assert2.default.ok(!test('01/02/2017', { format: 'mm/dd/yyyy', '>': new Date(2017, 0) })); _assert2.default.ok(!test(yesterday, { format: 'mm/dd/yyyy', '<': 'today' })); _assert2.default.ok(!test('01/01/2012', { format: 'mm/dd/yyyy', '>': function _() { return new Date(2000, 0); } })); _assert2.default.ok(!test('12/31/2016', { format: 'mm/dd/yyyy', '>=': new Date(2016, 0) })); _assert2.default.ok(!test('01/01/2016', { format: 'mm/dd/yyyy', '<': new Date(2016, 11, 31) })); _assert2.default.ok(!test('01/01/2017', { format: 'mm/dd/yyyy', '<=': new Date(2017, 0) })); _assert2.default.ok(!test('06/01/2016', { format: 'mm/dd/yyyy', '>': new Date(2016, 0), '<=': new Date(2017, 0) })); _assert2.default.ok(!test('01/01/2017', { format: 'mm/dd/yyyy', '>': new Date(2016, 0), '<=': new Date(2017, 0) })); }); }); describe('parse date', function () { it('should be valid', function () { _assert2.default.ok(testParse(new Date(2017, 11, 31), '12/31/2017', 'mm/dd/yyyy')); _assert2.default.ok(testParse(new Date(2016, 1, 29), '02/29/2016', 'mm/dd/yyyy')); _assert2.default.ok(testParse(new Date(2017, 11, 31), '31/12/2017', 'dd/mm/yyyy')); _assert2.default.ok(testParse(new Date(2016, 1, 29), '29/02/2016', 'dd/mm/yyyy')); _assert2.default.ok(testParse(new Date(2016, 1, 20), '0020/0002/002016', 'dddd/mmmm/yyyyyy')); _assert2.default.ok(testParse(new Date(2016, 11, 12), '12/12/16', 'mm/dd/yy')); _assert2.default.ok(testParse(new Date(1980, 11, 12), '12/12/80', 'mm/dd/yy')); _assert2.default.ok(testParse(new Date(2016, 0, 1), '2016/01', 'yyyy/mm')); _assert2.default.ok(testParse(new Date(2016, 0, 1), '2016/01', 'yyyy/dd')); _assert2.default.ok(testParse(new Date(1970, 11, 1), '12/01', 'mm/dd')); _assert2.default.ok(testParse(new Date(2017, 11, 31), '12/31/2017', 'xx/jj/aaaa', 'axj')); _assert2.default.ok(testParse(new Date(2016, 1, 29), '02/29/2016', 'xx/jj/aaaa', 'axj')); _assert2.default.ok(testParse(new Date(2017, 11, 31), '31/12/2017', 'jj/xx/aaaa', 'axj')); _assert2.default.ok(testParse(new Date(2016, 1, 29), '29/02/2016', 'jj/xx/aaaa', 'axj')); _assert2.default.ok(testParse(new Date(2016, 1, 20), '0020/0002/002016', 'jjjj/xxxx/aaaaaa', 'axj')); _assert2.default.ok(testParse(new Date(2016, 11, 12), '12/12/16', 'xx/jj/aa', 'axj')); _assert2.default.ok(testParse(new Date(1980, 11, 12), '12/12/80', 'xx/jj/aa', 'axj')); _assert2.default.ok(testParse(new Date(2016, 0, 1), '2016/01', 'aaaa/xx', 'axj')); _assert2.default.ok(testParse(new Date(2016, 0, 1), '2016/01', 'aaaa/jj', 'axj')); _assert2.default.ok(testParse(new Date(1970, 11, 1), '12/01', 'xx/jj', 'axj')); }); it('should be invalid', function () { _assert2.default.ok(testParse(null, '', 'mm/dd/yyyy')); _assert2.default.ok(testParse(null, '12122016', 'mm/dd/yyyy')); _assert2.default.ok(testParse(null, '12-12-2016', 'mm/dd/yyyy')); _assert2.default.ok(testParse(null, '12/12//2016', 'mm/dd/yyyy')); _assert2.default.ok(testParse(null, '12/12//16', 'mm/dd/yyyy')); _assert2.default.ok(testParse(null, '12/12//16', 'mm/dd')); _assert2.default.ok(testParse(null, '02/29/2015', 'mm/dd/yyyy')); _assert2.default.ok(testParse(null, '13/20/2015', 'mm/dd/yyyy')); _assert2.default.ok(testParse(null, '00/10/2015', 'mm/dd/yyyy')); _assert2.default.ok(testParse(null, '01/00/2015', 'mm/dd/yyyy')); _assert2.default.ok(testParse(null, '', 'xx/jj/aaaa', 'axj')); _assert2.default.ok(testParse(null, '12122016', 'xx/jj/aaaa', 'axj')); _assert2.default.ok(testParse(null, '12-12-2016', 'xx/jj/aaaa', 'axj')); _assert2.default.ok(testParse(null, '12/12//2016', 'xx/jj/aaaa', 'axj')); _assert2.default.ok(testParse(null, '12/12//16', 'xx/jj/aaaa', 'axj')); _assert2.default.ok(testParse(null, '12/12//16', 'xx/jj', 'axj')); _assert2.default.ok(testParse(null, '02/29/2015', 'xx/jj/aaaa', 'axj')); _assert2.default.ok(testParse(null, '13/20/2015', 'xx/jj/aaaa', 'axj')); _assert2.default.ok(testParse(null, '00/10/2015', 'xx/jj/aaaa', 'axj')); _assert2.default.ok(testParse(null, '01/00/2015', 'xx/jj/aaaa', 'axj')); }); }); describe('format date', function () { it('should be valid', function () { _assert2.default.ok(testFormat('', new Date(2017, 11, 31), '')); _assert2.default.ok(testFormat('12/31/2017', new Date(2017, 11, 31), 'mm/dd/yyyy')); _assert2.default.ok(testFormat('02/29/2016', new Date(2016, 1, 29), 'mm/dd/yyyy')); _assert2.default.ok(testFormat('31/12/2017', new Date(2017, 11, 31), 'dd/mm/yyyy')); _assert2.default.ok(testFormat('29/02/2016', new Date(2016, 1, 29), 'dd/mm/yyyy')); _assert2.default.ok(testFormat('0020/0002/002016', new Date(2016, 1, 20), 'dddd/mmmm/yyyyyy')); _assert2.default.ok(testFormat('12/12/16', new Date(2016, 11, 12), 'mm/dd/yy')); _assert2.default.ok(testFormat('12/12/80', new Date(1980, 11, 12), 'mm/dd/yy')); _assert2.default.ok(testFormat('2016/01', new Date(2016, 0, 1), 'yyyy/mm')); _assert2.default.ok(testFormat('1601', new Date(2016, 0, 1), 'yymm')); _assert2.default.ok(testFormat('0116', new Date(2016, 0, 1), 'mmyy')); _assert2.default.ok(testFormat('2016/01', new Date(2016, 0, 1), 'yyyy/dd')); _assert2.default.ok(testFormat('12/01', new Date(1970, 11, 1), 'mm/dd')); _assert2.default.ok(testFormat('', new Date(2017, 11, 31), '', 'axj')); _assert2.default.ok(testFormat('12/31/2017', new Date(2017, 11, 31), 'xx/jj/aaaa', 'axj')); _assert2.default.ok(testFormat('02/29/2016', new Date(2016, 1, 29), 'xx/jj/aaaa', 'axj')); _assert2.default.ok(testFormat('31/12/2017', new Date(2017, 11, 31), 'jj/xx/aaaa', 'axj')); _assert2.default.ok(testFormat('29/02/2016', new Date(2016, 1, 29), 'jj/xx/aaaa', 'axj')); _assert2.default.ok(testFormat('0020/0002/002016', new Date(2016, 1, 20), 'jjjj/xxxx/aaaaaa', 'axj')); _assert2.default.ok(testFormat('12/12/16', new Date(2016, 11, 12), 'xx/jj/aa', 'axj')); _assert2.default.ok(testFormat('12/12/80', new Date(1980, 11, 12), 'xx/jj/aa', 'axj')); _assert2.default.ok(testFormat('2016/01', new Date(2016, 0, 1), 'aaaa/xx', 'axj')); _assert2.default.ok(testFormat('1601', new Date(2016, 0, 1), 'yymm', 'axj')); _assert2.default.ok(testFormat('0116', new Date(2016, 0, 1), 'mmyy', 'axj')); _assert2.default.ok(testFormat('2016/01', new Date(2016, 0, 1), 'aaaa/jj', 'axj')); _assert2.default.ok(testFormat('12/01', new Date(1970, 11, 1), 'xx/jj', 'axj')); }); it('should be invalid', function () { _assert2.default.ok(testFormat(null, new Date(NaN), '')); _assert2.default.ok(testFormat(null, new Date(NaN), 'mm/dd/yyyy')); _assert2.default.ok(testFormat(null, null, 'mm/dd/yyyy')); _assert2.default.ok(testFormat(null, 0, 'mm/dd/yyyy')); _assert2.default.ok(testFormat(null, 'new date', 'mm/dd/yyyy')); _assert2.default.ok(testFormat(null, {}, 'mm/dd/yyyy')); _assert2.default.ok(testFormat(null, new Date(NaN), '', 'axj')); _assert2.default.ok(testFormat(null, new Date(NaN), 'xx/jj/aaaa', 'axj')); }); });