blob: 5abc351ff2ff7c75c88bbc3aa93b9808cc335384 [file] [log] [blame]
'use strict';
module.exports = function (PouchDB, opts, callback) {
var utils = require('./utils');
function makeTestDocs() {
return [
{key: null},
{key: true},
{key: false},
{key: -1},
{key: 0},
{key: 1},
{key: 2},
{key: 3},
{key: Math.random()},
{key: 'bar' + Math.random()},
{key: 'foo' + Math.random()},
{key: 'foobar' + Math.random()}
];
}
var testCases = [
{
name: 'temp-views',
assertions: 1,
iterations: 1,
setup: function (db, callback) {
var tasks = [];
for (var i = 0; i < 100; i++) {
tasks.push(i);
}
Promise.all(tasks.map(function () {
return db.bulkDocs({docs : makeTestDocs()});
})).then(function () {
callback();
}, callback);
},
test: function (db, itr, doc, done) {
var tasks = [
{startkey: 'foo', limit: 5},
{startkey: 'foobar', limit: 5},
{startkey: 'foo', limit: 5},
{startkey: -1, limit: 5},
{startkey: null, limit: 5}
];
Promise.all(tasks.map(function (task) {
return db.query(function (doc) {
emit(doc.key);
}, task);
})).then(function () {
done();
}, done);
}
},
{
name: 'build-secondary-index',
assertions: 1,
iterations: 1,
setup: function (db, callback) {
var docs = [];
for (var i = 0; i < 1000; i++) {
docs.push({});
}
db.bulkDocs(docs).then(function () {
return db.put({
_id : '_design/myview',
views : {
myview : {
map : function (doc) {
emit(doc._id);
}.toString()
}
}
});
}).then(function () {
callback();
}, callback);
},
test: function (db, itr, doc, done) {
db.query('myview/myview', {limit: 0}).then(function () {
done();
}, done);
}
},
{
name: 'persisted-views',
assertions: 1,
iterations: 10,
setup: function (db, callback) {
var tasks = [];
for (var i = 0; i < 100; i++) {
tasks.push(i);
}
Promise.all(tasks.map(function () {
return db.bulkDocs({docs : makeTestDocs()});
})).then(function () {
return db.put({
_id : '_design/myview',
views : {
myview : {
map : function (doc) {
emit(doc.key);
}.toString()
}
}
});
}).then(function () {
return db.query('myview/myview');
}).then(function () {
callback();
}, callback);
},
test: function (db, itr, doc, done) {
var tasks = [
{startkey: 'foo', limit: 5},
{startkey: 'foobar', limit: 5},
{startkey: 'foo', limit: 5},
{startkey: -1, limit: 5},
{startkey: null, limit: 5}
];
Promise.all(tasks.map(function (task) {
return db.query('myview/myview', task);
})).then(function () {
done();
}, done);
}
},
{
name: 'persisted-views-stale-ok',
assertions: 1,
iterations: 10,
setup: function (db, callback) {
var tasks = [];
for (var i = 0; i < 100; i++) {
tasks.push(i);
}
Promise.all(tasks.map(function () {
return db.bulkDocs({docs : makeTestDocs()});
})).then(function () {
return db.put({
_id : '_design/myview',
views : {
myview : {
map : function (doc) {
emit(doc.key);
}.toString()
}
}
});
}).then(function () {
return db.query('myview/myview');
}).then(function () {
callback();
}, callback);
},
test: function (db, itr, doc, done) {
var tasks = [
{startkey: 'foo', limit: 5, stale : 'ok'},
{startkey: 'foobar', limit: 5, stale : 'ok'},
{startkey: 'foo', limit: 5, stale : 'ok'},
{startkey: -1, limit: 5, stale : 'ok'},
{startkey: null, limit: 5, stale : 'ok'}
];
Promise.all(tasks.map(function (task) {
return db.query('myview/myview', task);
})).then(function () {
done();
}, done);
}
}
];
utils.runTests(PouchDB, 'views', testCases, opts, callback);
};