blob: e7e37652753c07cf92b487a9bbdcf9c191d89392 [file] [log] [blame]
'use strict';
var adapters = ['local'];
adapters.forEach(function (adapter) {
describe('test.events.js-' + adapter, function () {
var dbs = {};
beforeEach(function (done) {
dbs.name = testUtils.adapterUrl(adapter, 'testdb');
testUtils.cleanup([dbs.name], done);
});
after(function (done) {
testUtils.cleanup([dbs.name], done);
});
it('PouchDB emits creation event', function (done) {
PouchDB.once('created', function (name) {
name.should.equal(dbs.name, 'should be same thing');
done();
});
new PouchDB(dbs.name);
});
it('PouchDB emits destruction event', function (done) {
new PouchDB(dbs.name, function (err, db) {
db.destroy();
}).once('destroyed', function () {
new PouchDB(dbs.name, function () {
done();
});
});
});
it('PouchDB emits destruction event on PouchDB object', function (done) {
PouchDB.once('destroyed', function (name) {
name.should.equal(dbs.name, 'should have the same name');
new PouchDB(dbs.name, function () {
done();
});
});
new PouchDB(dbs.name, function (err, db) {
db.destroy();
});
});
it('emit creation event', function (done) {
var db = new PouchDB(dbs.name).on('created', function (newDB) {
db.should.equal(newDB, 'should be same thing');
done();
});
});
it('emit changes event', function (done) {
new PouchDB(dbs.name, function (err, db) {
var obj = {
something: 'here',
somethingElse: 'overHere'
};
var isCancelled = false;
db.on('change', function (change) {
if (change.doc.something === 'here') {
isCancelled = true;
done(err);
}
});
// on('change') sets up the listener asynchronously.
// keep posting until a change is recognised
var docId = 0;
function doPut() {
if (!isCancelled) {
db.put(obj, 'change_' + docId++);
setTimeout(doPut, 100);
}
}
doPut();
});
});
it('emit changes event with existing docs', function (done) {
new PouchDB(dbs.name, function (err, db) {
var obj = {
something: 'here',
somethingElse: 'overHere'
};
db.put({'foo': 'bar'}, 'foo').then(function () {
var isCancelled = false;
db.on('change', function (change) {
if (change.doc.something === 'here') {
isCancelled = true;
done(err);
}
});
// on('change') sets up the listener asynchronously.
// keep posting until a change is recognised
var docId = 0;
function doPut() {
if (!isCancelled) {
db.put(obj, 'change_' + docId++);
setTimeout(doPut, 100);
}
}
doPut();
});
});
});
it.skip('emit changes event with existing docs', function (done) {
new PouchDB(dbs.name, function (err, db) {
var id = 'emiting';
var obj = {
something: 'here',
somethingElse: 'overHere'
};
db.put({'foo': 'bar'}, 'foo');
db.on('change', function (change) {
change.id.should.equal('emiting');
change.seq.should.equal(2, 'changed');
done(err);
});
db.put(obj, id);
});
});
it('emit create event', function (done) {
new PouchDB(dbs.name, function (err, db) {
var isCancelled = false;
var timer;
var obj = {
something: 'here',
somethingElse: 'overHere'
};
db.on('create', function (change) {
isCancelled = true;
clearTimeout(timer);
done(err);
});
var i = 0;
function doCreate() {
if (!isCancelled) {
db.put(obj, 'creating_' + (++i));
timer = setTimeout(doCreate, 100);
}
}
doCreate();
});
});
it('emit update event', function (done) {
new PouchDB(dbs.name, function (err, db) {
var id = 'updating';
var obj = {
something: 'here',
somethingElse: 'overHere'
};
db.on('update', function (change) {
change.id.should.equal('updating');
change.seq.should.equal(2, 'seq 2, updated');
done(err);
});
db.put(obj, id).then(function (doc) {
db.put({'something': 'else'}, id, doc.rev);
});
});
});
it('emit delete event', function (done) {
new PouchDB(dbs.name, function (err, db) {
var id = 'emiting';
var obj = {
something: 'here',
somethingElse: 'overHere'
};
db.on('delete', function (change) {
change.seq.should.equal(2, 'deleted');
change.id.should.equal('emiting');
done(err);
});
db.put(obj, id).then(function (doc) {
db.remove({
_id: id,
_rev: doc.rev
});
});
});
});
});
});