hasMany.js 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. var assert = require('assert');
  2. var _ = require('@sailshq/lodash');
  3. var Waterline = require('../../../../lib/waterline');
  4. describe('Collection Query ::', function() {
  5. describe('has many association', function() {
  6. var User;
  7. var generatedQuery;
  8. before(function(done) {
  9. var waterline = new Waterline();
  10. var collections = {};
  11. collections.user = Waterline.Model.extend({
  12. identity: 'user',
  13. datastore: 'foo',
  14. primaryKey: 'uuid',
  15. attributes: {
  16. uuid: {
  17. type: 'number'
  18. },
  19. cars: {
  20. collection: 'car',
  21. via: 'driver'
  22. }
  23. }
  24. });
  25. collections.car = Waterline.Model.extend({
  26. identity: 'car',
  27. datastore: 'foo',
  28. primaryKey: 'id',
  29. attributes: {
  30. id: {
  31. type: 'number'
  32. },
  33. driver: {
  34. model: 'user'
  35. }
  36. }
  37. });
  38. waterline.registerModel(collections.user);
  39. waterline.registerModel(collections.car);
  40. // Fixture Adapter Def
  41. var adapterDef = {
  42. identity: 'foo',
  43. join: function(con, query, cb) {
  44. generatedQuery = query;
  45. return cb();
  46. },
  47. find: function(con, query, cb) {
  48. return cb();
  49. }
  50. };
  51. var connections = {
  52. 'foo': {
  53. adapter: 'foobar'
  54. }
  55. };
  56. waterline.initialize({ adapters: { foobar: adapterDef }, datastores: connections }, function(err, orm) {
  57. if (err) {
  58. return done(err);
  59. }
  60. User = orm.collections.user;
  61. return done();
  62. });
  63. });
  64. it('should build a join query', function(done) {
  65. User.findOne(1)
  66. .populate('cars')
  67. .exec(function(err) {
  68. if(err) {
  69. return done(err);
  70. }
  71. assert.equal(generatedQuery.joins[0].parent, 'user');
  72. assert.equal(generatedQuery.joins[0].parentKey, 'uuid');
  73. assert.equal(generatedQuery.joins[0].child, 'car');
  74. assert.equal(generatedQuery.joins[0].childKey, 'driver');
  75. assert(_.isArray(generatedQuery.joins[0].criteria.select));
  76. assert.equal(generatedQuery.joins[0].removeParentKey, false);
  77. return done();
  78. });
  79. });
  80. });
  81. });