forked from pouchdb/pouchdb
-
Notifications
You must be signed in to change notification settings - Fork 0
/
test.design_docs.js
123 lines (109 loc) · 3.23 KB
/
test.design_docs.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
'use strict';
var adapters = ['http', 'local'];
adapters.forEach(function (adapter) {
describe('test.design_docs.js-' + adapter, function () {
var dbs = {};
beforeEach(function (done) {
dbs.name = testUtils.adapterUrl(adapter, 'test_design_docs');
testUtils.cleanup([dbs.name], done);
});
after(function (done) {
testUtils.cleanup([dbs.name], done);
});
var doc = {
_id: '_design/foo',
views: {
scores: {
map: 'function (doc) { if (doc.score) { emit(null, doc.score); } }',
reduce: 'function (keys, values, rereduce) { return sum(values); }'
}
},
filters: { even: 'function (doc) { return doc.integer % 2 === 0; }' }
};
it('Test writing design doc', function (done) {
var db = new PouchDB(dbs.name);
db.post(doc, function (err, info) {
should.not.exist(err, 'Wrote design doc');
db.get('_design/foo', function (err, info) {
done(err);
});
});
});
it('Changes filter', function (done) {
var docs1 = [
doc,
{_id: '0', integer: 0},
{_id: '1', integer: 1},
{_id: '2', integer: 2},
{_id: '3', integer: 3}
];
var docs2 = [
{_id: '4', integer: 4},
{_id: '5', integer: 5},
{_id: '6', integer: 6},
{_id: '7', integer: 7}
];
var db = new PouchDB(dbs.name);
var count = 0;
db.bulkDocs({ docs: docs1 }, function (err, info) {
var changes = db.changes({
live: true,
filter: 'foo/even',
onChange: function (change) {
count += 1;
if (count === 4) {
changes.cancel();
}
},
complete: function (err, result) {
result.status.should.equal('cancelled');
done();
},
});
db.bulkDocs({ docs: docs2 }, {});
});
});
it('Basic views', function (done) {
var docs1 = [
doc,
{_id: 'dale', score: 3},
{_id: 'mikeal', score: 5},
{_id: 'max', score: 4},
{_id: 'nuno', score: 3}
];
var db = new PouchDB(dbs.name);
db.bulkDocs({ docs: docs1 }, function (err, info) {
db.query('foo/scores', { reduce: false }, function (err, result) {
result.rows.should.have.length(4, 'Correct # of results');
db.query('foo/scores', function (err, result) {
result.rows[0].value.should.equal(15, 'Reduce gave correct result');
done();
});
});
});
});
it('Concurrent queries', function (done) {
var db = new PouchDB(dbs.name);
db.bulkDocs({
docs: [
doc,
{_id: 'dale', score: 3}
]
}, function (err, info) {
var cnt = 0;
db.query('foo/scores', { reduce: false }, function (err, result) {
result.rows.should.have.length(1, 'Correct # of results');
if (++cnt === 2) {
done();
}
});
db.query('foo/scores', { reduce: false }, function (err, result) {
result.rows.should.have.length(1, 'Correct # of results');
if (++cnt === 2) {
done();
}
});
});
});
});
});