UNPKG

6.92 kBJavaScriptView Raw
1'use strict';
2
3var testUtils = require('../test-utils');
4var should = testUtils.should;
5
6module.exports = function (dbType, context) {
7 describe(dbType + ': Combinational', function () {
8
9 describe('$or', function () {
10
11 it('does $or queries', function () {
12 var db = context.db;
13 var index = {
14 "index": {
15 "fields": ["age"]
16 },
17 "name": "age-index",
18 "type": "json"
19 };
20
21 return db.createIndex(index).then(function () {
22 return db.bulkDocs([
23 { _id: '1', age: 75, name: {first: 'Nancy', surname: 'Sinatra'}},
24 { _id: '2', age: 40, name: {first: 'Eddie', surname: 'Vedder'}},
25 { _id: '3', age: 80, name: {first: 'John', surname: 'Fogerty'}},
26 { _id: '4', age: 76, name: {first: 'Mick', surname: 'Jagger'}},
27 ]);
28 }).then(function () {
29 return db.find({
30 selector: {
31 $and:[
32 {age:{$gte: 75}},
33 {$or: [
34 {"name.first": "Nancy"},
35 {"name.first": "Mick"}
36 ]}
37 ]
38 }
39 });
40 }).then(function (resp) {
41 var docs = resp.docs.map(function (doc) {
42 delete doc._rev;
43 return doc;
44 });
45
46 docs.should.deep.equal([
47 { _id: '1', age: 75, name: {first: 'Nancy', surname: 'Sinatra'}},
48 { _id: '4', age: 76, name: {first: 'Mick', surname: 'Jagger'}}
49 ]);
50 });
51 });
52
53 it('does $or queries 2', function () {
54 var db = context.db;
55 var index = {
56 "index": {
57 "fields": ["_id"]
58 },
59 "name": "age-index",
60 "type": "json"
61 };
62
63 return db.createIndex(index).then(function () {
64 return db.bulkDocs([
65 { _id: '1', age: 75, name: {first: 'Nancy', surname: 'Sinatra'}},
66 { _id: '2', age: 40, name: {first: 'Eddie', surname: 'Vedder'}},
67 { _id: '3', age: 80, name: {first: 'John', surname: 'Fogerty'}},
68 { _id: '4', age: 76, name: {first: 'Mick', surname: 'Jagger'}},
69 { _id: '5', age: 40, name: {first: 'Dave', surname: 'Grohl'}}
70 ]);
71 }).then(function () {
72 return db.find({
73 selector: {
74 $and:[
75 {_id:{$gte: '0'}},
76 {$or: [
77 {"name.first": "Nancy"},
78 {age : {$lte: 40}}
79 ]}
80 ]
81 }
82 });
83 }).then(function (resp) {
84 var docs = resp.docs.map(function (doc) {
85 delete doc._rev;
86 return doc;
87 });
88
89 docs.should.deep.equal([
90 { _id: '1', age: 75, name: {first: 'Nancy', surname: 'Sinatra'}},
91 { _id: '2', age: 40, name: {first: 'Eddie', surname: 'Vedder'}},
92 { _id: '5', age: 40, name: {first: 'Dave', surname: 'Grohl'}}
93 ]);
94 });
95 });
96
97 });
98
99 describe('$nor', function () {
100
101 it('does $nor queries', function () {
102 var db = context.db;
103 var index = {
104 "index": {
105 "fields": ["age"]
106 },
107 "name": "age-index",
108 "type": "json"
109 };
110
111 return db.createIndex(index).then(function () {
112 return db.bulkDocs([
113 { _id: '1', age: 75, name: {first: 'Nancy', surname: 'Sinatra'}},
114 { _id: '2', age: 40, name: {first: 'Eddie', surname: 'Vedder'}},
115 { _id: '3', age: 80, name: {first: 'John', surname: 'Fogerty'}},
116 { _id: '4', age: 76, name: {first: 'Mick', surname: 'Jagger'}},
117 ]);
118 }).then(function () {
119 return db.find({
120 selector: {
121 $and:[
122 {age:{$gte: 75}},
123 {$nor: [
124 {"name.first": "Nancy"},
125 {"name.first": "Mick"}
126 ]}
127 ]
128 }
129 });
130 }).then(function (resp) {
131 var docs = resp.docs.map(function (doc) {
132 delete doc._rev;
133 return doc;
134 });
135
136 docs.should.deep.equal([
137 { _id: '3', age: 80, name: {first: 'John', surname: 'Fogerty'}},
138 ]);
139 });
140 });
141
142 it('does $nor queries 2', function () {
143 var db = context.db;
144 var index = {
145 "index": {
146 "fields": ["_id"]
147 },
148 "name": "age-index",
149 "type": "json"
150 };
151
152 return db.createIndex(index).then(function () {
153 return db.bulkDocs([
154 { _id: '1', age: 75, name: {first: 'Nancy', surname: 'Sinatra'}},
155 { _id: '2', age: 40, name: {first: 'Eddie', surname: 'Vedder'}},
156 { _id: '3', age: 80, name: {first: 'John', surname: 'Fogerty'}},
157 { _id: '4', age: 76, name: {first: 'Mick', surname: 'Jagger'}},
158 { _id: '5', age: 40, name: {first: 'Dave', surname: 'Grohl'}}
159 ]);
160 }).then(function () {
161 return db.find({
162 selector: {
163 $and:[
164 {_id:{$lte: '6'}},
165 {$nor: [
166 {"name.first": "Nancy"},
167 {age : {$lte: 40}}
168 ]}
169 ]
170 }
171 });
172 }).then(function (resp) {
173 var docs = resp.docs.map(function (doc) {
174 delete doc._rev;
175 return doc;
176 });
177
178 docs.should.deep.equal([
179 { _id: '3', age: 80, name: {first: 'John', surname: 'Fogerty'}},
180 { _id: '4', age: 76, name: {first: 'Mick', surname: 'Jagger'}},
181 ]);
182 });
183 });
184
185 it('handles $or/$nor typos', function () {
186 var db = context.db;
187 var index = {
188 "index": {
189 "fields": ["_id"]
190 },
191 "name": "age-index",
192 "type": "json"
193 };
194
195 return db.createIndex(index).then(function () {
196 return db.bulkDocs([
197 { _id: '1', age: 75, name: {first: 'Nancy', surname: 'Sinatra'}},
198 { _id: '2', age: 40, name: {first: 'Eddie', surname: 'Vedder'}},
199 { _id: '3', age: 80, name: {first: 'John', surname: 'Fogerty'}},
200 { _id: '4', age: 76, name: {first: 'Mick', surname: 'Jagger'}},
201 { _id: '5', age: 40, name: {first: 'Dave', surname: 'Grohl'}}
202 ]);
203 }).then(function () {
204 return db.find({
205 selector: {
206 $and:[
207 {_id:{$lte: '6'}},
208 {$noor: [
209 {"name.first": "Nancy"},
210 {age : {$lte: 40}}
211 ]}
212 ]
213 }
214 });
215 }).then(function () {
216 throw new Error('expected an error');
217 }, function (err) {
218 should.exist(err);
219 });
220 });
221
222 });
223 });
224
225};