1 | $(function () {
|
2 | var $b = $('#builder');
|
3 |
|
4 | QUnit.module('plugins.not-group', {
|
5 | afterEach: function () {
|
6 | $b.queryBuilder('destroy');
|
7 | }
|
8 | });
|
9 |
|
10 | QUnit.test('Not checkbox', function (assert) {
|
11 | $b.queryBuilder({
|
12 | filters: basic_filters,
|
13 | rules: basic_rules,
|
14 | plugins: ['not-group']
|
15 | });
|
16 |
|
17 | assert.ok(
|
18 | $b.find('[data-not=group]').length > 0,
|
19 | 'Should add "not" buttons"'
|
20 | );
|
21 |
|
22 | $('#builder_group_0>.rules-group-header [data-not=group]').trigger('click');
|
23 |
|
24 | assert.ok(
|
25 | $b.queryBuilder('getModel').not,
|
26 | 'The root group should have "not" flag set to true'
|
27 | );
|
28 |
|
29 | assert.ok(
|
30 | $b.queryBuilder('getRules').not,
|
31 | 'The root json should have "not" flag set to true'
|
32 | );
|
33 | });
|
34 |
|
35 | QUnit.test('SQL export', function (assert) {
|
36 | $b.queryBuilder({
|
37 | filters: basic_filters,
|
38 | rules: rules,
|
39 | plugins: ['not-group']
|
40 | });
|
41 |
|
42 | assert.equal(
|
43 | $b.queryBuilder('getSQL').sql,
|
44 | sql,
|
45 | 'Should export SQL with NOT function'
|
46 | );
|
47 |
|
48 | $b.queryBuilder('reset');
|
49 |
|
50 | $b.queryBuilder('setRulesFromSQL', sql);
|
51 |
|
52 | assert.rulesMatch(
|
53 | $b.queryBuilder('getRules'),
|
54 | rules,
|
55 | 'Should parse NOT SQL function'
|
56 | );
|
57 | });
|
58 |
|
59 | QUnit.test('Mongo export', function (assert) {
|
60 | $b.queryBuilder({
|
61 | filters: basic_filters,
|
62 | rules: rules,
|
63 | plugins: ['not-group']
|
64 | });
|
65 |
|
66 | assert.deepEqual(
|
67 | $b.queryBuilder('getMongo'),
|
68 | mongo,
|
69 | 'Should export MongoDB with $nor function'
|
70 | );
|
71 |
|
72 | $b.queryBuilder('reset');
|
73 |
|
74 | $b.queryBuilder('setRulesFromMongo', mongo);
|
75 |
|
76 | assert.rulesMatch(
|
77 | $b.queryBuilder('getRules'),
|
78 | rules,
|
79 | 'Should parse $nor MongoDB function'
|
80 | );
|
81 | });
|
82 |
|
83 | var rules = {
|
84 | condition: 'OR',
|
85 | rules: [{
|
86 | id: 'name',
|
87 | operator: 'equal',
|
88 | value: 'Mistic'
|
89 | }, {
|
90 | condition: 'AND',
|
91 | not: true,
|
92 | rules: [{
|
93 | id: 'price',
|
94 | operator: 'less',
|
95 | value: 10.25
|
96 | }, {
|
97 | id: 'category',
|
98 | field: 'category',
|
99 | operator: 'in',
|
100 | value: ['mo', 'mu']
|
101 | }]
|
102 | }]
|
103 | };
|
104 |
|
105 | var sql = 'name = \'Mistic\' OR ( NOT ( price < 10.25 AND category IN(\'mo\', \'mu\') ) ) ';
|
106 |
|
107 | var mongo = {
|
108 | "$or": [{
|
109 | "name": "Mistic"
|
110 | },
|
111 | {
|
112 | "$nor": [{
|
113 | "$and": [{
|
114 | "price": {"$lt": 10.25}
|
115 | }, {
|
116 | "category": {"$in": ["mo", "mu"]}
|
117 | }]
|
118 | }]
|
119 | }]
|
120 | };
|
121 |
|
122 | });
|