1
0
Fork 0
mirror of https://github.com/koalyptus/TableFilter.git synced 2024-04-26 20:16:38 +02:00
TableFilter/test/test.js
2017-11-30 13:57:11 +11:00

163 lines
4.5 KiB
JavaScript

(function(win, TableFilter) {
var tf = new TableFilter('demo', {
base_path: '../dist/tablefilter/'
});
tf.init();
module('Table 1: sanity checks');
test('TableFilter object', function() {
deepEqual(tf instanceof TableFilter, true, 'TableFilter instanciated');
deepEqual(tf.id, 'demo', 'id check');
deepEqual(tf.filtersRowIndex, 0, 'Filters row index');
deepEqual(tf.getCellsNb(), 5, 'filters type collection length');
});
module('Table 1: DOM tests');
test('Filters row', function() {
equal(
tf.dom().rows[0].className,
'fltrow',
'Filters row CSS class name'
);
equal(tf.getFilterElement(0).nodeName, 'INPUT', 'Filter DOM element');
deepEqual(
tf.dom().scrollWidth === tf.dom().clientWidth,
true,
'Horizontal scrollbar is not displayed'
);
});
var tf1 = new TableFilter(
document.querySelector('.test'),
{
base_path: '../dist/tablefilter/',
responsive: true,
filters_row_index: 1,
btn: true
}
);
tf1.init();
var btn = document.querySelector('.' + tf1.btnCssClass);
module('Table 2: sanity checks');
test('TableFilter instance', function() {
notEqual(tf1.id, null, 'id check');
deepEqual(tf1.dom().classList.contains(tf1.prfxResponsive), true,
'Responsive CSS class');
equal(tf1.filtersRowIndex, 1, 'Filters row index');
deepEqual(tf1.getCellsNb(), 5, 'filters type collection length');
});
module('Table 2: DOM tests');
test('Filters row', function() {
equal(
tf1.dom().rows[1].className,
'fltrow',
'Filters row CSS class name'
);
equal(tf1.getFilterElement(0).nodeName, 'INPUT', 'Filter DOM element');
deepEqual(
tf1.dom().scrollWidth > tf1.dom().clientWidth,
true,
'Horizontal scrollbar is displayed'
);
});
test('Filter button', function(){
notEqual(btn, null, 'Button exists');
deepEqual(btn.nodeName, 'INPUT', 'Expected element');
});
test('Filter button click event', function(){
tf1.setFilterValue(4, '>30');
btn.click();
deepEqual(tf1.getValidRows().length, 2, 'Filter button event result');
});
test('Cannot init if initialised', function() {
// setup
var importFile = tf1.import;
var hit = 0;
tf1.import = function() { hit++; };
tf1.initialized = true;
// act
tf1.init();
// assert
deepEqual(hit, 0, 'import not called');
tf1.import = importFile;
});
test('Disable icons', function() {
// setup
tf1.destroy();
tf1 = new TableFilter(
document.querySelector('.test'),
{
base_path: '../dist/tablefilter/',
btn: true,
enable_icons: false
}
);
// act
tf1.init();
// assert
deepEqual(
document.querySelector('.' + tf1.btnCssClass).value,
'Go',
'Filter button text'
);
});
test('Defaults to flt_css_class if no filter class defined', function() {
// setup
tf1.destroy();
tf1 = new TableFilter(
document.querySelector('.test'),
{
base_path: '../dist/tablefilter/',
btn: true
}
);
// act
tf1.fltSmallCssClass = null;
tf1.init();
// assert
deepEqual(
tf1.getFilterElement(4).className,
'flt',
'Default css class for filter'
);
});
module('Tear-down');
test('can destroy TableFilter DOM elements', function() {
tf.destroy();
tf1.destroy();
deepEqual(tf.isInitialized(), false, 'Instance no longer initialised');
deepEqual(tf1.getFilterElement(0), null, 'Filter 0 removed');
});
module('Edge cases');
test('throws when no working DOM element', function() {
throws(
function() { new TableFilter('xyz'); },
Error,
'Throws Error when no DOM table'
);
});
test('Can instantiate with wrong refRow', function() {
var tf2 = new TableFilter('demo', -9);
tf2.init();
deepEqual(tf2.nbCells, 0, 'Expected number of columns');
});
})(window, TableFilter);