UNPKG

6.3 kBJavaScriptView Raw
1
2var id = function (id){ return document.getElementById(id); };
3var tf = new TableFilter('demo', {
4 base_path: '../dist/tablefilter/',
5 col_2: 'multiple',
6 col_3: 'select'
7});
8tf.init();
9
10var dropdown = tf.feature('dropdown');
11module('Sanity checks');
12test('Drop-down component', function() {
13 deepEqual(typeof dropdown, 'object', 'DropDown instanciated');
14 deepEqual(dropdown.opts instanceof Array, true, 'Type of opts property');
15});
16
17module('UI elements');
18test('Drop-down UI elements', function() {
19 var flt1 = id(tf.fltIds[3]);
20 var flt2 = id(tf.fltIds[2]);
21 notEqual(flt1, null, 'DropDown SELECT element exists');
22 notEqual(flt2, null, 'DropDown SELECT element exists');
23 deepEqual(flt2.hasAttribute('multiple'), true, 'Multiple select exists');
24});
25
26module('Behaviour');
27test('Can filter on drop-down change', function() {
28 var flt1 = id(tf.fltIds[3]);
29
30 var evObj = document.createEvent('HTMLEvents');
31 evObj.initEvent('change', true, true);
32 tf.setFilterValue(3, '1.1');
33 flt1.dispatchEvent(evObj);
34
35 deepEqual(tf.getValidRows().length, 1, 'Table filtered');
36 deepEqual(tf.getFilteredData()[0][1][3], '1.1', 'Matched value');
37});
38
39test('Can refresh all drop-down filters', function() {
40 //setup
41 tf.clearFilters();
42 var build = dropdown.build;
43 var hit = 0;
44 dropdown.build = function() { hit++; };
45
46 //act
47 dropdown.refreshAll();
48
49 //assert
50 deepEqual(hit, 2, 'build method called');
51
52 dropdown.build = build;
53});
54
55test('Can select options', function() {
56 tf.clearFilters();
57 var flt1 = id(tf.fltIds[2]);
58
59 dropdown.selectOptions(2, ['872', '286']);
60
61 deepEqual(flt1.options[5].selected, true, 'Option selected');
62 deepEqual(flt1.options[6].selected, true, 'Option selected');
63});
64
65test('Can get selected values', function() {
66 //setup
67 var values = ['286', '872'];
68 tf.clearFilters();
69 tf.setFilterValue(2, values);
70
71 //act
72 var result = dropdown.getValues(2);
73
74 //assert
75 deepEqual(values, result);
76});
77test('Can return values when no selected options', function() {
78 //setup
79 tf.clearFilters();
80
81 //act
82 var result = dropdown.getValues(2);
83
84 //assert
85 deepEqual([], result);
86});
87
88// Issue 113, addressing option sorting for numeric values
89module('Options sorting');
90test('Can disable options sorting globally', function() {
91 // setup
92 tf.clearFilters();
93 tf.destroy();
94 tf = new TableFilter('demo', {
95 base_path: '../dist/tablefilter/',
96 col_1: 'select',
97 col_2: 'multiple',
98 col_3: 'select',
99 col_4: 'multiple',
100 col_types: ['string', 'string', 'number', 'number', 'number'],
101 sort_select: false
102 });
103
104 // act
105 tf.init();
106
107 var flt1 = tf.getFilterElement(1);
108 var flt2 = tf.getFilterElement(2);
109 var flt3 = tf.getFilterElement(3);
110 var flt4 = tf.getFilterElement(4);
111
112 // assert
113 deepEqual(flt1.options[1].value, 'Adelaide',
114 'First option value for column 1');
115 deepEqual(flt1.options[6].value, 'Alice Springs',
116 'Last option value for column 1');
117 deepEqual(flt2.options[1].value, '1412', 'First option value for column 2');
118 deepEqual(flt2.options[7].value, '2045', 'Last option value for column 2');
119 deepEqual(flt3.options[1].value, '1.4', 'First option value for column 3');
120 deepEqual(flt3.options[7].value, '2.15', 'Last option value for column 3');
121 deepEqual(flt4.options[1].value, '25.3', 'First option value for column 4');
122 deepEqual(flt4.options[7].value, '40', 'Last option value for column 4');
123});
124
125test('Can enable options sorting on a column basis', function() {
126 // setup
127 tf.clearFilters();
128 tf.destroy();
129 tf = new TableFilter('demo', {
130 base_path: '../dist/tablefilter/',
131 col_1: 'select',
132 col_2: 'multiple',
133 col_3: 'select',
134 col_4: 'multiple',
135 col_types: ['string', 'string', 'number', 'number', 'number'],
136 sort_select: [3, 4]
137 });
138
139 // act
140 tf.init();
141
142 var flt1 = tf.getFilterElement(1);
143 var flt2 = tf.getFilterElement(2);
144 var flt3 = tf.getFilterElement(3);
145 var flt4 = tf.getFilterElement(4);
146
147 // assert
148 deepEqual(flt1.options[1].value, 'Adelaide',
149 'First option value for column 1');
150 deepEqual(flt1.options[6].value, 'Alice Springs',
151 'Last option value for column 1');
152 deepEqual(flt2.options[1].value, '1412', 'First option value for column 2');
153 deepEqual(flt2.options[7].value, '2045', 'Last option value for column 2');
154 deepEqual(flt3.options[1].value, '.6', 'First option value for column 3');
155 deepEqual(flt3.options[7].value, '3.1', 'Last option value for column 3');
156 deepEqual(flt4.options[1].value, '4.3', 'First option value for column 4');
157 deepEqual(flt4.options[7].value, '40', 'Last option value for column 4');
158});
159
160test('Can sort numeric options in asc and desc manner', function() {
161 tf.clearFilters();
162 tf.destroy();
163 tf = new TableFilter('demo', {
164 base_path: '../dist/tablefilter/',
165 col_2: 'multiple',
166 col_3: 'select',
167 col_4: 'multiple',
168 col_types: ['string', 'string', 'number', 'number', 'number'],
169 sort_num_asc: [2, 3],
170 sort_num_desc: [4]
171 });
172 tf.init();
173
174 var flt2 = id(tf.fltIds[2]);
175 var flt3 = id(tf.fltIds[3]);
176 var flt4 = id(tf.fltIds[4]);
177
178 deepEqual(flt2.options[1].value, '286', 'First option value for column 2');
179 deepEqual(flt2.options[7].value, '2781', 'Last option value for column 2');
180 deepEqual(flt3.options[1].value, '.6', 'First option value for column 3');
181 deepEqual(flt3.options[7].value, '3.1', 'Last option value for column 3');
182 deepEqual(flt4.options[1].value, '40', 'First option value for column 4');
183 deepEqual(flt4.options[7].value, '4.3', 'Last option value for column 4');
184});
185
186test('TableFilter removed', function() {
187 tf.destroy();
188 deepEqual(id(tf.fltIds[3]), null, 'Filter is removed');
189 deepEqual(
190 tf.feature('dropdown').initialized,
191 false,
192 'Drop-down not initialised'
193 );
194});