diff --git a/test/db.test.js b/test/db.test.js index f700be9..1ef43e6 100644 --- a/test/db.test.js +++ b/test/db.test.js @@ -15,7 +15,10 @@ describe('Database', function () { var d; beforeEach(function (done) { - d = new Datastore(testDb); + d = new Datastore({ filename: testDb }); + d.filename.should.equal(testDb); + d.pipeline.should.equal(false); + d.inMemoryOnly.should.equal(false); async.waterfall([ function (cb) { @@ -39,6 +42,23 @@ describe('Database', function () { }); + it('Constructor compatibility with v0.6-', function () { + var dbef = new Datastore('somefile'); + dbef.filename.should.equal('somefile'); + dbef.pipeline.should.equal(false); + dbef.inMemoryOnly.should.equal(false); + + var dbef = new Datastore(''); + assert.isNull(dbef.filename); + dbef.pipeline.should.equal(false); + dbef.inMemoryOnly.should.equal(true); + + var dbef = new Datastore(); + assert.isNull(dbef.filename); + dbef.pipeline.should.equal(false); + dbef.inMemoryOnly.should.equal(true); + }); + describe('Loading the database data from file and persistence', function () { @@ -1890,10 +1910,44 @@ describe('Database', function () { }); // ==== End of 'Removing indexes upon document update' ==== // + }); // ==== End of 'Using indexes' ==== // + describe.only('Pipelining', function () { - }); // ==== End of 'Using indexes' ==== // + it('Can insert documents and persist them', function (done) { + d = new Datastore({ filename: testDb, pipeline: true }); + d.filename.should.equal(testDb); + d.pipeline.should.equal(true); + d.inMemoryOnly.should.equal(false); + assert.isDefined(d.persistenceExecutor); + + d.insert({ f: 12 }, function (err, doc12) { + assert.isNull(err); + d.insert({ f: 5 }, function (err, doc5) { + assert.isNull(err); + d.insert({ f: 31 }, function (err, doc31) { + assert.isNull(err); + + // Need to wait a bit for persistence pipeline to be taken care of + // 2ms is enough but let's use 50 to be really sure tests don't fail for a bad reason + setTimeout(function () { + var rawData = fs.readFileSync(testDb, 'utf8') + , treatedData = Datastore.treatRawData(rawData) + ; + + treatedData.sort(function (a, b) { return a.f - b.f; }); + treatedData.length.should.equal(3); + assert.deepEqual(treatedData[0], doc5); + + done(); + }, 50); + }); + }); + }); + }); + + }); // ==== End of 'Pipelining' ==== // });