1 | 'use strict';
|
2 |
|
3 | var testUtils = require('../test-utils');
|
4 | var sortById = testUtils.sortById;
|
5 | var should = testUtils.should;
|
6 |
|
7 | module.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 | };
|