UNPKG

marsdb

Version:

MarsDB is a lightweight client-side MongoDB-like database, Promise based, written in ES6

112 lines (102 loc) 3.43 kB
import StorageManager from '../../lib/StorageManager'; import chai from 'chai'; import sinon from 'sinon'; chai.use(require('chai-as-promised')); chai.use(require('sinon-chai')); chai.should(); describe('StorageManager', () => { it('should be created', () => { const db = new StorageManager(); }); it('should reload storage after running reloading', function () { const db = new StorageManager(); const cb = sinon.spy(); return db.loaded().then(() => { db.reload().then(cb); db.reload().then(() => cb.should.have.callCount(1)); db.reload().then(() => cb.should.have.callCount(2)); db.reload().then(() => cb.should.have.callCount(3)); db.reload().then(() => cb.should.have.callCount(4)); }) }); it('should destroy storage', function () { const db = new StorageManager(); return db.persist('a', {_id: 'a', a: 1}).then(() => { return db.get('a').should.eventually.deep.equal({_id: 'a', a: 1}); }) .then(() => db.destroy()) .then(() => { return db.get('a').should.eventually.deep.equal(undefined); }); }); it('should be a able to persist', () => { const db = new StorageManager(); return db.persist('a', {_id: 'a', a: 1}).then(() => { return db.get('a').should.eventually.deep.equal({_id: 'a', a: 1}); }); }); it('should NOT clone object when getting', () => { const db = new StorageManager(); return db.persist('a', {_id: 'a', a: 1}).then(() => { return db.get('a'); }).then(doc => { doc.a = 2; return db.get('a'); }).then(doc => { doc.a.should.be.equal(2); }); }); it('should NOT clone objects when streaming', (done) => { const db = new StorageManager(); db.persist('a', {_id: 'a', a: 1}).then(() => { db.createReadStream() .on('data', (doc) => doc.value.a = 2) .on('end', () => { db.createReadStream() .on('data', (doc) => { doc.value.a.should.be.equal(2); }) .on('end', () => { done(); }) }) }); }); it('should be a able to persist with replace by id', () => { const db = new StorageManager(); return db.persist('a', {_id: 'a', a: 1}).then(() => { db.get('a').should.eventually.deep.equal({_id: 'a', a: 1}); return db.persist('a', {_id: 'a', b: 1}).then(() => { return db.get('a').should.eventually.deep.equal({_id: 'a', b: 1}); }); }); }); it('should be a able to delete', () => { const db = new StorageManager(); return db.persist('a', {_id: 'a', a: 1}).then(() => { return db.delete('a').then(() => { db.get('a').should.not.eventually.deep.equal({_id: 'a', a: 1}); return db.get('a').should.eventually.equal(undefined); }); }); }); it('should be a able to create a stream', () => { const db = new StorageManager(); return Promise.all([ db.persist('a', {_id: 'a', a: 1}), db.persist('b', {_id: 'b', b: 1}), db.persist('c', {_id: 'c', c: 1}), db.persist('d', {_id: 'd', d: 1}) ]).then(() => { return new Promise((resolve, reject) => { const givenIds = []; db.createReadStream() .on('data', d => givenIds.push(d.value._id)) .on('end', () => { givenIds.should.be.deep.equal(['a','b','c','d']); resolve(); }) }) }) }); });