UNPKG

9.44 kBJavaScriptView Raw
1
2var tf = new TableFilter('demo', {
3 base_path: '../dist/tablefilter/',
4 state: true
5});
6tf.init();
7var state = tf.feature('state');
8module('Sanity checks');
9test('State instance', function() {
10 deepEqual(tf.state, true, 'State is enabled');
11 deepEqual(typeof state, 'object', 'State is instantiated');
12 deepEqual(state.initialized, true, 'State is initialized');
13 deepEqual(state.enableHash, true, 'Hash is enabled by default');
14 deepEqual(state.persistFilters, true, 'Filters are persisted by default');
15 deepEqual(state.persistPageNumber, false, 'Page number not persisted');
16 deepEqual(state.persistPageLength, false, 'Page length not persisted');
17 deepEqual(typeof state.state, 'object', 'State field is an object');
18});
19
20test('Should not initialize if already initialized', function() {
21 // setup
22 var hit = 0;
23 state.initialized = true;
24 var initialHashInit = state.hash.init;
25 state.hash.init = function() {
26 hit++;
27 };
28
29 // act
30 state.init();
31
32 // assert
33 deepEqual(hit, 0, 'hash init not called');
34
35 state.hash.init = initialHashInit;
36});
37
38module('Behaviour');
39test('Can update filters state', function() {
40 // setup
41 state.state = {};
42
43 // act
44 tf.setFilterValue(1, 'Adelaide');
45 tf.filter();
46
47 // assert
48 deepEqual(state.state.col_1, { 'flt': 'Adelaide' },
49 'State object updated');
50});
51
52test('Can update state when previously field value is set empty', function() {
53 // setup
54 state.state = {};
55 tf.setFilterValue(0, 'Sydney');
56 tf.filter();
57
58 // act
59 tf.setFilterValue(0, '');
60 tf.filter();
61
62 // assert
63 deepEqual(state.state.col_0, { 'flt': undefined },
64 'State object updated');
65});
66
67test('Can update on clear filters', function() {
68 // setup
69 state.state = {};
70
71 // act
72 tf.clearFilters();
73
74 // assert
75 deepEqual(state.state.col_1, undefined, 'State object updated');
76});
77
78test('Can update page number', function() {
79 // setup
80 state.state = {};
81 state.pageNb = 2;
82 state.persistPageNumber = true;
83
84 // act
85 tf.filter();
86 state.persistPageNumber = false;
87
88 // assert
89 deepEqual(state.state.page, 2, 'Page number updated');
90});
91
92test('Can update page number when null', function() {
93 // setup
94 state.state = {};
95 state.pageNb = null;
96 state.persistPageNumber = true;
97
98 // act
99 tf.filter();
100 state.persistPageNumber = false;
101
102 // assert
103 deepEqual(state.state.page, undefined, 'Page number updated');
104});
105
106test('Can update page length', function() {
107 // setup
108 state.persistPageLength = true;
109 state.state = {};
110 state.pageLength = 10;
111
112 // act
113 tf.filter();
114 state.persistPageLength = false;
115
116 // assert
117 deepEqual(state.state.page_length, 10, 'Page length updated');
118});
119
120test('Can update page length when null', function() {
121 // setup
122 state.persistPageLength = true;
123 state.state = {};
124 state.pageLength = null;
125
126 // act
127 tf.filter();
128 state.persistPageLength = false;
129
130 // assert
131 deepEqual(state.state.page_length, undefined, 'Page length updated');
132});
133
134test('Can update sort', function() {
135 // setup
136 state.persistSort = true;
137 state.state = {};
138
139 // act
140 tf.emitter.emit('column-sorted', tf, 1, true);
141 state.persistSort = false;
142
143 // assert
144 deepEqual(state.state.col_1,
145 { 'sort': { 'descending': true } }, 'Sort updated');
146});
147
148test('Can update sort when previously set', function() {
149 // setup
150 state.persistSort = true;
151 state.state = { col_1: { 'sort': { 'descending': true } } };
152
153 // act
154 tf.emitter.emit('column-sorted', tf, 0, false);
155 state.persistSort = false;
156
157 // assert
158 deepEqual(state.state.col_0,
159 { 'sort': { 'descending': false } }, 'Sort updated');
160 deepEqual(state.state.col_1.sort, undefined, 'Sort updated');
161});
162
163test('Can update columns visibility', function() {
164 // setup
165 state.persistColsVisibility = true;
166 state.state = {};
167
168 // act
169 tf.emitter.emit('column-shown', tf, {}, 1, [0, 2]);
170 state.persistColsVisibility = false;
171
172 // assert
173 deepEqual(state.state.col_0.hidden, true, 'Column 0 visibility updated');
174 deepEqual(state.state.col_2.hidden, true, 'Column 2 visibility updated');
175});
176
177test('Can update columns visibility when already set', function() {
178 // setup
179 state.persistColsVisibility = true;
180 state.state = {
181 col_0: { hidden: true },
182 col_2: { hidden: true }
183 };
184
185 // act
186 tf.emitter.emit('column-shown', tf, {}, 1, []);
187 state.persistColsVisibility = false;
188
189 // assert
190 deepEqual(state.state.col_0.hidden, undefined,
191 'Column 0 visibility updated');
192 deepEqual(state.state.col_2.hidden, undefined,
193 'Column 2 visibility updated');
194});
195
196test('Can update filters visibility', function() {
197 // setup
198 state.persistFiltersVisibility = true;
199 state.state = {};
200
201 // act
202 tf.emitter.emit('filters-toggled', tf, {}, false);
203 state.persistFiltersVisibility = false;
204
205 // assert
206 deepEqual(state.state.filters_visibility, false,
207 'Filters visibility updated');
208});
209
210test('Can update filters visibility when null', function() {
211 // setup
212 state.persistFiltersVisibility = true;
213 state.state = {};
214 state.filtersVisibility = null;
215
216 // act
217 state.update();
218 state.persistFiltersVisibility = false;
219
220 // assert
221 deepEqual(state.state.filters_visibility, undefined,
222 'Filters visibility updated');
223});
224
225test('Can sync state', function() {
226 // setup
227 state.state = {};
228 state.state.col_2 = { 'flt': '>1500' };
229
230 // act
231 state.sync();
232
233 // assert
234 deepEqual(tf.getValidRows(), [6, 7, 8], 'Table filters are synced');
235});
236
237test('Can override state', function() {
238 // setup
239 var hit = 0;
240 var initialEmit = state.emitter.emit;
241 var args = null;
242 state.emitter.emit = function() {
243 args = arguments;
244 hit++;
245 };
246 state.state = {};
247
248 // act
249 state.override({ 'col_1': { 'flt': 'Ade' } });
250
251 // assert
252 deepEqual(state.state, { 'col_1': { 'flt': 'Ade' } },
253 'State field overriden');
254 deepEqual(hit, 1, 'event emitted');
255 deepEqual(args[0], 'state-changed', 'event name');
256 deepEqual(args[1], tf, 'tf parameter');
257 deepEqual(args[2], state.state, 'state parameter');
258
259 state.emitter.emit = initialEmit;
260});
261
262test('Can override and sync state', function() {
263 // setup
264 state.state = {};
265
266 // act
267 state.overrideAndSync({ 'col_2': { 'flt': '1412' } });
268
269 // assert
270 deepEqual(state.state, { 'col_2': { 'flt': '1412' } },
271 'State field overriden');
272 deepEqual(tf.getValidRows(), [2], 'Table filters are synced');
273});
274
275test('Can update page number', function() {
276 // setup
277 state.persistPageNumber = true;
278 state.state = {};
279
280 // act
281 state.updatePage('2');
282 state.persistPageNumber = false;
283
284 // assert
285 deepEqual(state.state.page, '2', 'Page number updated');
286});
287
288test('Can update page length', function() {
289 // setup
290 state.persistPageLength = true;
291 state.state = {};
292
293 // act
294 state.updatePageLength('10');
295 state.persistPageLength = false;
296
297 // assert
298 deepEqual(state.state.page_length, '10', 'Page length updated');
299});
300
301test('Can update sort', function() {
302 // setup
303 state.persistSort = true;
304 state.state = {};
305
306 // act
307 state.updateSort(1, true);
308 state.persistSort = false;
309
310 // assert
311 deepEqual(state.state.col_1,
312 { 'sort': { 'descending': true } }, 'Sort updated');
313});
314
315test('Can update columns visibility', function() {
316 // setup
317 state.persistColsVisibility = true;
318 state.state = {};
319
320 // act
321 state.updateColsVisibility([0, 2]);
322 state.persistColsVisibility = false;
323
324 // assert
325 deepEqual(state.state.col_0.hidden, true, 'Column 0 visibility updated');
326 deepEqual(state.state.col_2.hidden, true, 'Column 2 visibility updated');
327});
328
329test('Can update filters visibility', function() {
330 // setup
331 state.persistFiltersVisibility = true;
332 state.state = {};
333
334 // act
335 state.updateFiltersVisibility(false);
336 state.persistFiltersVisibility = false;
337
338 // assert
339 deepEqual(state.state.filters_visibility, false,
340 'Filters visibility updated');
341});
342
343test('sync filters can clear filters before applying state', function() {
344 // setup
345 state.state = {'col_0': { 'flt': 'Ade' }};
346 tf.setFilterValue(1, 'Can');
347 tf.setFilterValue(2, '1412');
348
349 // act
350 state._syncFilters();
351
352 // assert
353 deepEqual(tf.getFilterValue(1), '', 'filter 1 cleared');
354 deepEqual(tf.getFilterValue(2), '', 'filter 2 cleared');
355 deepEqual(tf.getFilterValue(0), 'Ade', 'filter 0 state value applied');
356 deepEqual(tf.getValidRows(), [6, 7, 8], 'Filtered rows');
357});
358
359module('Tear-down');
360test('Can destroy TF', function() {
361 // setup
362 location.hash = null;
363
364 // act
365 tf.destroy();
366
367 // assert
368 deepEqual(state.initialized, false, 'State not initialized');
369});