blob: b908418d5d763952a7070c7efa63b5d2632a53c3 [file] [log] [blame]
'use strict';
describe('test.set-operations.js', function () {
var sortById = testUtils.sortById;
beforeEach(function () {
return context.db.bulkDocs([
{ name: 'Mario', _id: 'mario', rank: 5, series: 'Mario', debut: 1981 },
{ name: 'Jigglypuff', _id: 'puff', rank: 8, series: 'Pokemon', debut: 1996 },
{ name: 'Link', rank: 10, _id: 'link', series: 'Zelda', debut: 1986 },
{ name: 'Donkey Kong', rank: 7, _id: 'dk', series: 'Mario', debut: 1981 },
{ name: 'Pikachu', series: 'Pokemon', _id: 'pikachu', rank: 1, debut: 1996 },
{ name: 'Captain Falcon', _id: 'falcon', rank: 4, series: 'F-Zero', debut: 1990 },
{ name: 'Luigi', rank: 11, _id: 'luigi', series: 'Mario', debut: 1983 },
{ name: 'Fox', _id: 'fox', rank: 3, series: 'Star Fox', debut: 1993 },
{ name: 'Ness', rank: 9, _id: 'ness', series: 'Earthbound', debut: 1994 },
{ name: 'Samus', rank: 12, _id: 'samus', series: 'Metroid', debut: 1986 },
{ name: 'Yoshi', _id: 'yoshi', rank: 6, series: 'Mario', debut: 1990 },
{ name: 'Kirby', _id: 'kirby', series: 'Kirby', rank: 2, debut: 1992 }
]);
});
it('should work with $and 1', function () {
var db = context.db;
return db.createIndex({
"index": {
"fields": ["series"]
}
}).then(function () {
return db.createIndex({
"index": {
"fields": ["debut"]
}
});
}).then(function () {
return db.find({
selector: {
$and: [
{series: 'Mario'},
{debut: {$gte: 1990}}
]
},
fields: ['_id']
});
}).then(function (res) {
res.docs.sort(sortById);
res.docs.should.deep.equal([{_id: 'yoshi'}]);
});
});
it('should work with $and 2, same index', function () {
var db = context.db;
return db.createIndex({
"index": {
"fields": ["series", "debut"]
}
}).then(function () {
return db.find({
selector: {
$and: [
{series: 'Mario'},
{debut: {$gte: 1990}}
]
},
fields: ['_id']
});
}).then(function (res) {
res.docs.sort(sortById);
res.docs.should.deep.equal([{_id: 'yoshi'}]);
});
});
it('should work with $and 3, index/no-index', function () {
var db = context.db;
return db.createIndex({
"index": {
"fields": ["series"]
}
}).then(function () {
return db.createIndex({
"index": {
"fields": ["rank"]
}
});
}).then(function () {
return db.find({
selector: {
$and: [
{series: 'Mario'},
{debut: {$gte: 1990}}
]
},
fields: ['_id']
});
}).then(function (res) {
res.docs.sort(sortById);
res.docs.should.deep.equal([{_id: 'yoshi'}]);
});
});
it('should work with $and 4, wrong index', function () {
var db = context.db;
return db.createIndex({
"index": {
"fields": ["rank"]
}
}).then(function () {
return db.find({
selector: {
$and: [
{series: 'Mario'},
{debut: {$gte: 1990}}
]
},
fields: ['_id']
}).then(function (resp) {
resp.docs.should.deep.equal([{_id: 'yoshi'}]);
});
});
});
});