belongsTo.js 2.4 KB

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