redux-form-validators
Version:
Simple validations with redux-form / react-final-form
450 lines (314 loc) • 14.8 kB
JavaScript
"use strict";
var _assert = _interopRequireDefault(require("assert"));
var _index = _interopRequireWildcard(require("../index"));
var _helper = _interopRequireDefault(require("./helper"));
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj["default"] = obj; return newObj; } }
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';
var parseDate = _index.date.parseDate;
var formatDate = _index.date.formatDate;
function test(value, params) {
return (0, _helper["default"])((0, _index.date)(params)(value));
}
function testParse(date, strDate, format, ymd) {
var t = parseDate(strDate, format, ymd).getTime(); // eslint-disable-next-line no-self-compare
return date ? date.getTime() === t : t !== t; // "t !== t" => invalid date (getTime returns NaN)
}
function testFormat(strDate, date, format, ymd) {
// eslint-disable-next-line eqeqeq
return strDate == formatDate(date, format, ymd);
}
describe('Validator: date', function () {
it('should be invalid', function () {
_assert["default"].strictEqual(ERROR_FORMAT_ID, test('', {
format: 'mm/dd/yyyy'
}));
_assert["default"].strictEqual(ERROR_FORMAT_ID, test('12122016', {
format: 'mm/dd/yyyy'
}));
_assert["default"].strictEqual(ERROR_FORMAT_ID, test('12-12-2016', {
format: 'mm/dd/yyyy'
}));
_assert["default"].strictEqual(ERROR_FORMAT_ID, test('12/12//2016', {
format: 'mm/dd/yyyy'
}));
_assert["default"].strictEqual(ERROR_FORMAT_ID, test('12/12//16', {
format: 'mm/dd/yyyy'
}));
_assert["default"].strictEqual(ERROR_FORMAT_ID, test('12/12//16', {
format: 'mm/dd'
}));
_assert["default"].strictEqual(ERROR_INVALID_ID, test('02/29/2015', {
format: 'mm/dd/yyyy'
}));
_assert["default"].strictEqual(ERROR_INVALID_ID, test('13/20/2015', {
format: 'mm/dd/yyyy'
}));
_assert["default"].strictEqual(ERROR_INVALID_ID, test('00/10/2015', {
format: 'mm/dd/yyyy'
}));
_assert["default"].strictEqual(ERROR_INVALID_ID, test('01/00/2015', {
format: 'mm/dd/yyyy'
}));
_assert["default"].strictEqual(ERROR_RANGE_ID, test('01/01/2017', {
format: 'mm/dd/yyyy',
'=': new Date(2017, 0, 2)
}));
_assert["default"].strictEqual(ERROR_RANGE_ID, test('01/01/2017', {
format: 'mm/dd/yyyy',
'!=': new Date(2017, 0, 1)
}));
_assert["default"].strictEqual(ERROR_RANGE_ID, test('01/01/2017', {
format: 'mm/dd/yyyy',
'>': new Date(2017, 0)
}));
_assert["default"].strictEqual(ERROR_RANGE_ID, test('01/01/0001', {
format: 'mm/dd/yyyy',
'>': 'today'
}));
_assert["default"].strictEqual(ERROR_RANGE_ID, test('01/01/0001', {
format: 'mm/dd/yyyy',
'>': function _() {
return new Date();
}
}));
_assert["default"].strictEqual(ERROR_RANGE_ID, test('12/31/2016', {
format: 'mm/dd/yyyy',
'>=': new Date(2017, 0)
}));
_assert["default"].strictEqual(ERROR_RANGE_ID, test('01/01/2017', {
format: 'mm/dd/yyyy',
'<': new Date(2016, 11, 31)
}));
_assert["default"].strictEqual(ERROR_RANGE_ID, test('01/02/2017', {
format: 'mm/dd/yyyy',
'<=': new Date(2017, 0)
}));
_assert["default"].strictEqual(ERROR_RANGE_ID, test('01/01/2018', {
format: 'mm/dd/yyyy',
'>': new Date(2016, 0),
'<=': new Date(2017, 0)
}));
_assert["default"].strictEqual(ERROR_RANGE_ID, test('01/01/2015', {
format: 'mm/dd/yyyy',
'>': new Date(2016, 0),
'<=': new Date(2017, 0)
}));
});
it('should be valid', function () {
_assert["default"].ok(!test('12/31/2017', {
format: 'mm/dd/yyyy'
}));
_assert["default"].ok(!test('02/29/2016', {
format: 'mm/dd/yyyy'
}));
_assert["default"].ok(!test('31/12/2017', {
format: 'dd/mm/yyyy'
}));
_assert["default"].ok(!test('29/02/2016', {
format: 'dd/mm/yyyy'
}));
_assert["default"].ok(!test('0020/0002/002016', {
format: 'dddd/mmmm/yyyyyy'
}));
_assert["default"].ok(!test('12/12/16', {
format: 'mm/dd/yy'
}));
_assert["default"].ok(!test('12/12/80', {
format: 'mm/dd/yy'
}));
_assert["default"].ok(!test('2016/01', {
format: 'yyyy/mm'
})); // not comparable
_assert["default"].ok(!test('2016/01', {
format: 'yyyy/dd',
'<': new Date(1000, 0, 1)
}));
_assert["default"].ok(!test('12/01', {
format: 'mm/dd',
'<': new Date(1000, 0, 1)
}));
_assert["default"].ok(!test('29/02/2016', {
format: 'DD/MM/YYYY',
ymd: 'YMD'
}));
_assert["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();
_assert["default"].ok(!test('01/01/2017', {
format: 'mm/dd/yyyy',
'=': new Date(2017, 0, 1)
}));
_assert["default"].ok(!test('01/01/2017', {
format: 'mm/dd/yyyy',
'!=': new Date(2017, 0, 2)
}));
_assert["default"].ok(!test('01/02/2017', {
format: 'mm/dd/yyyy',
'>': new Date(2017, 0)
}));
_assert["default"].ok(!test(yesterday, {
format: 'mm/dd/yyyy',
'<': 'today'
}));
_assert["default"].ok(!test('01/01/2012', {
format: 'mm/dd/yyyy',
'>': function _() {
return new Date(2000, 0);
}
}));
_assert["default"].ok(!test('12/31/2016', {
format: 'mm/dd/yyyy',
'>=': new Date(2016, 0)
}));
_assert["default"].ok(!test('01/01/2016', {
format: 'mm/dd/yyyy',
'<': new Date(2016, 11, 31)
}));
_assert["default"].ok(!test('01/01/2017', {
format: 'mm/dd/yyyy',
'<=': new Date(2017, 0)
}));
_assert["default"].ok(!test('06/01/2016', {
format: 'mm/dd/yyyy',
'>': new Date(2016, 0),
'<=': new Date(2017, 0)
}));
_assert["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 () {
_assert["default"].ok(testParse(new Date(2017, 11, 31), '12/31/2017', 'mm/dd/yyyy'));
_assert["default"].ok(testParse(new Date(2016, 1, 29), '02/29/2016', 'mm/dd/yyyy'));
_assert["default"].ok(testParse(new Date(2017, 11, 31), '31/12/2017', 'dd/mm/yyyy'));
_assert["default"].ok(testParse(new Date(2016, 1, 29), '29/02/2016', 'dd/mm/yyyy'));
_assert["default"].ok(testParse(new Date(2016, 1, 20), '0020/0002/002016', 'dddd/mmmm/yyyyyy'));
_assert["default"].ok(testParse(new Date(2016, 11, 12), '12/12/16', 'mm/dd/yy'));
_assert["default"].ok(testParse(new Date(1980, 11, 12), '12/12/80', 'mm/dd/yy'));
_assert["default"].ok(testParse(new Date(2016, 0, 1), '2016/01', 'yyyy/mm'));
_assert["default"].ok(testParse(new Date(2016, 0, 1), '2016/01', 'yyyy/dd'));
_assert["default"].ok(testParse(new Date(1970, 11, 1), '12/01', 'mm/dd'));
_assert["default"].ok(testParse(new Date(2017, 11, 31), '12/31/2017', 'xx/jj/aaaa', 'axj'));
_assert["default"].ok(testParse(new Date(2016, 1, 29), '02/29/2016', 'xx/jj/aaaa', 'axj'));
_assert["default"].ok(testParse(new Date(2017, 11, 31), '31/12/2017', 'jj/xx/aaaa', 'axj'));
_assert["default"].ok(testParse(new Date(2016, 1, 29), '29/02/2016', 'jj/xx/aaaa', 'axj'));
_assert["default"].ok(testParse(new Date(2016, 1, 20), '0020/0002/002016', 'jjjj/xxxx/aaaaaa', 'axj'));
_assert["default"].ok(testParse(new Date(2016, 11, 12), '12/12/16', 'xx/jj/aa', 'axj'));
_assert["default"].ok(testParse(new Date(1980, 11, 12), '12/12/80', 'xx/jj/aa', 'axj'));
_assert["default"].ok(testParse(new Date(2016, 0, 1), '2016/01', 'aaaa/xx', 'axj'));
_assert["default"].ok(testParse(new Date(2016, 0, 1), '2016/01', 'aaaa/jj', 'axj'));
_assert["default"].ok(testParse(new Date(1970, 11, 1), '12/01', 'xx/jj', 'axj'));
});
it('should be invalid', function () {
_assert["default"].ok(testParse(null, '', 'mm/dd/yyyy'));
_assert["default"].ok(testParse(null, '12122016', 'mm/dd/yyyy'));
_assert["default"].ok(testParse(null, '12-12-2016', 'mm/dd/yyyy'));
_assert["default"].ok(testParse(null, '12/12//2016', 'mm/dd/yyyy'));
_assert["default"].ok(testParse(null, '12/12//16', 'mm/dd/yyyy'));
_assert["default"].ok(testParse(null, '12/12//16', 'mm/dd'));
_assert["default"].ok(testParse(null, '02/29/2015', 'mm/dd/yyyy'));
_assert["default"].ok(testParse(null, '13/20/2015', 'mm/dd/yyyy'));
_assert["default"].ok(testParse(null, '00/10/2015', 'mm/dd/yyyy'));
_assert["default"].ok(testParse(null, '01/00/2015', 'mm/dd/yyyy'));
_assert["default"].ok(testParse(null, '', 'xx/jj/aaaa', 'axj'));
_assert["default"].ok(testParse(null, '12122016', 'xx/jj/aaaa', 'axj'));
_assert["default"].ok(testParse(null, '12-12-2016', 'xx/jj/aaaa', 'axj'));
_assert["default"].ok(testParse(null, '12/12//2016', 'xx/jj/aaaa', 'axj'));
_assert["default"].ok(testParse(null, '12/12//16', 'xx/jj/aaaa', 'axj'));
_assert["default"].ok(testParse(null, '12/12//16', 'xx/jj', 'axj'));
_assert["default"].ok(testParse(null, '02/29/2015', 'xx/jj/aaaa', 'axj'));
_assert["default"].ok(testParse(null, '13/20/2015', 'xx/jj/aaaa', 'axj'));
_assert["default"].ok(testParse(null, '00/10/2015', 'xx/jj/aaaa', 'axj'));
_assert["default"].ok(testParse(null, '01/00/2015', 'xx/jj/aaaa', 'axj'));
});
});
describe('format date', function () {
it('should be valid', function () {
_assert["default"].ok(testFormat('', new Date(2017, 11, 31), ''));
_assert["default"].ok(testFormat('12/31/2017', new Date(2017, 11, 31), 'mm/dd/yyyy'));
_assert["default"].ok(testFormat('02/29/2016', new Date(2016, 1, 29), 'mm/dd/yyyy'));
_assert["default"].ok(testFormat('31/12/2017', new Date(2017, 11, 31), 'dd/mm/yyyy'));
_assert["default"].ok(testFormat('29/02/2016', new Date(2016, 1, 29), 'dd/mm/yyyy'));
_assert["default"].ok(testFormat('0020/0002/002016', new Date(2016, 1, 20), 'dddd/mmmm/yyyyyy'));
_assert["default"].ok(testFormat('12/12/16', new Date(2016, 11, 12), 'mm/dd/yy'));
_assert["default"].ok(testFormat('12/12/80', new Date(1980, 11, 12), 'mm/dd/yy'));
_assert["default"].ok(testFormat('2016/01', new Date(2016, 0, 1), 'yyyy/mm'));
_assert["default"].ok(testFormat('1601', new Date(2016, 0, 1), 'yymm'));
_assert["default"].ok(testFormat('0116', new Date(2016, 0, 1), 'mmyy'));
_assert["default"].ok(testFormat('2016/01', new Date(2016, 0, 1), 'yyyy/dd'));
_assert["default"].ok(testFormat('12/01', new Date(1970, 11, 1), 'mm/dd'));
_assert["default"].ok(testFormat('', new Date(2017, 11, 31), '', 'axj'));
_assert["default"].ok(testFormat('12/31/2017', new Date(2017, 11, 31), 'xx/jj/aaaa', 'axj'));
_assert["default"].ok(testFormat('02/29/2016', new Date(2016, 1, 29), 'xx/jj/aaaa', 'axj'));
_assert["default"].ok(testFormat('31/12/2017', new Date(2017, 11, 31), 'jj/xx/aaaa', 'axj'));
_assert["default"].ok(testFormat('29/02/2016', new Date(2016, 1, 29), 'jj/xx/aaaa', 'axj'));
_assert["default"].ok(testFormat('0020/0002/002016', new Date(2016, 1, 20), 'jjjj/xxxx/aaaaaa', 'axj'));
_assert["default"].ok(testFormat('12/12/16', new Date(2016, 11, 12), 'xx/jj/aa', 'axj'));
_assert["default"].ok(testFormat('12/12/80', new Date(1980, 11, 12), 'xx/jj/aa', 'axj'));
_assert["default"].ok(testFormat('2016/01', new Date(2016, 0, 1), 'aaaa/xx', 'axj'));
_assert["default"].ok(testFormat('1601', new Date(2016, 0, 1), 'yymm', 'axj'));
_assert["default"].ok(testFormat('0116', new Date(2016, 0, 1), 'mmyy', 'axj'));
_assert["default"].ok(testFormat('2016/01', new Date(2016, 0, 1), 'aaaa/jj', 'axj'));
_assert["default"].ok(testFormat('12/01', new Date(1970, 11, 1), 'xx/jj', 'axj'));
});
it('should be invalid', function () {
_assert["default"].ok(testFormat(null, new Date(NaN), ''));
_assert["default"].ok(testFormat(null, new Date(NaN), 'mm/dd/yyyy'));
_assert["default"].ok(testFormat(null, null, 'mm/dd/yyyy'));
_assert["default"].ok(testFormat(null, 0, 'mm/dd/yyyy'));
_assert["default"].ok(testFormat(null, 'new date', 'mm/dd/yyyy'));
_assert["default"].ok(testFormat(null, {}, 'mm/dd/yyyy'));
_assert["default"].ok(testFormat(null, new Date(NaN), '', 'axj'));
_assert["default"].ok(testFormat(null, new Date(NaN), 'xx/jj/aaaa', 'axj'));
});
it('should use default dateFormat option', function () {
var defaultValue = _index["default"].defaultOptions.dateFormat;
_index["default"].defaultOptions.dateFormat = 'mm/dd/yyyy';
_assert["default"].ok(!test('12/31/2017'));
_index["default"].defaultOptions.dateFormat = 'yyyy/mm/dd';
_assert["default"].ok(!test('2017/12/31'));
_index["default"].defaultOptions.dateFormat = defaultValue;
});
it('should use default dateYmd option', function () {
var defaultValue = _index["default"].defaultOptions.dateYmd;
_index["default"].defaultOptions.dateYmd = 'xyz';
_assert["default"].ok(!test('12/31/2017', {
format: 'yy/zz/xxxx'
}));
_index["default"].defaultOptions.dateYmd = 'dym';
_assert["default"].ok(!test('12/31/2017', {
format: 'yy/mm/dddd'
}));
_index["default"].defaultOptions.dateYmd = defaultValue;
});
it('should use formatMessage', function () {
var defaultValue = _index["default"].formatMessage;
_index["default"].formatMessage = function (msg) {
return Object.assign({}, msg, {
id: msg.id + '2'
});
};
_assert["default"].strictEqual(ERROR_FORMAT_ID + '2', test('', {
format: 'mm/dd/yyyy'
}));
_assert["default"].strictEqual(ERROR_INVALID_ID + '2', test('01/00/2015', {
format: 'mm/dd/yyyy'
}));
_assert["default"].strictEqual(ERROR_RANGE_ID + '2', test('01/01/2017', {
format: 'mm/dd/yyyy',
'=': new Date(2017, 0, 2)
}));
_index["default"].formatMessage = defaultValue;
});
});