UNPKG

6.19 kBJavaScriptView Raw
1$(function(){
2 var $b = $('#builder');
3
4 QUnit.module('plugins', {
5 afterEach: function() {
6 $b.queryBuilder('destroy');
7 }
8 });
9
10 /**
11 * Test plugins loading
12 */
13 QUnit.test('Plugins loading', function(assert) {
14 assert.ok(QueryBuilder.prototype.getSQL !== undefined, 'Should load SQL plugin automatically');
15
16 $b.queryBuilder({
17 filters: basic_filters,
18 plugins: ['bt-tooltip-errors', 'filter-description']
19 });
20
21 assert.deepEqual(
22 $b[0].queryBuilder.plugins['bt-tooltip-errors'],
23 QueryBuilder.plugins['bt-tooltip-errors'].def,
24 'Should load "bt-tooltip-errors" with default config'
25 );
26
27 assert.deepEqual(
28 $b[0].queryBuilder.plugins['filter-description'],
29 QueryBuilder.plugins['filter-description'].def,
30 'Should load "filter-description" with default config'
31 );
32
33 $b.queryBuilder('destroy');
34
35 $b.queryBuilder({
36 filters: basic_filters,
37 plugins: {
38 'bt-tooltip-errors': null,
39 'filter-description': { icon: 'fa fa-info' }
40 }
41 });
42
43 assert.deepEqual(
44 $b[0].queryBuilder.plugins['bt-tooltip-errors'],
45 QueryBuilder.plugins['bt-tooltip-errors'].def,
46 'Should load "bt-tooltip-errors" with default config'
47 );
48
49 assert.deepEqual(
50 $b[0].queryBuilder.plugins['filter-description'],
51 { icon: 'fa fa-info', mode: 'popover' },
52 'Should load "filter-description" with custom config'
53 );
54
55 $b.queryBuilder('destroy');
56
57 assert.throws(
58 function(){
59 $b.queryBuilder({
60 filters: basic_filters,
61 plugins: ['__unknown__']
62 });
63 },
64 /Unable to find plugin "__unknown__"/,
65 'Should throw error on unknown plugin'
66 );
67 });
68
69 /**
70 * Test unique-filter
71 */
72 QUnit.test('unique-filter', function(assert) {
73 var unique_filters = $.extend(true, [], basic_filters);
74 unique_filters[3].unique = 'group';
75 unique_filters[4].unique = true;
76
77 $b.queryBuilder({
78 plugins: ['unique-filter'],
79 filters: unique_filters,
80 rules: basic_rules
81 });
82
83 assert.ok(
84 $('select[name=builder_rule_0_filter] option[value=id]').is(':disabled') &&
85 $('select[name=builder_rule_1_filter] option[value=id]').is(':disabled') &&
86 $('select[name=builder_rule_2_filter] option[value=id]').is(':disabled'),
87 '"Identifier" filter should be disabled everywhere'
88 );
89
90 assert.ok(
91 $('select[name=builder_rule_1_filter] option[value=price]').is(':disabled') &&
92 !$('select[name=builder_rule_2_filter] option[value=price]').is(':disabled') &&
93 !$('select[name=builder_rule_3_filter] option[value=price]').is(':disabled'),
94 '"Price" filter should be disabled in his group only'
95 );
96 });
97
98 /**
99 * Test inversion
100 */
101 QUnit.test('invert', function(assert) {
102 $b.queryBuilder({
103 plugins: ['invert'],
104 filters: basic_filters,
105 rules: basic_rules
106 });
107
108 $b.queryBuilder('invert');
109
110 assert.rulesMatch(
111 $b.queryBuilder('getRules'),
112 {
113 condition: 'OR',
114 rules: [{
115 id: 'price',
116 field: 'price',
117 operator: 'greater_or_equal',
118 value: 10.25
119 }, {
120 id: 'name',
121 field: 'name',
122 operator: 'is_not_null',
123 value: null
124 }, {
125 condition: 'AND',
126 rules: [{
127 id: 'category',
128 field: 'category',
129 operator: 'not_in',
130 value: ['mo', 'mu']
131 }, {
132 id: 'id',
133 field: 'id',
134 operator: 'equal',
135 value: '1234-azer-5678'
136 }]
137 }]
138 },
139 'Should have inverted all conditions and operators'
140 );
141 });
142
143 /**
144 * Test change filters
145 */
146 QUnit.test('change-filters', function(assert) {
147 var filter_a = {
148 id: 'a',
149 type: 'string'
150 };
151
152 var filter_b = {
153 id: 'b',
154 type: 'string'
155 };
156
157 var filter_c = {
158 id: 'c',
159 type: 'string'
160 };
161
162 var rule_a = {
163 id: 'a',
164 field: 'a',
165 operator: 'equal',
166 value: 'foo'
167 };
168
169 var rule_b = {
170 id: 'b',
171 field: 'b',
172 operator: 'equal',
173 value: 'bar'
174 };
175
176 $b.queryBuilder({
177 filters: [filter_a, filter_b],
178 rules: [rule_a, rule_b]
179 });
180
181 assert.throws(
182 function(){
183 $b.queryBuilder('removeFilter', 'a');
184 },
185 /A rule is using filter "a"/,
186 'Should throw error when deleting filter "a" w/o force'
187 );
188
189 $b.queryBuilder('removeFilter', 'a', true);
190
191 assert.rulesMatch(
192 $b.queryBuilder('getRules'),
193 {condition:'AND', rules: [rule_b]},
194 'Should have deleted rule using filter "a"'
195 );
196
197 $b.queryBuilder('addFilter', filter_c, 0);
198
199 assert.optionsMatch(
200 $('#builder_rule_1 [name$=_filter] option'),
201 ['-1', filter_c.id, filter_b.id],
202 'Should have added filter "c" at begining'
203 );
204
205 $b.queryBuilder('addFilter', filter_a, 'c');
206
207 assert.optionsMatch(
208 $('#builder_rule_1 [name$=_filter] option'),
209 ['-1', filter_c.id, filter_a.id, filter_b.id],
210 'Should have added filter "a" after "c"'
211 );
212 });
213});