Update now completely works with indexing, only remove needs to be tested

pull/2/head
Louis Chatriot 12 years ago
parent 6178a94997
commit 32f568d063
  1. 47
      test/db.test.js

@ -1636,6 +1636,53 @@ describe('Database', function () {
}); });
}); });
it('If a multi update violates a contraint, all changes are rolled back and an error is thrown', function (done) {
d.ensureIndex({ fieldName: 'a', unique: true });
d.ensureIndex({ fieldName: 'b', unique: true });
d.ensureIndex({ fieldName: 'c', unique: true });
d.insert({ a: 1, b: 10, c: 100 }, function (err, _doc1) {
d.insert({ a: 2, b: 20, c: 200 }, function (err, _doc2) {
d.insert({ a: 3, b: 30, c: 300 }, function (err, _doc3) {
// Will conflict with doc3
d.update({ a: { $in: [1, 2] } }, { $inc: { a: 10, c: 1000 }, $set: { b: 30 } }, { multi: true }, function (err) {
var data = d.getAllData()
, doc1 = _.find(data, function (doc) { return doc._id === _doc1._id; })
, doc2 = _.find(data, function (doc) { return doc._id === _doc2._id; })
, doc3 = _.find(data, function (doc) { return doc._id === _doc3._id; })
;
err.errorType.should.equal('uniqueViolated');
// Data left unchanged
data.length.should.equal(3);
assert.deepEqual(doc1, { a: 1, b: 10, c: 100, _id: _doc1._id });
assert.deepEqual(doc2, { a: 2, b: 20, c: 200, _id: _doc2._id });
assert.deepEqual(doc3, { a: 3, b: 30, c: 300, _id: _doc3._id });
// All indexes left unchanged and pointing to the same docs
d.indexes.a.tree.getNumberOfKeys().should.equal(3);
d.indexes.a.getMatching(1)[0].should.equal(doc1);
d.indexes.a.getMatching(2)[0].should.equal(doc2);
d.indexes.a.getMatching(3)[0].should.equal(doc3);
d.indexes.b.tree.getNumberOfKeys().should.equal(3);
d.indexes.b.getMatching(10)[0].should.equal(doc1);
d.indexes.b.getMatching(20)[0].should.equal(doc2);
d.indexes.b.getMatching(30)[0].should.equal(doc3);
d.indexes.c.tree.getNumberOfKeys().should.equal(3);
d.indexes.c.getMatching(100)[0].should.equal(doc1);
d.indexes.c.getMatching(200)[0].should.equal(doc2);
d.indexes.c.getMatching(300)[0].should.equal(doc3);
done();
});
});
});
});
});
}); // ==== End of 'Updating indexes upon document update' ==== // }); // ==== End of 'Updating indexes upon document update' ==== //

Loading…
Cancel
Save