| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- "use strict";
- var assert = require("assert"),
- DocumentSource = require("../../../../lib/pipeline/documentSources/DocumentSource"),
- LimitDocumentSource = require("../../../../lib/pipeline/documentSources/LimitDocumentSource"),
- CursorDocumentSource = require("../../../../lib/pipeline/documentSources/CursorDocumentSource"),
- ArrayRunner = require("../../../../lib/query/ArrayRunner");
- var addSource = function addSource(ds, data) {
- var cds = new CursorDocumentSource(null, new ArrayRunner(data), null);
- ds.setSource(cds);
- };
- module.exports = {
- "LimitDocumentSource": {
- "constructor()": {
- "should not throw Error when constructing without args": function testConstructor(next){
- assert.doesNotThrow(function(){
- new LimitDocumentSource();
- return next();
- });
- }
- },
- /** A limit does not introduce any dependencies. */
- "#getDependencies": {
- "limits do not create dependencies": function(next) {
- var lds = LimitDocumentSource.createFromJson(1, null),
- deps = {};
- assert.equal(DocumentSource.GetDepsReturn.SEE_NEXT, lds.getDependencies(deps));
- assert.equal(0, Object.keys(deps).length);
- return next();
- }
- },
- "#getSourceName()": {
- "should return the correct source name; $limit": function testSourceName(next){
- var lds = new LimitDocumentSource();
- assert.strictEqual(lds.getSourceName(), "$limit");
- return next();
- }
- },
- "#getFactory()": {
- "should return the constructor for this class": function factoryIsConstructor(next){
- assert.strictEqual(new LimitDocumentSource().getFactory(), LimitDocumentSource);
- return next();
- }
- },
- "#coalesce()": {
- "should return false if nextSource is not $limit": function dontSkip(next){
- var lds = new LimitDocumentSource();
- assert.equal(lds.coalesce({}), false);
- return next();
- },
- "should return true if nextSource is $limit": function changeLimit(next){
- var lds = new LimitDocumentSource();
- assert.equal(lds.coalesce(new LimitDocumentSource()), true);
- return next();
- }
- },
- "#getNext()": {
- "should throw an error if no callback is given": function(next) {
- var lds = new LimitDocumentSource();
- assert.throws(lds.getNext.bind(lds));
- return next();
- },
- /** Exhausting a DocumentSourceLimit disposes of the limit's source. */
- "should return the current document source": function currSource(next){
- var lds = new LimitDocumentSource({"$limit":[{"a":1},{"a":2}]});
- lds.limit = 1;
- addSource(lds, [{item:1}]);
- lds.getNext(function(err,val) {
- assert.deepEqual(val, { item:1 });
- return next();
- });
- },
- /** Exhausting a DocumentSourceLimit disposes of the pipeline's DocumentSourceCursor. */
- "should return EOF for no sources remaining": function noMoar(next){
- var lds = new LimitDocumentSource({"$match":[{"a":1},{"a":1}]});
- lds.limit = 1;
- addSource(lds, [{item:1}]);
- lds.getNext(function(){});
- lds.getNext(function(err,val) {
- assert.strictEqual(val, null);
- return next();
- });
- },
- "should return EOF if we hit our limit": function noMoar(next){
- var lds = new LimitDocumentSource();
- lds.limit = 1;
- addSource(lds, [{item:1},{item:2}]);
- lds.getNext(function(){});
- lds.getNext(function (err,val) {
- assert.strictEqual(val, null);
- return next();
- });
- }
- },
- "#serialize()": {
- "should create an object with a key $limit and the value equal to the limit": function sourceToJsonTest(next){
- var lds = new LimitDocumentSource();
- lds.limit = 9;
- var actual = lds.serialize(false);
- assert.deepEqual(actual, { "$limit": 9 });
- return next();
- }
- },
- "#createFromJson()": {
- "should return a new LimitDocumentSource object from an input number": function createTest(next){
- var t = LimitDocumentSource.createFromJson(5);
- assert.strictEqual(t.constructor, LimitDocumentSource);
- assert.strictEqual(t.limit, 5);
- return next();
- }
- }
- }
- };
- if (!module.parent)(new(require("mocha"))()).ui("exports").reporter("spec").addFile(__filename).run(process.exit);
|