1 | 'use strict';
|
2 |
|
3 | module.exports = function (dbType, context) {
|
4 | describe(dbType + ': $regex', function () {
|
5 |
|
6 | beforeEach(function () {
|
7 | return context.db.bulkDocs([
|
8 | { name: 'Mario', _id: 'mario', rank: 5, series: 'Mario', debut: 1981, awesome: true },
|
9 | { name: 'Jigglypuff', _id: 'puff', rank: 8, series: 'Pokemon', debut: 1996,
|
10 | awesome: false },
|
11 | { name: 'Link', rank: 10, _id: 'link', series: 'Zelda', debut: 1986, awesome: true },
|
12 | { name: 'Donkey Kong', rank: 7, _id: 'dk', series: 'Mario', debut: 1981, awesome: false },
|
13 | { name: 'Pikachu', series: 'Pokemon', _id: 'pikachu', rank: 1, debut: 1996, awesome: true },
|
14 | { name: 'Captain Falcon', _id: 'falcon', rank: 4, series: 'F-Zero', debut: 1990,
|
15 | awesome: true },
|
16 | { name: 'Luigi', rank: 11, _id: 'luigi', series: 'Mario', debut: 1983, awesome: false },
|
17 | { name: 'Fox', _id: 'fox', rank: 3, series: 'Star Fox', debut: 1993, awesome: true },
|
18 | { name: 'Ness', rank: 9, _id: 'ness', series: 'Earthbound', debut: 1994, awesome: true },
|
19 | { name: 'Samus', rank: 12, _id: 'samus', series: 'Metroid', debut: 1986, awesome: true },
|
20 | { name: 'Yoshi', _id: 'yoshi', rank: 6, series: 'Mario', debut: 1990, awesome: true },
|
21 | { name: 'Kirby', _id: 'kirby', series: 'Kirby', rank: 2, debut: 1992, awesome: true },
|
22 | { name: 'Master Hand', _id: 'master_hand', series: 'Smash Bros', rank: 0, debut: 1999,
|
23 | awesome: false }
|
24 | ]);
|
25 | });
|
26 |
|
27 | it('should do a basic regex search', function () {
|
28 | var db = context.db;
|
29 | var index = {
|
30 | "index": {
|
31 | "fields": ["name"]
|
32 | }
|
33 | };
|
34 | return db.createIndex(index).then(function () {
|
35 | return db.find({
|
36 | selector: {
|
37 | name: {$gte: null},
|
38 | series: {$regex: "^Mario"}
|
39 | },
|
40 | sort: ['name']
|
41 | }).then(function (resp) {
|
42 | var docs = resp.docs.map(function (doc) {
|
43 | delete doc._rev;
|
44 | return doc;
|
45 | });
|
46 |
|
47 | docs.should.deep.equal([
|
48 | { name: 'Donkey Kong', rank: 7, _id: 'dk', series: 'Mario',
|
49 | debut: 1981, awesome: false },
|
50 | { name: 'Luigi', rank: 11, _id: 'luigi', series: 'Mario', debut: 1983, awesome: false },
|
51 | { name: 'Mario', _id: 'mario', rank: 5, series: 'Mario', debut: 1981, awesome: true },
|
52 | { name: 'Yoshi', _id: 'yoshi', rank: 6, series: 'Mario', debut: 1990, awesome: true },
|
53 | ]);
|
54 | });
|
55 | });
|
56 | });
|
57 |
|
58 | it('returns 0 docs for no match', function () {
|
59 | var db = context.db;
|
60 | var index = {
|
61 | "index": {
|
62 | "fields": ["name"]
|
63 | }
|
64 | };
|
65 | return db.createIndex(index).then(function () {
|
66 | return db.find({
|
67 | selector: {
|
68 | name: {$gte: null},
|
69 | series: {$regex: "^Wrong"}
|
70 | },
|
71 | sort: ['name']
|
72 | }).then(function (resp) {
|
73 | var docs = resp.docs.map(function (doc) {
|
74 | delete doc._rev;
|
75 | return doc;
|
76 | });
|
77 |
|
78 | docs.should.deep.equal([]);
|
79 | });
|
80 | });
|
81 | });
|
82 |
|
83 | it('does not return docs for regex on non-string field', function () {
|
84 | var db = context.db;
|
85 | var index = {
|
86 | "index": {
|
87 | "fields": ["name"]
|
88 | }
|
89 | };
|
90 | return db.createIndex(index).then(function () {
|
91 | return db.find({
|
92 | selector: {
|
93 | name: {$gte: null},
|
94 | debut: {$regex: "^Mario"}
|
95 | },
|
96 | sort: ['name']
|
97 | }).then(function (resp) {
|
98 | var docs = resp.docs.map(function (doc) {
|
99 | delete doc._rev;
|
100 | return doc;
|
101 | });
|
102 |
|
103 | docs.should.deep.equal([]);
|
104 | });
|
105 | });
|
106 | });
|
107 |
|
108 | });
|
109 | };
|