Comparing version 0.5.2 to 0.5.3
@@ -90,2 +90,3 @@ 'use strict'; | ||
var storageManagerClass = options.storageManager || _defaultStorageManager; | ||
_this.cursorClass = options.cursorClass || _defaultCursorClass; | ||
_this.indexManager = new _IndexManager2.default(_this, options); | ||
@@ -294,3 +295,3 @@ _this.storageManager = new storageManagerClass(_this, options); | ||
return new _defaultCursorClass(this, query, options); | ||
return new this.cursorClass(this, query, options); | ||
} | ||
@@ -372,14 +373,26 @@ | ||
key: 'defaultStorageManager', | ||
value: function defaultStorageManager(managerClass) { | ||
_defaultStorageManager = managerClass; | ||
value: function defaultStorageManager() { | ||
if (arguments.length > 0) { | ||
_defaultStorageManager = arguments[0]; | ||
} else { | ||
return _defaultStorageManager; | ||
} | ||
} | ||
}, { | ||
key: 'defaultIdGenerator', | ||
value: function defaultIdGenerator(generator) { | ||
_defaultIdGenerator = generator; | ||
value: function defaultIdGenerator() { | ||
if (arguments.length > 0) { | ||
_defaultIdGenerator = arguments[0]; | ||
} else { | ||
return _defaultIdGenerator; | ||
} | ||
} | ||
}, { | ||
key: 'defaultCursorClass', | ||
value: function defaultCursorClass(cursorClass) { | ||
_defaultCursorClass = cursorClass; | ||
value: function defaultCursorClass() { | ||
if (arguments.length > 0) { | ||
_defaultCursorClass = arguments[0]; | ||
} else { | ||
return _defaultCursorClass; | ||
} | ||
} | ||
@@ -386,0 +399,0 @@ }]); |
@@ -317,19 +317,21 @@ 'use strict'; | ||
this._executing = this._prepareCursor(options).then(function () { | ||
return _this3._matchObjects(); | ||
}).then(function (docs) { | ||
var clonned = undefined; | ||
if (_this3.options.noClone) { | ||
clonned = docs; | ||
} else { | ||
clonned = (0, _map3.default)(docs, function (doc) { | ||
return _EJSON2.default.clone(doc); | ||
}); | ||
} | ||
if (!this._executing) { | ||
this._executing = this._prepareCursor(options).then(function () { | ||
return _this3._matchObjects(); | ||
}).then(function (docs) { | ||
var clonned = undefined; | ||
if (_this3.options.noClone) { | ||
clonned = docs; | ||
} else { | ||
clonned = (0, _map3.default)(docs, function (doc) { | ||
return _EJSON2.default.clone(doc); | ||
}); | ||
} | ||
return _this3.processPipeline(clonned); | ||
}).then(function (docs) { | ||
_this3._executing = null; | ||
return docs; | ||
}); | ||
return _this3.processPipeline(clonned); | ||
}).then(function (docs) { | ||
_this3._executing = null; | ||
return docs; | ||
}); | ||
} | ||
@@ -336,0 +338,0 @@ return this._executing; |
@@ -137,2 +137,3 @@ 'use strict'; | ||
_this2.removeListener('update', listener); | ||
_this2.removeListener('stop', stopper); | ||
_this2.emit('stopped', listener); | ||
@@ -301,9 +302,17 @@ }; | ||
key: 'defaultDebounce', | ||
value: function defaultDebounce(waitTime) { | ||
_defaultDebounce = waitTime; | ||
value: function defaultDebounce() { | ||
if (arguments.length > 0) { | ||
_defaultDebounce = arguments[0]; | ||
} else { | ||
return _defaultDebounce; | ||
} | ||
} | ||
}, { | ||
key: 'defaultBatchSize', | ||
value: function defaultBatchSize(batchSize) { | ||
_defaultBatchSize = batchSize; | ||
value: function defaultBatchSize() { | ||
if (arguments.length > 0) { | ||
_defaultBatchSize = arguments[0]; | ||
} else { | ||
return _defaultBatchSize; | ||
} | ||
} | ||
@@ -310,0 +319,0 @@ }]); |
@@ -14,6 +14,2 @@ 'use strict'; | ||
var _keys2 = require('fast.js/object/keys'); | ||
var _keys3 = _interopRequireDefault(_keys2); | ||
var _map2 = require('fast.js/map'); | ||
@@ -72,3 +68,3 @@ | ||
// Retrive optimally | ||
if (_checkTypes2.default.object(selectorIds) && (0, _keys3.default)(selectorIds).length > 0) { | ||
if (_checkTypes2.default.array(selectorIds) && selectorIds.length > 0) { | ||
return this.retriveIds(selectorIds); | ||
@@ -75,0 +71,0 @@ } else { |
@@ -52,2 +52,3 @@ 'use strict'; | ||
*/ | ||
/* istanbul ignore next */ | ||
@@ -54,0 +55,0 @@ var IndexManager = exports.IndexManager = (function () { |
@@ -10,2 +10,3 @@ 'use strict'; | ||
*/ | ||
/* istanbul ignore next */ | ||
var LocalPromise = typeof Promise !== 'undefined' ? Promise : function () { | ||
@@ -19,2 +20,3 @@ return { | ||
/* istanbul ignore next */ | ||
var noop = function noop() {}; | ||
@@ -26,2 +28,3 @@ | ||
*/ | ||
/* istanbul ignore next */ | ||
var resolveWith = function resolveWith(value) { | ||
@@ -64,2 +67,3 @@ if (value && typeof value.then === 'function') { | ||
*/ | ||
/* istanbul ignore next */ | ||
function Queue(maxPendingPromises, maxQueuedPromises) { | ||
@@ -76,2 +80,3 @@ this.pendingPromises = 0; | ||
*/ | ||
/* istanbul ignore next */ | ||
Queue.configure = function (GlobalPromise) { | ||
@@ -85,2 +90,3 @@ LocalPromise = GlobalPromise; | ||
*/ | ||
/* istanbul ignore next */ | ||
Queue.prototype.add = function (promiseGenerator) { | ||
@@ -112,2 +118,3 @@ var self = this; | ||
*/ | ||
/* istanbul ignore next */ | ||
Queue.prototype.getPendingLength = function () { | ||
@@ -122,2 +129,3 @@ return this.pendingPromises; | ||
*/ | ||
/* istanbul ignore next */ | ||
Queue.prototype.getQueueLength = function () { | ||
@@ -131,2 +139,3 @@ return this.queue.length; | ||
*/ | ||
/* istanbul ignore next */ | ||
Queue.prototype._dequeue = function () { | ||
@@ -133,0 +142,0 @@ var self = this; |
@@ -64,2 +64,3 @@ 'use strict'; | ||
} | ||
return this.loaded(); | ||
} | ||
@@ -66,0 +67,0 @@ }, { |
@@ -36,2 +36,3 @@ import _each from 'fast.js/forEach'; | ||
const storageManagerClass = options.storageManager || _defaultStorageManager; | ||
this.cursorClass = options.cursorClass || _defaultCursorClass; | ||
this.indexManager = new IndexManager(this, options); | ||
@@ -42,14 +43,2 @@ this.storageManager = new storageManagerClass(this, options); | ||
static defaultStorageManager(managerClass) { | ||
_defaultStorageManager = managerClass; | ||
} | ||
static defaultIdGenerator(generator) { | ||
_defaultIdGenerator = generator; | ||
} | ||
static defaultCursorClass(cursorClass) { | ||
_defaultCursorClass = cursorClass; | ||
} | ||
get modelName() { | ||
@@ -65,2 +54,26 @@ return this._modelName; | ||
static defaultStorageManager() { | ||
if (arguments.length > 0) { | ||
_defaultStorageManager = arguments[0]; | ||
} else { | ||
return _defaultStorageManager; | ||
} | ||
} | ||
static defaultIdGenerator() { | ||
if (arguments.length > 0) { | ||
_defaultIdGenerator = arguments[0]; | ||
} else { | ||
return _defaultIdGenerator; | ||
} | ||
} | ||
static defaultCursorClass() { | ||
if (arguments.length > 0) { | ||
_defaultCursorClass = arguments[0]; | ||
} else { | ||
return _defaultCursorClass; | ||
} | ||
} | ||
/** | ||
@@ -222,3 +235,3 @@ * Factory for creating an object of the model | ||
find(query, options = {}) { | ||
return new _defaultCursorClass(this, query, options); | ||
return new (this.cursorClass)(this, query, options); | ||
} | ||
@@ -225,0 +238,0 @@ |
@@ -279,18 +279,20 @@ import _bind from 'fast.js/function/bind'; | ||
exec(options = {}) { | ||
this._executing = this._prepareCursor(options) | ||
.then(() => this._matchObjects()) | ||
.then(docs => { | ||
let clonned; | ||
if (this.options.noClone) { | ||
clonned = docs; | ||
} else { | ||
clonned = _map(docs, doc => EJSON.clone(doc)); | ||
} | ||
if (!this._executing) { | ||
this._executing = this._prepareCursor(options) | ||
.then(() => this._matchObjects()) | ||
.then(docs => { | ||
let clonned; | ||
if (this.options.noClone) { | ||
clonned = docs; | ||
} else { | ||
clonned = _map(docs, doc => EJSON.clone(doc)); | ||
} | ||
return this.processPipeline(clonned); | ||
}) | ||
.then(docs => { | ||
this._executing = null; | ||
return docs; | ||
}); | ||
return this.processPipeline(clonned); | ||
}) | ||
.then(docs => { | ||
this._executing = null; | ||
return docs; | ||
}); | ||
} | ||
@@ -297,0 +299,0 @@ return this._executing; |
@@ -29,8 +29,16 @@ import _bind from 'fast.js/function/bind'; | ||
static defaultDebounce(waitTime) { | ||
_defaultDebounce = waitTime; | ||
static defaultDebounce() { | ||
if (arguments.length > 0) { | ||
_defaultDebounce = arguments[0]; | ||
} else { | ||
return _defaultDebounce; | ||
} | ||
} | ||
static defaultBatchSize(batchSize) { | ||
_defaultBatchSize = batchSize; | ||
static defaultBatchSize() { | ||
if (arguments.length > 0) { | ||
_defaultBatchSize = arguments[0]; | ||
} else { | ||
return _defaultBatchSize; | ||
} | ||
} | ||
@@ -92,2 +100,3 @@ | ||
this.removeListener('update', listener); | ||
this.removeListener('stop', stopper); | ||
this.emit('stopped', listener); | ||
@@ -94,0 +103,0 @@ }; |
import _check from 'check-types'; | ||
import _keys from 'fast.js/object/keys'; | ||
import _map from 'fast.js/map'; | ||
@@ -48,3 +47,3 @@ import {selectorIsId, selectorIsIdPerhapsAsObject} from './Document'; | ||
// Retrive optimally | ||
if (_check.object(selectorIds) && _keys(selectorIds).length > 0) { | ||
if (_check.array(selectorIds) && selectorIds.length > 0) { | ||
return this.retriveIds(selectorIds); | ||
@@ -51,0 +50,0 @@ } else { |
@@ -17,2 +17,3 @@ import _bind from 'fast.js/function/bind'; | ||
*/ | ||
/* istanbul ignore next */ | ||
export class IndexManager { | ||
@@ -19,0 +20,0 @@ constructor(db, options = {}) { |
/** | ||
* @return {Object} | ||
*/ | ||
/* istanbul ignore next */ | ||
var LocalPromise = typeof Promise !== 'undefined' ? Promise : function() { | ||
@@ -12,2 +13,3 @@ return { | ||
/* istanbul ignore next */ | ||
var noop = function() {}; | ||
@@ -19,2 +21,3 @@ | ||
*/ | ||
/* istanbul ignore next */ | ||
var resolveWith = function(value) { | ||
@@ -57,2 +60,3 @@ if (value && typeof value.then === 'function') { | ||
*/ | ||
/* istanbul ignore next */ | ||
export default function Queue(maxPendingPromises, maxQueuedPromises) { | ||
@@ -69,2 +73,3 @@ this.pendingPromises = 0; | ||
*/ | ||
/* istanbul ignore next */ | ||
Queue.configure = function(GlobalPromise) { | ||
@@ -78,2 +83,3 @@ LocalPromise = GlobalPromise; | ||
*/ | ||
/* istanbul ignore next */ | ||
Queue.prototype.add = function(promiseGenerator) { | ||
@@ -105,2 +111,3 @@ var self = this; | ||
*/ | ||
/* istanbul ignore next */ | ||
Queue.prototype.getPendingLength = function() { | ||
@@ -115,2 +122,3 @@ return this.pendingPromises; | ||
*/ | ||
/* istanbul ignore next */ | ||
Queue.prototype.getQueueLength = function() { | ||
@@ -124,2 +132,3 @@ return this.queue.length; | ||
*/ | ||
/* istanbul ignore next */ | ||
Queue.prototype._dequeue = function() { | ||
@@ -126,0 +135,0 @@ var self = this; |
@@ -33,2 +33,3 @@ import _each from 'fast.js/forEach'; | ||
} | ||
return this.loaded(); | ||
} | ||
@@ -35,0 +36,0 @@ |
{ | ||
"name": "marsdb", | ||
"version": "0.5.2", | ||
"version": "0.5.3", | ||
"author": { | ||
@@ -5,0 +5,0 @@ "name": "Artem Artemev", |
import {Document} from '../../lib/Document'; | ||
import Collection from '../../lib/Collection'; | ||
import StorageManager from '../../lib/StorageManager'; | ||
import CursorObservable from '../../lib/CursorObservable'; | ||
import chai, {expect} from 'chai'; | ||
import sinon from 'sinon'; | ||
chai.use(require('chai-as-promised')); | ||
chai.use(require('sinon-chai')); | ||
chai.should(); | ||
@@ -9,15 +13,73 @@ | ||
describe('Collection', () => { | ||
it('should be created', () => { | ||
const db = new Collection('test'); | ||
db.modelName.should.be.a('string'); | ||
describe('#constructor', function () { | ||
it('should accept second argument with options', function () { | ||
class NewStorageManager {} | ||
function new_id_generator() {} | ||
class NewCursor {} | ||
const db = new Collection('test', { | ||
storageManager: NewStorageManager, | ||
idGenerator: new_id_generator, | ||
cursorClass: NewCursor, | ||
}); | ||
db.storageManager.should.be.an.instanceof(NewStorageManager); | ||
db.idGenerator.should.be.equal(new_id_generator); | ||
db.cursorClass.should.be.equal(NewCursor); | ||
}); | ||
}); | ||
it('should be a factory of documents', () => { | ||
const db = new Collection('test'); | ||
const doc = db.create({a: 2, b: 3}); | ||
doc.a.should.be.equal(2); | ||
doc.b.should.be.equal(3); | ||
describe('#create', function () { | ||
it('should return the same object if it is an Object', function () { | ||
const db = new Collection('test'); | ||
const raw = {a: 2, b: 3}; | ||
const doc = db.create(raw); | ||
doc.should.be.equal(raw); | ||
}); | ||
it('should make an object from string', function () { | ||
const db = new Collection('test'); | ||
const doc = db.create('{"a": 2, "b": 3}'); | ||
doc.a.should.be.equal(2); | ||
doc.b.should.be.equal(3); | ||
}); | ||
}); | ||
describe('#defaultStorageManager', function () { | ||
it('should return default in-memory StorageManager', function () { | ||
Collection.defaultStorageManager().should.be.equal(StorageManager); | ||
}); | ||
it('should set default storage manager', function () { | ||
const oldStorage = Collection.defaultStorageManager(); | ||
class NewStorageManager {} | ||
Collection.defaultStorageManager(NewStorageManager); | ||
Collection.defaultStorageManager().should.be.equal(NewStorageManager); | ||
Collection.defaultStorageManager(oldStorage); | ||
}); | ||
}); | ||
describe('#defaultIdGenerator', function () { | ||
it('should set default id generator', function () { | ||
const oldGenerator = Collection.defaultIdGenerator(); | ||
function new_id_generator() {} | ||
Collection.defaultIdGenerator(new_id_generator); | ||
Collection.defaultIdGenerator().should.be.equal(new_id_generator); | ||
Collection.defaultIdGenerator(oldGenerator); | ||
}); | ||
}); | ||
describe('#defaultCursorClass', function () { | ||
it('should return default CursorObservable', function () { | ||
Collection.defaultCursorClass().should.be.equal(CursorObservable); | ||
}); | ||
it('should set default Cursor class', function () { | ||
const oldCursor = Collection.defaultCursorClass(); | ||
class NewCursor {} | ||
Collection.defaultCursorClass(NewCursor); | ||
Collection.defaultCursorClass().should.be.equal(NewCursor); | ||
Collection.defaultCursorClass(oldCursor); | ||
}); | ||
}); | ||
describe('#modelName', function () { | ||
@@ -59,3 +121,3 @@ it('should return name of the model', function () { | ||
describe('#ensureIndex', function () { | ||
/*it('should ensure index', function () { | ||
it('should ensure index', function () { | ||
const db = new Collection('test'); | ||
@@ -70,3 +132,3 @@ return Promise.all([ | ||
expect(db.indexes.a).to.be.an('object'); | ||
db.indexes.a.getAll().should.to.have.length(3); | ||
//db.indexes.a.getAll().should.to.have.length(3); | ||
}); | ||
@@ -81,3 +143,3 @@ }); | ||
(() => db.ensureIndex({fieldName: null})).should.throw(Error); | ||
});*/ | ||
}); | ||
}); | ||
@@ -123,3 +185,2 @@ | ||
/* | ||
it('should index a doucmnet', function () { | ||
@@ -130,6 +191,14 @@ const db = new Collection('test'); | ||
}).then((docId) => { | ||
db.indexes.test.getAll().should.have.length(1); | ||
db.indexes.test.getAll()[0].should.be.equals(docId); | ||
//db.indexes.test.getAll().should.have.length(1); | ||
//db.indexes.test.getAll()[0].should.be.equals(docId); | ||
}); | ||
});*/ | ||
}); | ||
it('should be quiet if options.quiet passed', function () { | ||
const db = new Collection('test'); | ||
const cb = sinon.spy(); | ||
db.on('sync:insert', cb); | ||
db.insert({a: 1}, {quiet: true}); | ||
cb.should.have.callCount(0); | ||
}); | ||
}); | ||
@@ -203,3 +272,2 @@ | ||
/* | ||
it('should deindex a doucmnet', function () { | ||
@@ -212,7 +280,15 @@ const db = new Collection('test'); | ||
}).then((removedDocs) => { | ||
db.indexes.a.getAll().should.have.length(1); | ||
//db.indexes.a.getAll().should.have.length(1); | ||
expect(removedDocs).to.be.an('array'); | ||
removedDocs.should.have.length(2); | ||
}); | ||
});*/ | ||
}); | ||
it('should be quiet if options.quiet passed', function () { | ||
const db = new Collection('test'); | ||
const cb = sinon.spy(); | ||
db.on('sync:remove', cb); | ||
db.remove({}, {quiet: true, multi: true}); | ||
cb.should.have.callCount(0); | ||
}); | ||
}); | ||
@@ -241,11 +317,22 @@ | ||
it('should emit events and can be quiet', function () { | ||
const db = new Collection('test'); | ||
const cb = sinon.spy(); | ||
db.on('sync:update', cb); | ||
db.update({}, {$set: {a: 1}}, {}); | ||
cb.should.have.callCount(1); | ||
}); | ||
it('should be quiet if options.quiet passed', function () { | ||
const db = new Collection('test'); | ||
const cb = sinon.spy(); | ||
db.on('sync:update', cb); | ||
db.update({}, {$set: {a: 1}}, {quiet: true}); | ||
cb.should.have.callCount(0); | ||
}); | ||
it('should update index of a doucmnet', function () { | ||
// TODO | ||
}); | ||
}); | ||
/* | ||
describe('#getIndexIds', function () { | ||
@@ -259,6 +346,6 @@ it('should return all indexed document ids', function () { | ||
]).then((docs) => { | ||
db.getIndexIds().should.have.length(3); | ||
db.getIndexIds(); //.should.have.length(3); | ||
}) | ||
}); | ||
});*/ | ||
}); | ||
@@ -273,3 +360,3 @@ describe('#findOne', function () { | ||
]).then((docs) => { | ||
return db.findOne({a: 2}); | ||
return db.findOne({a: 2}, {}, {}); | ||
}).then((doc) => { | ||
@@ -304,3 +391,3 @@ expect(doc).to.be.an('object'); | ||
]).then((docs) => { | ||
return db.count({a: {$in: [1, 3]}}); | ||
return db.count({a: {$in: [1, 3]}}, {}); | ||
}).then((num) => { | ||
@@ -334,3 +421,3 @@ num.should.be.equals(2); | ||
]).then((docs) => { | ||
return db.ids({a: {$in: [1, 3]}}); | ||
return db.ids({a: {$in: [1, 3]}}, {}); | ||
}).then((ids) => { | ||
@@ -337,0 +424,0 @@ expect(ids).to.be.an('array'); |
@@ -31,2 +31,15 @@ import Collection from '../../lib/Collection'; | ||
describe('#exec', function () { | ||
it('should execute only once with multiple calls', function () { | ||
const cursor = new Cursor(db); | ||
cursor.find({b: {$gt: 4}}).skip(1).sort({b: 1}); | ||
const promise = cursor.exec(); | ||
cursor.exec().should.be.equal(promise); | ||
cursor.exec().should.be.equal(promise); | ||
return promise.then(() => { | ||
const anotherPromise = cursor.exec() | ||
anotherPromise.should.not.be.equal(promise); | ||
return anotherPromise; | ||
}) | ||
}); | ||
it('should clone docs by default', function () { | ||
@@ -33,0 +46,0 @@ const cursor = new Cursor(db); |
@@ -27,6 +27,28 @@ import Collection from '../../lib/Collection'; | ||
it('should be created with db and query', () => { | ||
const cursor = new CursorObservable(db, {}); | ||
describe('#defaultDebounce', function () { | ||
it('should return default 1000/60', function () { | ||
CursorObservable.defaultDebounce().should.be.equal(1000/60); | ||
}); | ||
it('should set default debounce time', function () { | ||
const oldDebounce = CursorObservable.defaultDebounce(); | ||
const newDebouce = 100; | ||
CursorObservable.defaultDebounce(newDebouce); | ||
CursorObservable.defaultDebounce().should.be.equal(newDebouce); | ||
CursorObservable.defaultDebounce(oldDebounce); | ||
}); | ||
}); | ||
describe('#defaultBatchSize', function () { | ||
it('should return default 10', function () { | ||
CursorObservable.defaultBatchSize().should.be.equal(10); | ||
}); | ||
it('should set default batch size', function () { | ||
const oldBatchSize = CursorObservable.defaultBatchSize(); | ||
const newBatchSize = 100; | ||
CursorObservable.defaultBatchSize(newBatchSize); | ||
CursorObservable.defaultBatchSize().should.be.equal(newBatchSize); | ||
CursorObservable.defaultBatchSize(oldBatchSize); | ||
}); | ||
}); | ||
describe('#whenNotExecuting', function () { | ||
@@ -59,2 +81,34 @@ it('should wait until request processed', function (done) { | ||
describe('#stopObservers', function () { | ||
it('should stop all listeners', function () { | ||
const cursor = new CursorObservable(db); | ||
const cb1 = sinon.spy(); | ||
const cb2 = sinon.spy(); | ||
cursor.on('stop', cb1); | ||
cursor.on('stop', cb2); | ||
cursor.emit('stop'); | ||
cb1.should.have.callCount(1); | ||
cb2.should.have.callCount(1); | ||
cursor.stopObservers(); | ||
cb1.should.have.callCount(2); | ||
cb2.should.have.callCount(2); | ||
}); | ||
it('should cancel any active updates', function (done) { | ||
const cursor = new CursorObservable(db); | ||
const cb1 = sinon.spy(); | ||
cursor.on('update', cb1); | ||
cursor.debounce(10); | ||
cursor.update(); | ||
cursor.update(); | ||
cb1.should.have.callCount(0); | ||
cursor.stopObservers(); | ||
setTimeout(() => { | ||
cb1.should.have.callCount(0); | ||
done(); | ||
}, 30); | ||
}); | ||
}); | ||
describe('#observe', function () { | ||
@@ -61,0 +115,0 @@ it('should support multiple declarative style observing', function (done) { |
import Collection from '../../lib/Collection'; | ||
import DocumentRetriver from '../../lib/DocumentRetriver'; | ||
import chai from 'chai'; | ||
import sinon from 'sinon'; | ||
chai.use(require('chai-as-promised')); | ||
chai.use(require('sinon-chai')); | ||
chai.should(); | ||
describe('DocumentRetriver', () => { | ||
describe('#constructor', function () { | ||
it('should be created', () => { | ||
const db = new Collection('test') | ||
const retr = new DocumentRetriver(db); | ||
}); | ||
let db, retr; | ||
beforeEach(function () { | ||
db = new Collection('test') | ||
retr = new DocumentRetriver(db); | ||
return Promise.all([ | ||
db.insert({a: 1, _id: '1'}), | ||
db.insert({a: 2, _id: '2'}), | ||
db.insert({a: 3, _id: '3'}), | ||
]); | ||
}); | ||
@@ -18,15 +25,33 @@ | ||
it('should retrive one by id if given an id', function () { | ||
return Promise.all([ | ||
retr.retriveForQeury('1').should.eventually.be.deep.equal([{a: 1, _id: '1'}]), | ||
]); | ||
}); | ||
it('should retrive one by id if given only object with id', function () { | ||
return Promise.all([ | ||
retr.retriveForQeury({_id: '1'}).should.eventually.be.deep.equal([{a: 1, _id: '1'}]), | ||
]); | ||
}); | ||
it('should retrive multiple by given list of ids', function () { | ||
return Promise.all([ | ||
retr.retriveForQeury({_id: {$in: ['1', '2']}}).should.eventually | ||
.be.deep.equal([{a: 1, _id: '1'}, {a: 2, _id: '2'}]), | ||
]); | ||
}); | ||
it('should retrive all if no ids provided', function () { | ||
return Promise.all([ | ||
retr.retriveForQeury({}).should.eventually.have.length(3), | ||
retr.retriveForQeury().should.eventually.have.length(3), | ||
retr.retriveForQeury(null).should.eventually.have.length(3), | ||
retr.retriveForQeury(undefined).should.eventually.have.length(3), | ||
retr.retriveForQeury({a: {$gte: 1}}).should.eventually.have.length(3), | ||
retr.retriveForQeury({a: {$gte: 2}}).should.eventually.have.length(3), | ||
retr.retriveForQeury({a: {$gte: 3}}).should.eventually.have.length(3), | ||
retr.retriveForQeury({_id: null}).should.eventually.have.length(3), | ||
retr.retriveForQeury({_id: undefined}).should.eventually.have.length(3), | ||
retr.retriveForQeury({_id: {$in: []}}).should.eventually.have.length(3), | ||
]); | ||
}); | ||
@@ -37,3 +62,8 @@ }); | ||
it('should retrive only documents by id', function () { | ||
return Promise.all([ | ||
retr.retriveIds([]).should.eventually.be.deep.equal([]), | ||
retr.retriveIds(['1']).should.eventually.be.deep.equal([{a: 1, _id: '1'}]), | ||
retr.retriveIds(['2', '1']).should.eventually | ||
.be.deep.equal([{a: 2, _id: '2'}, {a: 1, _id: '1'}]), | ||
]); | ||
}); | ||
@@ -40,0 +70,0 @@ }); |
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(); | ||
@@ -12,2 +14,25 @@ | ||
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', () => { | ||
@@ -14,0 +39,0 @@ const db = new StorageManager(); |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
822838
73
19281