messages_test.js 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. /*
  2. * vim: ts=4:sw=4:expandtab
  3. */
  4. (function () {
  5. 'use strict';
  6. function clear(done) {
  7. var messages = new Whisper.MessageCollection();
  8. return messages.fetch().then(function() {
  9. messages.destroyAll();
  10. done();
  11. });
  12. }
  13. var attributes = { type: 'outgoing',
  14. body: 'hi',
  15. conversationId: 'foo',
  16. attachments: [],
  17. received_at: new Date().getTime() };
  18. var attachment = { data: 'datasaurus',
  19. contentType: 'plain/text' };
  20. describe('MessageCollection', function() {
  21. before(clear);
  22. after(clear);
  23. it('has no image url', function() {
  24. var messages = new Whisper.MessageCollection();
  25. var message = messages.add(attributes);
  26. assert.isNull(message.getImageUrl());
  27. });
  28. it('updates image url', function() {
  29. var messages = new Whisper.MessageCollection();
  30. var message = messages.add({ attachments: [attachment] });
  31. var firstUrl = message.getImageUrl();
  32. message.updateImageUrl();
  33. var secondUrl = message.getImageUrl();
  34. assert.notEqual(secondUrl, firstUrl);
  35. });
  36. it('gets outgoing contact', function() {
  37. var messages = new Whisper.MessageCollection();
  38. var message = messages.add(attributes);
  39. message.getContact();
  40. });
  41. it('gets incoming contact', function() {
  42. var messages = new Whisper.MessageCollection();
  43. var message = messages.add({ type: 'incoming' });
  44. message.getContact();
  45. });
  46. it('adds without saving', function() {
  47. var messages = new Whisper.MessageCollection();
  48. var message = messages.add(attributes);
  49. assert.notEqual(messages.length, 0);
  50. var messages = new Whisper.MessageCollection();
  51. assert.strictEqual(messages.length, 0);
  52. });
  53. it('saves asynchronously', function(done) {
  54. new Whisper.MessageCollection().add(attributes).save().then(done);
  55. });
  56. it('fetches persistent messages', function(done) {
  57. var messages = new Whisper.MessageCollection();
  58. assert.strictEqual(messages.length, 0);
  59. messages.fetch().then(function() {
  60. assert.notEqual(messages.length, 0);
  61. var m = messages.at(0).attributes;
  62. _.each(attributes, function(val, key) {
  63. assert.deepEqual(m[key], val);
  64. });
  65. done();
  66. });
  67. });
  68. it('destroys persistent messages', function(done) {
  69. var messages = new Whisper.MessageCollection();
  70. messages.fetch().then(function() {
  71. messages.destroyAll().then(function() {
  72. var messages = new Whisper.MessageCollection();
  73. messages.fetch().then(function() {
  74. assert.strictEqual(messages.length, 0);
  75. done();
  76. });
  77. });
  78. });
  79. });
  80. it('should be ordered oldest to newest', function() {
  81. var messages = new Whisper.MessageCollection();
  82. // Timestamps
  83. var today = new Date();
  84. var tomorrow = new Date();
  85. tomorrow.setDate(today.getDate()+1);
  86. // Add threads
  87. messages.add({ received_at: today });
  88. messages.add({ received_at: tomorrow });
  89. var models = messages.models;
  90. var firstTimestamp = models[0].get('received_at').getTime();
  91. var secondTimestamp = models[1].get('received_at').getTime();
  92. // Compare timestamps
  93. assert(firstTimestamp < secondTimestamp);
  94. });
  95. it('checks if is incoming message', function() {
  96. var messages = new Whisper.MessageCollection();
  97. var message = messages.add(attributes);
  98. assert.notOk(message.isIncoming());
  99. message = messages.add({type: 'incoming'});
  100. assert.ok(message.isIncoming());
  101. });
  102. it('checks if is outgoing message', function() {
  103. var messages = new Whisper.MessageCollection();
  104. var message = messages.add(attributes);
  105. assert.ok(message.isOutgoing());
  106. message = messages.add({type: 'incoming'});
  107. assert.notOk(message.isOutgoing());
  108. });
  109. it('checks if is group update', function() {
  110. var messages = new Whisper.MessageCollection();
  111. var message = messages.add(attributes);
  112. assert.notOk(message.isGroupUpdate());
  113. message = messages.add({group_update: true});
  114. assert.ok(message.isGroupUpdate());
  115. });
  116. it('checks if there are any key conflicts', function() {
  117. var messages = new Whisper.MessageCollection();
  118. var message = messages.add(attributes);
  119. assert.notOk(message.hasKeyConflicts());
  120. message = messages.add({errors: [{name: 'OutgoingIdentityKeyError'}]});
  121. assert.ok(message.hasKeyConflicts());
  122. });
  123. it('returns a description of key conflicts', function() {
  124. var messages = new Whisper.MessageCollection();
  125. var message = messages.add({errors: [{name: 'IncomingIdentityKeyError'}]});
  126. assert.deepEqual(message.getKeyConflict(), {name: 'IncomingIdentityKeyError'});
  127. });
  128. it('returns an accurate description', function() {
  129. var messages = new Whisper.MessageCollection();
  130. var message = messages.add(attributes);
  131. assert.equal(message.getDescription(), 'hi', 'If no group updates, key conflicts, or end session flags, return message body.');
  132. message = messages.add({group_update: {left: 'Alice'}});
  133. assert.equal(message.getDescription(), 'Alice left the group.', 'Notes one person leaving the group.');
  134. message = messages.add({group_update: {name: 'blerg'}});
  135. assert.equal(message.getDescription(), 'Updated the group. Title is now \'blerg\'.', 'Returns a single notice if only group_updates.name changes.');
  136. message = messages.add({group_update: {joined: ['Bob']}});
  137. assert.equal(message.getDescription(), 'Updated the group. Bob joined the group.', 'Returns a single notice if only group_updates.joined changes.');
  138. message = messages.add({group_update: {joined: ['Bob', 'Alice', 'Eve']}});
  139. assert.equal(message.getDescription(), 'Updated the group. Bob, Alice, Eve joined the group.', 'Notes when >1 person joins the group.');
  140. message = messages.add({group_update: {joined: ['Bob'], name: 'blerg'}});
  141. assert.equal(message.getDescription(), 'Updated the group. Title is now \'blerg\'. Bob joined the group.', 'Notes when there are multiple changes to group_updates properties.');
  142. message = messages.add({flags: true});
  143. assert.equal(message.getDescription(), i18n('sessionEnded'));
  144. message = messages.add({type: 'incoming', errors: [{name: 'OutgoingIdentityKeyError'}]});
  145. assert.equal(message.getDescription(), i18n('incomingKeyConflict'));
  146. });
  147. it('checks if it is end of the session', function() {
  148. var messages = new Whisper.MessageCollection();
  149. var message = messages.add(attributes);
  150. assert.notOk(message.isEndSession());
  151. message = messages.add({flags: true});
  152. assert.ok(message.isEndSession());
  153. });
  154. });
  155. })();