UNPKG

5.9 kBJavaScriptView Raw
1'use strict';
2
3var testUtils = require('../test-utils');
4var sortById = testUtils.sortById;
5var should = testUtils.should;
6
7module.exports = function (dbType, context) {
8
9 describe(dbType + ': basic2', function () {
10
11 beforeEach(function () {
12 return context.db.bulkDocs([
13 { name: 'Mario', _id: 'mario', rank: 5, series: 'Mario', debut: 1981 },
14 { name: 'Jigglypuff', _id: 'puff', rank: 8, series: 'Pokemon', debut: 1996 },
15 { name: 'Link', rank: 10, _id: 'link', series: 'Zelda', debut: 1986 },
16 { name: 'Donkey Kong', rank: 7, _id: 'dk', series: 'Mario', debut: 1981 },
17 { name: 'Pikachu', series: 'Pokemon', _id: 'pikachu', rank: 1, debut: 1996 },
18 { name: 'Captain Falcon', _id: 'falcon', rank: 4, series: 'F-Zero', debut: 1990 },
19 { name: 'Luigi', rank: 11, _id: 'luigi', series: 'Mario', debut: 1983 },
20 { name: 'Fox', _id: 'fox', rank: 3, series: 'Star Fox', debut: 1993 },
21 { name: 'Ness', rank: 9, _id: 'ness', series: 'Earthbound', debut: 1994 },
22 { name: 'Samus', rank: 12, _id: 'samus', series: 'Metroid', debut: 1986 },
23 { name: 'Yoshi', _id: 'yoshi', rank: 6, series: 'Mario', debut: 1990 },
24 { name: 'Kirby', _id: 'kirby', series: 'Kirby', rank: 2, debut: 1992 }
25 ]);
26 });
27
28 it('should include ddocs in _id results', function () {
29 var db = context.db;
30 var index = {
31 "index": {
32 "fields": ["foo"]
33 },
34 "name": "foo-index",
35 "type": "json"
36 };
37 return db.createIndex(index).then(function () {
38 return db.getIndexes();
39 }).then(function (res) {
40 var ddoc = res.indexes[1].ddoc;
41 return db.find({
42 selector: {_id: {$gt: '\u0000'}},
43 fields: ['_id'],
44 sort: ['_id']
45 }).then(function (response) {
46 response.docs.should.deep.equal([
47 {"_id": ddoc},
48 {"_id": "dk"},
49 {"_id": "falcon"},
50 {"_id": "fox"},
51 {"_id": "kirby"},
52 {"_id": "link"},
53 {"_id": "luigi"},
54 {"_id": "mario"},
55 {"_id": "ness"},
56 {"_id": "pikachu"},
57 {"_id": "puff"},
58 {"_id": "samus"},
59 {"_id": "yoshi"}
60 ]);
61 });
62 });
63 });
64
65 it('should find debut > 1990', function () {
66 var db = context.db;
67 return db.createIndex({
68 "index": {
69 "fields": ["name"]
70 }
71 }).then(function () {
72 return db.createIndex({
73 index: {fields: ['debut']}
74 });
75 }).then(function () {
76 return db.find({
77 selector: {debut: {$gt: 1990}},
78 fields: ['_id'],
79 sort: ['debut']
80 });
81 }).then(function (response) {
82 response.docs.should.deep.equal([
83 {"_id":"kirby"},
84 {"_id":"fox"},
85 {"_id":"ness"},
86 {"_id":"pikachu"},
87 {"_id":"puff"}
88 ]);
89 });
90 });
91
92 it('should find debut > 1990 2', function () {
93 var db = context.db;
94 return db.createIndex({
95 "index": {
96 "fields": ["name"]
97 }
98 }).then(function () {
99 return db.createIndex({
100 index: {fields: ['debut']}
101 });
102 }).then(function () {
103 return db.createIndex({
104 index: {fields: ['series', 'debut']}
105 });
106 }).then(function () {
107 return db.find({
108 selector: {debut: {$gt: 1990}},
109 fields: ['_id'],
110 sort: ['debut']
111 });
112 }).then(function (response) {
113 response.docs.should.deep.equal([
114 {"_id":"kirby"},
115 {"_id":"fox"},
116 {"_id":"ness"},
117 {"_id":"pikachu"},
118 {"_id":"puff"}
119 ]);
120 });
121 });
122
123 it('should find debut > 1990 3', function () {
124 var db = context.db;
125 return db.createIndex({
126 "index": {
127 "fields": ["name"]
128 }
129 }).then(function () {
130 return db.createIndex({
131 index: {fields: ['debut']}
132 });
133 }).then(function () {
134 return db.createIndex({
135 index: {fields: ['series', 'debut']}
136 });
137 }).then(function () {
138 return db.find({
139 selector: {debut: {$gt: 1990}},
140 fields: ['_id']
141 });
142 }).then(function (response) {
143 response.docs.sort(sortById);
144 response.docs.should.deep.equal([
145 {"_id":"fox"},
146 {"_id":"kirby"},
147 {"_id":"ness"},
148 {"_id":"pikachu"},
149 {"_id":"puff"}
150 ]);
151 });
152 });
153
154 it('should find series == mario', function () {
155 var db = context.db;
156 return db.createIndex({
157 "index": {
158 "fields": ["name"]
159 }
160 }).then(function () {
161 return db.createIndex({
162 index: {fields: ['debut']}
163 });
164 }).then(function () {
165 return db.createIndex({
166 index: {fields: ['series', 'debut']}
167 });
168 }).then(function () {
169 return db.find({
170 selector: {series: {$eq: 'Mario'}},
171 fields: ['_id', 'debut'],
172 sort: [{series: 'desc'}, {debut: 'desc'}]
173 });
174 }).then(function (response) {
175 response.docs.should.deep.equal([
176 {"_id":"yoshi","debut":1990},
177 {"_id":"luigi","debut":1983},
178 {"_id":"mario","debut":1981},
179 {"_id":"dk","debut":1981}
180 ]);
181 });
182 });
183
184 it('throws an error for an invalid selector/sort', function () {
185 var db = context.db;
186 return db.createIndex({
187 index: {fields: ['series', 'debut']}
188 }).then(function () {
189 return db.find({
190 selector: {series: 'Mario', debut: 1981},
191 sort: ['name']
192 });
193 }).then(function () {
194 throw new Error('expected an error');
195 }, function (err) {
196 should.exist(err);
197 });
198 });
199
200 });
201};