UNPKG

3.77 kBJavaScriptView Raw
1'use strict';
2
3module.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};