strategy.alter.buffers.js 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. var Waterline = require('../../lib/waterline');
  2. var assert = require('assert');
  3. var _ = require('@sailshq/lodash');
  4. describe.skip('Alter Mode Recovery with buffer attributes', function () {
  5. var waterline;
  6. var adapters;
  7. var connections;
  8. var inserted;
  9. var person;
  10. var PersonModel;
  11. var persistentData;
  12. var ontology;
  13. // Create an adapter and set some existing data
  14. before(function () {
  15. var buffer = new Buffer('test alter mode', 'utf8');
  16. // Hold data to be used in tests
  17. persistentData = [{
  18. label: 'test_alter',
  19. num: 21,
  20. average: 20.35,
  21. ids: [1, 2, 4, 8],
  22. avatar: buffer,
  23. status: true,
  24. obj: {foo: 'bar', bar: 'foo'},
  25. date: new Date(),
  26. id: 12
  27. }];
  28. inserted = _.cloneDeep(persistentData[0], function dealWithBuffers(val) {
  29. if (val instanceof Buffer) {
  30. return val.slice();
  31. }
  32. });
  33. var adapter = {
  34. registerDatastore: function (connection, collections, cb) {
  35. cb(null, null);
  36. },
  37. define: function (connectionName, collectionName, definition, cb) {
  38. this.describe(connectionName, collectionName, function (err, schema) {
  39. cb(null, schema);
  40. });
  41. },
  42. describe: function (connectionName, collectionName, cb, connection) {
  43. var schema = {
  44. label: {type: 'VARCHAR2'},
  45. num: {type: 'NUMBER'},
  46. average: {type: 'FLOAT'},
  47. avatar: {type: 'BLOB'},
  48. status: {type: 'NUMBER'},
  49. obj: {type: 'VARCHAR2'},
  50. ids: {type: 'VARCHAR2'},
  51. createdAt: {type: 'TIMESTAMP'},
  52. updatedAt: {type: 'TIMESTAMP'},
  53. date: {type: 'TIMESTAMP'}
  54. };
  55. cb(null, (persistentData.length === 1) ? schema : undefined);
  56. },
  57. find: function (connectionName, collectionName, options, cb, connection) {
  58. if (!options.where) {
  59. return cb(null, persistentData);
  60. }
  61. cb(null, _.find(persistentData, options.where));
  62. },
  63. create: function (connectionName, collectionName, data, cb, connection) {
  64. persistentData.push(data);
  65. cb(null, data);
  66. },
  67. drop: function (connectionName, collectionName, relations, cb, connection) {
  68. persistentData = [];
  69. cb(null);
  70. }
  71. };
  72. waterline = new Waterline();
  73. // Build up a model to test
  74. PersonModel = {
  75. identity: 'Person',
  76. tableName: 'person_table',
  77. datastore: 'test_alter',
  78. migrate: 'alter',
  79. adapter: 'fake',
  80. attributes: {
  81. label: 'string',
  82. num: 'integer',
  83. average: 'float',
  84. ids: 'array',
  85. avatar: 'binary',
  86. status: 'boolean',
  87. obj: 'json',
  88. date: 'datetime',
  89. id: 'integer'
  90. }
  91. };
  92. // Create a connection using the stub adapter we created above
  93. connections = {
  94. 'test_alter': {
  95. adapter: 'fake'
  96. }
  97. };
  98. // Build up the named adapters object
  99. adapters = {fake: adapter};
  100. });
  101. it('should recover data', function (done) {
  102. var PersonCollection = Waterline.Model.extend(PersonModel);
  103. waterline.registerModel(PersonCollection);
  104. waterline.initialize({adapters: adapters, datastores: connections}, function (err, data) {
  105. if (err) {
  106. return done(err);
  107. }
  108. data.collections.person.findOne({id: 12}, function (err, found) {
  109. if (err) {
  110. return done(err);
  111. }
  112. assert(found, 'Alter mode should backup data, but records found === ' + found);
  113. var record = found;
  114. assert(inserted.label === record.label,
  115. 'Alter mode should recover string type, but (expected string === "' + inserted.label
  116. + '") !== (found string === "' + record.label + '")');
  117. assert(inserted.num === record.num,
  118. 'Alter mode should recover integer type, but (expected integer === ' + inserted.num
  119. + ') !== (found integer === ' + record.num + ')');
  120. assert(inserted.average === record.average,
  121. 'Alter mode should recover float type, but (expected float === ' + inserted.average
  122. + ') !== (found float === ' + record.average + ')');
  123. assert(Array.isArray(record.ids),
  124. 'Alter mode should recover array type, but found object is not an array');
  125. assert(inserted.ids.length === record.ids.length,
  126. 'Alter mode should recover array type, expected array length === ' + inserted.ids.length
  127. + ', but found array length === ' + record.ids.length);
  128. for (var i = 0; i < inserted.ids.length; i++) {
  129. assert(inserted.ids[i] === record.ids[i],
  130. 'Alter mode should recover array data, but (expected array[' + i + '] === '
  131. + inserted.ids[i] + ') !== (found array[' + i + '] === ' + record.ids[i] + ')');
  132. };
  133. assert(inserted.avatar.toString('utf8') === record.avatar.toString('utf8'),
  134. 'Alter mode should recover binary type, but (expected binary === "'
  135. + inserted.avatar.toString('utf8') + '") !== (found binary === ' + record.avatar.toString('utf8') + ')');
  136. assert(inserted.status === record.status,
  137. 'Alter mode should recover boolean type, but (expected boolean === '
  138. + inserted.status + ') !== (found boolean === ' + record.status + ')');
  139. assert(Date.parse(inserted.date) === Date.parse(new Date(record.date)),
  140. 'Alter mode should recover date type, but ' + new Date(Date.parse(inserted.date))
  141. + ' !== ' + new Date(Date.parse(new Date(record.date))));
  142. _.keys(inserted.obj).forEach(function (key) {
  143. assert(record.obj[key],
  144. 'Alter mode should recover json type structure, but property found obj.' + key + ' does not exist');
  145. assert(inserted.obj[key] === record.obj[key],
  146. 'Alter mode should recover json type data, but property (expected obj.' + key + ' === ' + inserted.obj[key]
  147. + ') !== (found obj.' + key + ' === ' + record.obj[key] + ')');
  148. });
  149. done();
  150. });
  151. });
  152. });
  153. });