query.stream.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. var assert = require('assert');
  2. var Waterline = require('../../../lib/waterline');
  3. describe('Collection Query ::', function() {
  4. describe('.stream()', function() {
  5. var query;
  6. var records = [];
  7. for (var i = 1; i <= 100; i++) {
  8. records.push({
  9. id: i,
  10. name: 'user_' + i
  11. });
  12. }
  13. before(function(done) {
  14. var waterline = new Waterline();
  15. var Model = Waterline.Model.extend({
  16. identity: 'user',
  17. datastore: 'foo',
  18. primaryKey: 'id',
  19. attributes: {
  20. id: {
  21. type: 'number'
  22. },
  23. name: {
  24. type: 'string',
  25. defaultsTo: 'Foo Bar'
  26. }
  27. }
  28. });
  29. waterline.registerModel(Model);
  30. // Fixture Adapter Def
  31. var adapterDef = {
  32. find: function(datastore, query, cb) {
  33. return cb(undefined, records.slice(query.criteria.skip, query.criteria.skip + query.criteria.limit));
  34. }
  35. };
  36. var connections = {
  37. 'foo': {
  38. adapter: 'foobar'
  39. }
  40. };
  41. waterline.initialize({ adapters: { foobar: adapterDef }, datastores: connections }, function(err, orm) {
  42. if (err) {
  43. return done(err);
  44. }
  45. query = orm.collections.user;
  46. return done();
  47. });
  48. });
  49. it('should allow streaming a single record at a time', function(done) {
  50. var sum = 0;
  51. var stream = query.stream({}).eachRecord(function(rec, next) {
  52. sum += rec.id;
  53. return next();
  54. }).exec(function(err) {
  55. if (err) {return done(err);}
  56. try {
  57. assert.equal(sum, 5050);
  58. } catch (e) {return done(e);}
  59. return done();
  60. });
  61. });
  62. it('should allow streaming a batch of records at a time', function(done) {
  63. var batch = 0;
  64. var stream = query.stream({}).eachBatch(function(recs, next) {
  65. batch += recs.length;
  66. return next();
  67. }).exec(function(err) {
  68. if (err) {return done(err);}
  69. try {
  70. assert.equal(batch, 100);
  71. } catch (e) {return done(e);}
  72. return done();
  73. });
  74. });
  75. it('should work correctly with `.skip()` and `.limit()`', function(done) {
  76. var sum = 0;
  77. var stream = query.stream({}).skip(10).limit(50).eachRecord(function(rec, next) {
  78. sum += rec.id;
  79. return next();
  80. }).exec(function(err) {
  81. if (err) {return done(err);}
  82. try {
  83. assert.equal(sum, 1775);
  84. } catch (e) {return done(e);}
  85. return done();
  86. });
  87. });
  88. });
  89. });