blob: f0f9590b1cf678725102e19b67289eee8c958090 [file] [log] [blame]
'use strict';
if (!process.env.LEVEL_ADAPTER &&
!process.env.LEVEL_PREFIX &&
!process.env.AUTO_COMPACTION &&
!process.env.ADAPTER) {
// these tests don't make sense for anything other than default leveldown
var fs = require('fs');
var ncp = require('ncp').ncp;
ncp.limit = 16;
describe('migration one', function () {
beforeEach(function (done) {
var input =
fs.createReadStream('./tests/integration/leveldb/oldStyle.uuid');
input.on('end', function () {
ncp('./tests/integration/leveldb/oldStyle',
'./tmp/_pouch_oldStyle', done);
});
input.pipe(fs.createWriteStream('./tmp/_pouch_oldStyle.uuid'));
});
it('should work', function () {
var db = new PouchDB('oldStyle');
return db.get('doc').then(function (doc) {
doc.something.should.equal('awesome');
return db.destroy();
});
});
});
describe('migration two', function () {
beforeEach(function (done) {
ncp('./tests/integration/leveldb/middleStyle',
'./tmp/_pouch_middleStyle', done);
});
it('should work', function () {
var db = new PouchDB('middleStyle');
return db.id().then(function (id) {
id.should.equal('8E049E64-784A-3209-8DD6-97C29D7A5868');
return db.get('_local/foo');
}).then(function (resp) {
resp.something.should.equal('else');
return db.allDocs();
}).then(function (resp) {
resp.total_rows.should.equal(1);
resp.rows[0].id.should.equal('_design/foo');
return db.destroy();
});
});
});
// sanity check to ensure we don't actually need to migrate
// attachments for #2818
describe('#2818 no migration needed for attachments', function () {
beforeEach(function (done) {
ncp('./tests/integration/leveldb/lateStyle',
'./tmp/_pouch_lateStyle', done);
});
it('should work', function () {
var db = new PouchDB('lateStyle', { auto_compaction: false });
return db.put({
_id: 'doc_b',
_attachments: {
'att.txt': {
data: 'Zm9v', // 'foo'
content_type: 'text/plain'
}
}
}).then(function () {
return db.get('doc_b');
}).then(function (doc) {
return db.remove(doc);
}).then(function () {
return db.compact();
}).then(function () {
return db.get('doc_a', {attachments: true});
}).then(function (doc) {
doc._attachments['att.txt'].data.should.equal('Zm9vYmFy');
doc._attachments['att2.txt'].data.should.equal('Zm9vYmFy');
doc._attachments['att3.txt'].data.should.equal('Zm9v');
return db.destroy();
});
});
});
// Sanity check for the fix in 3136 that guards against successive
// new_edits to the same rev, ensuring it ignores duplicates.
//
// In the olden days, <=3.2.0, if you bulk-pushed with new_edits=false
// the same rev multiple times, LevelDB would keep incrementing the seq
// and keep writing new revs. This was fixed, but when we do _changes,
// we have to guard against these duplicate seqs for backwards compat.
//
// This test is very similar to the test.bulk_docs.js test:
// 'Testing successive new_edits to the same doc, different content'
describe('#3136 no migration needed for overwritten revs', function () {
beforeEach(function (done) {
ncp('./tests/integration/leveldb/laterStyle',
'./tmp/_pouch_laterStyle', done);
});
it('should work', function () {
var db = new PouchDB('laterStyle');
// basically this a db where I did a very pathological thing:
//var docsA = [{
// '_id': 'foo',
// '_rev': '1-x',
// 'bar' : 'baz',
// '_revisions': {
// 'start': 1,
// 'ids': ['x']
// }
//}, {
// '_id' : 'fee',
// '_rev': '1-x',
// '_revisions': {
// 'start': 1,
// 'ids': ['x']
// }
//}];
//var docsB = [{
// '_id': 'foo',
// '_rev': '1-x',
// 'bar' : 'zam', // this update should be rejected
// '_revisions': {
// 'start': 1,
// 'ids': ['x']
// }
//}];
//
//db.bulkDocs(docsA, {new_edits: false});
//db.bulkDocs(docsB, {new_edits: false});
return db.changes({
include_docs: true,
return_docs: true
}).then(function (result) {
// the important thing is that 'zam' is ignored. see
// the other test in test.bulk_docs.js for details
var expected = {
"results": [{
"id": "fee",
"changes": [{"rev": "1-x"}],
"doc": {"_id": "fee", "_rev": "1-x"},
"seq": 1
}, {
"id": "foo",
"changes": [{"rev": "1-x"}],
"doc": {"bar": "baz", "_id": "foo", "_rev": "1-x"},
"seq": 2
}],
"last_seq": 2
};
result.should.deep.equal(expected);
return db.destroy();
});
});
});
}