TableFilter/test/test-date-type.js

160 lines
5.5 KiB
JavaScript

var tf = new TableFilter('demo', {
base_path: '../dist/tablefilter/',
col_types: [
null, null, null,
{ type: 'formatted-number', decimal: ',', thousands: ','},
'formatted-number', null,
{ type: 'date', locale: 'fr', },
{ type: 'date', locale: 'en', format: '{dd}-{MM}-{yyyy|yy}' },
{ type: 'date', locale: 'en', format: ['{dd}-{months}-{yyyy|yy}'] },
'IpAddress'
]
});
tf.init();
var dateType = tf.feature('dateType');
module('Sanity checks');
test('DateType feature', function() {
deepEqual(typeof dateType, 'object', 'DateType instanciated');
deepEqual(dateType.locale, 'en', 'DateType default locale');
notEqual(dateType.datetime, null, 'Sugar date instance');
});
module('Feature interface');
test('Properties', function() {
deepEqual(dateType.tf instanceof TableFilter, true, 'TableFilter instance');
deepEqual(dateType.feature, 'dateType', 'Feature name');
deepEqual(dateType.enabled, true, 'Feature enabled');
deepEqual(dateType.initialized, true, 'Feature enabled');
deepEqual(typeof dateType.emitter, 'object',
'Feature has emitter instance');
deepEqual(typeof dateType.config, 'object', 'TF configuration object');
deepEqual(typeof dateType.init, 'function', 'Feature init method');
deepEqual(typeof dateType.destroy, 'function', 'Feature destroy method');
deepEqual(typeof dateType.reset, 'function', 'Feature reset method');
deepEqual(typeof dateType.enable, 'function', 'Feature enable method');
deepEqual(typeof dateType.disable, 'function', 'Feature enable method');
deepEqual(typeof dateType.isEnabled, 'function', 'Feature enable method');
});
test('Can destroy', function() {
dateType.destroy();
deepEqual(dateType.initialized, false, 'not initialised');
});
test('Can reset', function() {
dateType.reset();
deepEqual(dateType.enabled, true, 'enabled');
});
test('Can disable', function() {
dateType.disable();
deepEqual(dateType.enabled, false, 'disabled');
});
test('Can enable', function() {
dateType.enable();
deepEqual(dateType.enabled, true, 'enabled');
});
test('Can init', function() {
dateType.destroy();
dateType.enable();
dateType.init();
deepEqual(dateType.initialized, true, 'initialised');
});
test('Can check is enabled', function() {
dateType.isEnabled();
deepEqual(dateType.enabled, true, 'enabled');
});
module('Behaviour');
test('Can parse date', function() {
var date0 = dateType.parse('10/25/2017', 'en-US');
var date1 = dateType.parse('25/10/2017', 'en-GB');
var date2 = dateType.parse('1997-07-16T19:20:30+01:00', 'en');
var date3 = dateType.parse('14-Jul-2005', 'fr');
var date4 = dateType.parse(null);
var date5 = dateType.parse(undefined);
var date6 = dateType.parse('');
deepEqual(date0, new Date(2017, 9, 25, 0, 0, 0, 0), 'en-US date');
deepEqual(date1, new Date(2017, 9, 25, 0, 0, 0, 0), 'en-GB date');
deepEqual(date2.toISOString(), '1997-07-16T18:20:30.000Z', 'ISO date');
deepEqual(date3, new Date(2005, 6, 14, 0, 0, 0, 0), 'fr date');
deepEqual(date4.toISOString(), '1970-01-01T00:00:00.000Z', 'null date');
deepEqual(date5 instanceof Date, true, 'undefined date');
deepEqual(isNaN(date6), true, 'Invalid date');
});
test('Can validate date', function() {
var v0 = dateType.isValid('10/25/2017', 'en-US');
var v1 = dateType.isValid('25/10/2017', 'en-GB');
var v2 = dateType.isValid('1997-07-16T19:20:30+01:00', 'en');
var v3 = dateType.isValid('14-Jul-2005', 'fr');
var v4 = dateType.isValid('hello', 'en');
var v5 = dateType.isValid(null, 'en');
var v6 = dateType.isValid(undefined, 'en');
var v7 = dateType.isValid('');
deepEqual(v0, true, 'valid en-US date');
deepEqual(v1, true, 'valid en-GB date');
deepEqual(v2, true, 'valid ISO date');
deepEqual(v3, true, 'valid fr date');
deepEqual(v4, false, 'Invalid date');
deepEqual(v5, true, 'Valid date');
deepEqual(v6, true, 'Valid date');
deepEqual(v7, false, 'Invalid date');
});
test('Can get column date type options', function() {
var opts0 = dateType.getOptions(0);
var opts8 = dateType.getOptions(8);
var opts99 = dateType.getOptions(99);
var opts = dateType.getOptions(0, [{ type: 'date'}]);
deepEqual(opts0, {}, 'no column date type options');
deepEqual(
opts8,
{ type: 'date', locale: 'en', format: ['{dd}-{months}-{yyyy|yy}'] },
'column options'
);
deepEqual(opts99, {}, 'out of range column index');
deepEqual(opts, {type: 'date'}, 'column date type from passed collection');
});
test('Can add date formats from config', function() {
var nbFormats = dateType.datetime.getLocale('fr').compiledFormats.length;
dateType.addConfigFormats([{
type: 'date', locale: 'fr',
format: ['{dd}-{months}-{yyyy|yy}']
}]);
deepEqual(
dateType.datetime.getLocale('fr').compiledFormats.length,
nbFormats+1,
'Expected number of formats for current locale'
);
});
test('Can get locale for a column index retrieved from config', function() {
// act
var result = dateType.getLocale(6);
// assert
deepEqual(result, 'fr', 'Locale for given column');
});
test('Can get locale for a column index from global setting', function() {
// act
var result = dateType.getLocale(1);
// assert
deepEqual(result, 'en', 'Locale for given column');
});
module('Tear-down');
test('can destroy TableFilter DOM elements', function() {
tf.destroy();
deepEqual(tf.isInitialized(), false, 'Filters removed');
});