transformations.serialize.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. var assert = require('assert');
  2. var _ = require('@sailshq/lodash');
  3. var Schema = require('waterline-schema');
  4. var Waterline = require('../../../../lib/waterline');
  5. var Transformer = require('../../../../lib/waterline/utils/system/transformer-builder');
  6. describe('Collection Transformations ::', function() {
  7. describe('Serialize ::', function() {
  8. describe('with normal key/value pairs', function() {
  9. var transformer;
  10. before(function() {
  11. var attributes = {
  12. name: 'string',
  13. username: {
  14. columnName: 'login'
  15. }
  16. };
  17. transformer = new Transformer(attributes, {});
  18. });
  19. it('should change username key to login', function() {
  20. var values = { username: 'foo' };
  21. transformer.serializeValues(values);
  22. assert(values.login);
  23. assert.equal(values.login, 'foo');
  24. });
  25. it('should work recursively', function() {
  26. var values = transformer.serializeCriteria({ where: { user: { username: 'foo' }}});
  27. assert(values.where.user.login);
  28. assert.equal(values.where.user.login, 'foo');
  29. });
  30. it('should work on SELECT queries', function() {
  31. var values = transformer.serializeCriteria(
  32. {
  33. where: {
  34. username: 'foo'
  35. },
  36. select: ['username']
  37. }
  38. );
  39. assert(values.where.login);
  40. assert.equal(_.indexOf(values.select, 'login'), 0);
  41. });
  42. });
  43. describe('with associations', function() {
  44. var transformer;
  45. /**
  46. * Build up real waterline schema for accurate testing
  47. */
  48. before(function() {
  49. var collections = [];
  50. collections.push(Waterline.Model.extend({
  51. identity: 'customer',
  52. tableName: 'customer',
  53. primaryKey: 'uuid',
  54. attributes: {
  55. uuid: {
  56. type: 'string'
  57. }
  58. }
  59. }));
  60. collections.push(Waterline.Model.extend({
  61. identity: 'foo',
  62. tableName: 'foo',
  63. primaryKey: 'id',
  64. attributes: {
  65. id: {
  66. type: 'number'
  67. },
  68. customer: {
  69. model: 'customer'
  70. }
  71. }
  72. }));
  73. var schema = new Schema(collections);
  74. transformer = new Transformer(schema.foo.attributes, schema.schema);
  75. });
  76. it('should change customer key to customer_uuid', function() {
  77. var values = { customer: 1 };
  78. transformer.serializeValues(values);
  79. assert(values.customer);
  80. assert.equal(values.customer, 1);
  81. });
  82. it('should work recursively', function() {
  83. var values = transformer.serializeCriteria({ where: { user: { customer: 1 }}});
  84. assert(values.where.user.customer);
  85. assert.equal(values.where.user.customer, 1);
  86. });
  87. });
  88. });
  89. });