2016-03-20 12:07:52 +01:00
|
|
|
|
|
|
|
var tf = new TableFilter('demo', {
|
|
|
|
base_path: '../dist/tablefilter/',
|
|
|
|
state: true
|
|
|
|
});
|
|
|
|
tf.init();
|
|
|
|
var state = tf.feature('state');
|
|
|
|
module('Sanity checks');
|
|
|
|
test('State instance', function() {
|
|
|
|
deepEqual(tf.state, true, 'State is enabled');
|
|
|
|
deepEqual(typeof state, 'object', 'State is instantiated');
|
|
|
|
deepEqual(state.initialized, true, 'State is initialized');
|
|
|
|
deepEqual(state.enableHash, true, 'Hash is enabled by default');
|
|
|
|
deepEqual(state.persistFilters, true, 'Filters are persisted by default');
|
|
|
|
deepEqual(state.persistPageNumber, false, 'Page number not persisted');
|
|
|
|
deepEqual(state.persistPageLength, false, 'Page length not persisted');
|
|
|
|
deepEqual(typeof state.state, 'object', 'State field is an object');
|
|
|
|
});
|
|
|
|
|
2017-03-01 12:09:20 +01:00
|
|
|
test('Should not initialize if already initialized', function() {
|
|
|
|
// setup
|
|
|
|
var hit = 0;
|
|
|
|
state.initialized = true;
|
|
|
|
var initialHashInit = state.hash.init;
|
|
|
|
state.hash.init = function() {
|
|
|
|
hit++;
|
|
|
|
};
|
|
|
|
|
|
|
|
// act
|
|
|
|
state.init();
|
|
|
|
|
|
|
|
// assert
|
|
|
|
deepEqual(hit, 0, 'hash init not called');
|
|
|
|
|
|
|
|
state.hash.init = initialHashInit;
|
|
|
|
});
|
|
|
|
|
2016-03-20 12:07:52 +01:00
|
|
|
module('Behaviour');
|
2018-01-08 11:38:55 +01:00
|
|
|
test('Can update filters state', function() {
|
2016-03-20 12:07:52 +01:00
|
|
|
// setup
|
|
|
|
state.state = {};
|
|
|
|
|
|
|
|
// act
|
|
|
|
tf.setFilterValue(1, 'Adelaide');
|
|
|
|
tf.filter();
|
|
|
|
|
|
|
|
// assert
|
|
|
|
deepEqual(state.state.col_1, { 'flt': 'Adelaide' },
|
|
|
|
'State object updated');
|
|
|
|
});
|
|
|
|
|
2017-12-27 13:13:44 +01:00
|
|
|
test('Can update state when previously field value is set empty', function() {
|
|
|
|
// setup
|
|
|
|
state.state = {};
|
|
|
|
tf.setFilterValue(0, 'Sydney');
|
|
|
|
tf.filter();
|
|
|
|
|
|
|
|
// act
|
|
|
|
tf.setFilterValue(0, '');
|
|
|
|
tf.filter();
|
|
|
|
|
|
|
|
// assert
|
|
|
|
deepEqual(state.state.col_0, { 'flt': undefined },
|
|
|
|
'State object updated');
|
|
|
|
});
|
|
|
|
|
2016-03-20 12:07:52 +01:00
|
|
|
test('Can update on clear filters', function() {
|
|
|
|
// setup
|
|
|
|
state.state = {};
|
|
|
|
|
|
|
|
// act
|
|
|
|
tf.clearFilters();
|
|
|
|
|
|
|
|
// assert
|
|
|
|
deepEqual(state.state.col_1, undefined, 'State object updated');
|
|
|
|
});
|
|
|
|
|
2017-12-27 13:13:44 +01:00
|
|
|
test('Can update page number', function() {
|
|
|
|
// setup
|
|
|
|
state.state = {};
|
|
|
|
state.pageNb = 2;
|
|
|
|
state.persistPageNumber = true;
|
|
|
|
|
|
|
|
// act
|
|
|
|
tf.filter();
|
|
|
|
state.persistPageNumber = false;
|
|
|
|
|
|
|
|
// assert
|
|
|
|
deepEqual(state.state.page, 2, 'Page number updated');
|
|
|
|
});
|
|
|
|
|
|
|
|
test('Can update page number when null', function() {
|
|
|
|
// setup
|
|
|
|
state.state = {};
|
|
|
|
state.pageNb = null;
|
|
|
|
state.persistPageNumber = true;
|
|
|
|
|
|
|
|
// act
|
|
|
|
tf.filter();
|
|
|
|
state.persistPageNumber = false;
|
|
|
|
|
|
|
|
// assert
|
|
|
|
deepEqual(state.state.page, undefined, 'Page number updated');
|
|
|
|
});
|
|
|
|
|
|
|
|
test('Can update page length', function() {
|
|
|
|
// setup
|
|
|
|
state.persistPageLength = true;
|
|
|
|
state.state = {};
|
|
|
|
state.pageLength = 10;
|
|
|
|
|
|
|
|
// act
|
|
|
|
tf.filter();
|
|
|
|
state.persistPageLength = false;
|
|
|
|
|
|
|
|
// assert
|
|
|
|
deepEqual(state.state.page_length, 10, 'Page length updated');
|
|
|
|
});
|
|
|
|
|
|
|
|
test('Can update page length when null', function() {
|
|
|
|
// setup
|
|
|
|
state.persistPageLength = true;
|
|
|
|
state.state = {};
|
|
|
|
state.pageLength = null;
|
|
|
|
|
|
|
|
// act
|
|
|
|
tf.filter();
|
|
|
|
state.persistPageLength = false;
|
|
|
|
|
|
|
|
// assert
|
|
|
|
deepEqual(state.state.page_length, undefined, 'Page length updated');
|
|
|
|
});
|
|
|
|
|
|
|
|
test('Can update sort', function() {
|
|
|
|
// setup
|
|
|
|
state.persistSort = true;
|
|
|
|
state.state = {};
|
|
|
|
|
|
|
|
// act
|
|
|
|
tf.emitter.emit('column-sorted', tf, 1, true);
|
|
|
|
state.persistSort = false;
|
|
|
|
|
|
|
|
// assert
|
|
|
|
deepEqual(state.state.col_1,
|
|
|
|
{ 'sort': { 'descending': true } }, 'Sort updated');
|
|
|
|
});
|
|
|
|
|
|
|
|
test('Can update sort when previously set', function() {
|
|
|
|
// setup
|
|
|
|
state.persistSort = true;
|
|
|
|
state.state = { col_1: { 'sort': { 'descending': true } } };
|
|
|
|
|
|
|
|
// act
|
|
|
|
tf.emitter.emit('column-sorted', tf, 0, false);
|
|
|
|
state.persistSort = false;
|
|
|
|
|
|
|
|
// assert
|
|
|
|
deepEqual(state.state.col_0,
|
|
|
|
{ 'sort': { 'descending': false } }, 'Sort updated');
|
|
|
|
deepEqual(state.state.col_1.sort, undefined, 'Sort updated');
|
|
|
|
});
|
|
|
|
|
|
|
|
test('Can update columns visibility', function() {
|
|
|
|
// setup
|
|
|
|
state.persistColsVisibility = true;
|
|
|
|
state.state = {};
|
|
|
|
|
|
|
|
// act
|
|
|
|
tf.emitter.emit('column-shown', tf, {}, 1, [0, 2]);
|
|
|
|
state.persistColsVisibility = false;
|
|
|
|
|
|
|
|
// assert
|
|
|
|
deepEqual(state.state.col_0.hidden, true, 'Column 0 visibility updated');
|
|
|
|
deepEqual(state.state.col_2.hidden, true, 'Column 2 visibility updated');
|
|
|
|
});
|
|
|
|
|
|
|
|
test('Can update columns visibility when already set', function() {
|
|
|
|
// setup
|
|
|
|
state.persistColsVisibility = true;
|
|
|
|
state.state = {
|
|
|
|
col_0: { hidden: true },
|
|
|
|
col_2: { hidden: true }
|
|
|
|
};
|
|
|
|
|
|
|
|
// act
|
|
|
|
tf.emitter.emit('column-shown', tf, {}, 1, []);
|
|
|
|
state.persistColsVisibility = false;
|
|
|
|
|
|
|
|
// assert
|
|
|
|
deepEqual(state.state.col_0.hidden, undefined,
|
|
|
|
'Column 0 visibility updated');
|
|
|
|
deepEqual(state.state.col_2.hidden, undefined,
|
|
|
|
'Column 2 visibility updated');
|
|
|
|
});
|
|
|
|
|
|
|
|
test('Can update filters visibility', function() {
|
|
|
|
// setup
|
|
|
|
state.persistFiltersVisibility = true;
|
|
|
|
state.state = {};
|
|
|
|
|
|
|
|
// act
|
|
|
|
tf.emitter.emit('filters-toggled', tf, {}, false);
|
|
|
|
state.persistFiltersVisibility = false;
|
|
|
|
|
|
|
|
// assert
|
|
|
|
deepEqual(state.state.filters_visibility, false,
|
|
|
|
'Filters visibility updated');
|
|
|
|
});
|
|
|
|
|
|
|
|
test('Can update filters visibility when null', function() {
|
|
|
|
// setup
|
|
|
|
state.persistFiltersVisibility = true;
|
|
|
|
state.state = {};
|
|
|
|
state.filtersVisibility = null;
|
|
|
|
|
|
|
|
// act
|
|
|
|
state.update();
|
|
|
|
state.persistFiltersVisibility = false;
|
|
|
|
|
|
|
|
// assert
|
|
|
|
deepEqual(state.state.filters_visibility, undefined,
|
|
|
|
'Filters visibility updated');
|
|
|
|
});
|
|
|
|
|
2016-03-20 12:07:52 +01:00
|
|
|
test('Can sync state', function() {
|
|
|
|
// setup
|
|
|
|
state.state = {};
|
|
|
|
state.state.col_2 = { 'flt': '>1500' };
|
|
|
|
|
|
|
|
// act
|
|
|
|
state.sync();
|
|
|
|
|
|
|
|
// assert
|
|
|
|
deepEqual(tf.getValidRows(), [6, 7, 8], 'Table filters are synced');
|
|
|
|
});
|
|
|
|
|
|
|
|
test('Can override state', function() {
|
|
|
|
// setup
|
2018-01-08 11:38:55 +01:00
|
|
|
var hit = 0;
|
|
|
|
var initialEmit = state.emitter.emit;
|
|
|
|
var args = null;
|
|
|
|
state.emitter.emit = function() {
|
|
|
|
args = arguments;
|
|
|
|
hit++;
|
|
|
|
};
|
2016-03-20 12:07:52 +01:00
|
|
|
state.state = {};
|
|
|
|
|
|
|
|
// act
|
|
|
|
state.override({ 'col_1': { 'flt': 'Ade' } });
|
|
|
|
|
|
|
|
// assert
|
|
|
|
deepEqual(state.state, { 'col_1': { 'flt': 'Ade' } },
|
|
|
|
'State field overriden');
|
2018-01-08 11:38:55 +01:00
|
|
|
deepEqual(hit, 1, 'event emitted');
|
|
|
|
deepEqual(args[0], 'state-changed', 'event name');
|
|
|
|
deepEqual(args[1], tf, 'tf parameter');
|
|
|
|
deepEqual(args[2], state.state, 'state parameter');
|
|
|
|
|
|
|
|
state.emitter.emit = initialEmit;
|
2016-03-20 12:07:52 +01:00
|
|
|
});
|
|
|
|
|
2016-04-08 17:43:55 +02:00
|
|
|
test('Can override and sync state', function() {
|
|
|
|
// setup
|
|
|
|
state.state = {};
|
|
|
|
|
|
|
|
// act
|
2016-04-08 18:19:52 +02:00
|
|
|
state.overrideAndSync({ 'col_2': { 'flt': '1412' } });
|
2016-04-08 17:43:55 +02:00
|
|
|
|
|
|
|
// assert
|
2016-04-08 18:19:52 +02:00
|
|
|
deepEqual(state.state, { 'col_2': { 'flt': '1412' } },
|
2016-04-08 17:43:55 +02:00
|
|
|
'State field overriden');
|
|
|
|
deepEqual(tf.getValidRows(), [2], 'Table filters are synced');
|
|
|
|
});
|
|
|
|
|
2016-03-20 12:07:52 +01:00
|
|
|
test('Can update page number', function() {
|
|
|
|
// setup
|
|
|
|
state.persistPageNumber = true;
|
|
|
|
state.state = {};
|
|
|
|
|
|
|
|
// act
|
|
|
|
state.updatePage('2');
|
2016-04-13 18:37:56 +02:00
|
|
|
state.persistPageNumber = false;
|
2016-03-20 12:07:52 +01:00
|
|
|
|
|
|
|
// assert
|
|
|
|
deepEqual(state.state.page, '2', 'Page number updated');
|
|
|
|
});
|
|
|
|
|
|
|
|
test('Can update page length', function() {
|
|
|
|
// setup
|
|
|
|
state.persistPageLength = true;
|
|
|
|
state.state = {};
|
|
|
|
|
|
|
|
// act
|
|
|
|
state.updatePageLength('10');
|
2016-04-13 18:37:56 +02:00
|
|
|
state.persistPageLength = false;
|
2016-03-20 12:07:52 +01:00
|
|
|
|
|
|
|
// assert
|
|
|
|
deepEqual(state.state.page_length, '10', 'Page length updated');
|
2016-04-13 18:37:56 +02:00
|
|
|
});
|
2016-03-20 12:07:52 +01:00
|
|
|
|
2016-04-13 18:37:56 +02:00
|
|
|
test('Can update sort', function() {
|
|
|
|
// setup
|
|
|
|
state.persistSort = true;
|
|
|
|
state.state = {};
|
|
|
|
|
|
|
|
// act
|
|
|
|
state.updateSort(1, true);
|
|
|
|
state.persistSort = false;
|
|
|
|
|
|
|
|
// assert
|
|
|
|
deepEqual(state.state.col_1,
|
|
|
|
{ 'sort': { 'descending': true } }, 'Sort updated');
|
2016-03-20 12:07:52 +01:00
|
|
|
});
|
|
|
|
|
2016-04-20 16:03:35 +02:00
|
|
|
test('Can update columns visibility', function() {
|
|
|
|
// setup
|
|
|
|
state.persistColsVisibility = true;
|
|
|
|
state.state = {};
|
|
|
|
|
|
|
|
// act
|
|
|
|
state.updateColsVisibility([0, 2]);
|
|
|
|
state.persistColsVisibility = false;
|
|
|
|
|
|
|
|
// assert
|
|
|
|
deepEqual(state.state.col_0.hidden, true, 'Column 0 visibility updated');
|
|
|
|
deepEqual(state.state.col_2.hidden, true, 'Column 2 visibility updated');
|
|
|
|
});
|
|
|
|
|
2016-04-24 18:47:01 +02:00
|
|
|
test('Can update filters visibility', function() {
|
|
|
|
// setup
|
|
|
|
state.persistFiltersVisibility = true;
|
|
|
|
state.state = {};
|
|
|
|
|
|
|
|
// act
|
|
|
|
state.updateFiltersVisibility(false);
|
|
|
|
state.persistFiltersVisibility = false;
|
|
|
|
|
|
|
|
// assert
|
|
|
|
deepEqual(state.state.filters_visibility, false,
|
|
|
|
'Filters visibility updated');
|
|
|
|
});
|
|
|
|
|
2018-01-08 11:38:55 +01:00
|
|
|
test('sync filters can clear filters before applying state', function() {
|
|
|
|
// setup
|
|
|
|
state.state = {'col_0': { 'flt': 'Ade' }};
|
|
|
|
tf.setFilterValue(1, 'Can');
|
|
|
|
tf.setFilterValue(2, '1412');
|
|
|
|
|
|
|
|
// act
|
|
|
|
state._syncFilters();
|
|
|
|
|
|
|
|
// assert
|
|
|
|
deepEqual(tf.getFilterValue(1), '', 'filter 1 cleared');
|
|
|
|
deepEqual(tf.getFilterValue(2), '', 'filter 2 cleared');
|
|
|
|
deepEqual(tf.getFilterValue(0), 'Ade', 'filter 0 state value applied');
|
|
|
|
deepEqual(tf.getValidRows(), [6, 7, 8], 'Filtered rows');
|
|
|
|
});
|
|
|
|
|
2018-01-07 12:48:35 +01:00
|
|
|
module('Tear-down');
|
|
|
|
test('Can destroy TF', function() {
|
|
|
|
// setup
|
|
|
|
location.hash = null;
|
|
|
|
|
|
|
|
// act
|
|
|
|
tf.destroy();
|
|
|
|
|
|
|
|
// assert
|
|
|
|
deepEqual(state.initialized, false, 'State not initialized');
|
|
|
|
});
|