UNPKG

4.82 kBJavaScriptView Raw
1'use strict';
2
3module.exports = function (dbType, context) {
4
5 describe(dbType + ': ne', function () {
6
7 it('#7 does ne queries 1', function () {
8 var db = context.db;
9 var index = {
10 "index": {
11 "fields": ["foo"]
12 }
13 };
14
15 return db.createIndex(index).then(function () {
16 return db.bulkDocs([
17 { _id: '1', foo: 'eyo', bar: 'zxy'},
18 { _id: '2', foo: 'ebb', bar: 'zxy'},
19 { _id: '3', foo: 'eba', bar: 'zxz'},
20 { _id: '4', foo: 'abo', bar: 'zxz'}
21 ]);
22 }).then(function () {
23 return db.find({
24 selector: {foo: {$gt: "a"}, bar: {$ne: 'zxy'}},
25 fields: ["_id"],
26 sort: [{foo: "asc"}]
27 });
28 }).then(function (resp) {
29 resp.should.deep.equal({
30 docs: [
31 { _id: '4'},
32 { _id: '3'}
33 ]
34 });
35 });
36 });
37
38 it('#7 does ne queries 2', function () {
39 var db = context.db;
40 var index = {
41 "index": {
42 "fields": ["foo", "bar"]
43 }
44 };
45
46 return db.createIndex(index).then(function () {
47 return db.bulkDocs([
48 {_id: '1', foo: 'eyo', bar: 'zxy'},
49 {_id: '2', foo: 'ebb', bar: 'zxy'},
50 {_id: '3', foo: 'eba', bar: 'zxz'},
51 {_id: '4', foo: 'abo', bar: 'zxz'}
52 ]);
53 }).then(function () {
54 return db.find({
55 selector: {foo: {$gt: "a"}, bar: {$ne: 'zxy'}},
56 fields: ["_id"],
57 sort: [{foo: "asc"}]
58 });
59 }).then(function (resp) {
60 resp.should.deep.equal({
61 docs: [
62 {_id: '4'},
63 {_id: '3'}
64 ]
65 });
66 });
67 });
68
69 it('$ne/$eq inconsistency', function () {
70 var db = context.db;
71
72 function normalize(res) {
73 return res.docs.map(function getId(x) {
74 return x._id;
75 }).sort();
76 }
77
78 return db.createIndex({
79 index: {
80 fields: ['foo']
81 }
82 }).then(function () {
83 return db.bulkDocs([
84 {_id: '1', foo: 1},
85 {_id: '2', foo: 2},
86 {_id: '3', foo: 3},
87 {_id: '4', foo: 4}
88 ]);
89 }).then(function () {
90 return db.find({
91 selector: {$and: [{foo: {$eq: 1}}, {foo: {$ne: 1}}]}
92 });
93 }).then(function (res) {
94 normalize(res).should.deep.equal([]);
95 });
96 });
97
98 it('$ne/$eq consistency', function () {
99 var db = context.db;
100
101 function normalize(res) {
102 return res.docs.map(function getId(x) {
103 return x._id;
104 }).sort();
105 }
106
107 return db.createIndex({
108 index: {
109 fields: ['foo']
110 }
111 }).then(function () {
112 return db.bulkDocs([
113 {_id: '1', foo: 1},
114 {_id: '2', foo: 2},
115 {_id: '3', foo: 3},
116 {_id: '4', foo: 4}
117 ]);
118 }).then(function () {
119 return db.find({
120 selector: {$and: [{foo: {$eq: 1}}, {foo: {$ne: 3}}]}
121 });
122 }).then(function (res) {
123 normalize(res).should.deep.equal(['1']);
124 });
125 });
126
127 it('does ne queries with gt', function () {
128 var db = context.db;
129 return db.bulkDocs([
130 { name: 'mario', _id: 'mario', rank: 5, series: 'mario', debut: 1981 },
131 { name: 'jigglypuff', _id: 'puff', rank: 8, series: 'pokemon', debut: 1996 },
132 { name: 'link', rank: 10, _id: 'link', series: 'zelda', debut: 1986 },
133 { name: 'donkey kong', rank: 7, _id: 'dk', series: 'mario', debut: 1981 },
134 { name: 'pikachu', series: 'pokemon', _id: 'pikachu', rank: 1, debut: 1996 },
135 { name: 'captain falcon', _id: 'falcon', rank: 4, series: 'f-zero', debut: 1990 },
136 { name: 'luigi', rank: 11, _id: 'luigi', series: 'mario', debut: 1983 },
137 { name: 'fox', _id: 'fox', rank: 3, series: 'star fox', debut: 1993 },
138 { name: 'ness', rank: 9, _id: 'ness', series: 'earthbound', debut: 1994 },
139 { name: 'samus', rank: 12, _id: 'samus', series: 'metroid', debut: 1986 },
140 { name: 'yoshi', _id: 'yoshi', rank: 6, series: 'mario', debut: 1990 },
141 { name: 'kirby', _id: 'kirby', series: 'kirby', rank: 2, debut: 1992 }
142 ]).then(function () {
143 return db.find({
144 selector: {
145 $and: [
146 {_id: {$ne: "samus"}},
147 {_id: {$ne: "yoshia"}},
148 {_id: {$gt: "fox"}}
149 ]
150 },
151 fields: ["_id"],
152 });
153 }).then(function (resp) {
154 resp.should.deep.equal({
155 docs: [
156 {_id: 'kirby'},
157 {_id: 'link'},
158 {_id: 'luigi'},
159 {_id: 'mario'},
160 {_id: 'ness'},
161 {_id: 'pikachu'},
162 {_id: 'puff'},
163 {_id: 'yoshi'}
164 ]
165 });
166 });
167 });
168
169 });
170};