blob: 9620b0c161173e942fa0d50c5e440d6d1829917b [file] [log] [blame]
'use strict';
var adapters = ['http', 'local'];
adapters.forEach(function (adapter) {
describe('test.revs_diff.js-' + adapter, function () {
var dbs = {};
beforeEach(function () {
dbs.name = testUtils.adapterUrl(adapter, 'testdb');
});
afterEach(function (done) {
testUtils.cleanup([dbs.name], done);
});
it('Test revs diff', function (done) {
var db = new PouchDB(dbs.name, {auto_compaction: false});
var revs = [];
db.post({
test: 'somestuff',
_id: 'somestuff'
}, function (err, info) {
revs.push(info.rev);
db.put({
_id: info.id,
_rev: info.rev,
another: 'test'
}, function (err, info2) {
revs.push(info2.rev);
db.revsDiff({ 'somestuff': revs }, function (err, results) {
results.should.not.include.keys('somestuff');
revs.push('2-randomid');
db.revsDiff({ 'somestuff': revs }, function (err, results) {
results.should.include.keys('somestuff');
results.somestuff.missing.should.have.length(1);
done();
});
});
});
});
});
it('Test revs diff with opts object', function (done) {
var db = new PouchDB(dbs.name, {auto_compaction: false});
var revs = [];
db.post({
test: 'somestuff',
_id: 'somestuff'
}, function (err, info) {
revs.push(info.rev);
db.put({
_id: info.id,
_rev: info.rev,
another: 'test'
}, function (err, info2) {
revs.push(info2.rev);
db.revsDiff({ 'somestuff': revs }, {}, function (err, results) {
results.should.not.include.keys('somestuff');
revs.push('2-randomid');
db.revsDiff({ 'somestuff': revs }, function (err, results) {
results.should.include.keys('somestuff');
results.somestuff.missing.should.have.length(1);
done();
});
});
});
});
});
it('Missing docs should be returned with all revisions', function (done) {
var db = new PouchDB(dbs.name);
var revs = ['1-a', '2-a', '2-b'];
db.revsDiff({'foo': revs }, function (err, results) {
results.should.include.keys('foo');
results.foo.missing.should.deep.equal(revs, 'listed all revs');
done();
});
});
it('Conflicting revisions that are available', function (done) {
var doc = {_id: '939', _rev: '1-a'};
function createConflicts(db, callback) {
db.put(doc, { new_edits: false }, function () {
testUtils.putAfter(db, {
_id: '939',
_rev: '2-a'
}, '1-a', function () {
testUtils.putAfter(db, {
_id: '939',
_rev: '2-b'
}, '1-a', callback);
});
});
}
var db = new PouchDB(dbs.name, {auto_compaction: false});
createConflicts(db, function () {
db.revsDiff({'939': ['1-a', '2-a', '2-b']}, function (err, results) {
results.should.not.include.keys('939');
done();
});
});
});
it('Deleted revisions that are available', function (done) {
function createDeletedRevision(db, callback) {
db.put({
_id: '935',
_rev: '1-a'
}, { new_edits: false }, function () {
testUtils.putAfter(db, {
_id: '935',
_rev: '2-a',
_deleted: true
}, '1-a', callback);
});
}
var db = new PouchDB(dbs.name);
createDeletedRevision(db, function () {
db.revsDiff({'935': ['1-a', '2-a']}, function (err, results) {
results.should.not.include.keys('939');
done();
});
});
});
it('Revs diff with empty revs', function () {
var db = new PouchDB(dbs.name);
return db.revsDiff({}).then(function (res) {
should.exist(res);
});
});
it('Test revs diff with reserved ID', function (done) {
var db = new PouchDB(dbs.name, {auto_compaction: false});
var revs = [];
db.post({
test: 'constructor',
_id: 'constructor'
}, function (err, info) {
revs.push(info.rev);
db.put({
_id: info.id,
_rev: info.rev,
another: 'test'
}, function (err, info2) {
revs.push(info2.rev);
db.revsDiff({ 'constructor': revs }, function (err, results) {
results.should.not.include.keys('constructor');
revs.push('2-randomid');
db.revsDiff({ 'constructor': revs }, function (err, results) {
results.should.include.keys('constructor');
results.constructor.missing.should.have.length(1);
done();
});
});
});
});
});
});
});