diff --git a/js/models/messages.js b/js/models/messages.js index a4b2b77a6..38cea2c91 100644 --- a/js/models/messages.js +++ b/js/models/messages.js @@ -35,7 +35,7 @@ model: Message, database: Whisper.Database, storeName: 'messages', - comparator: function(m) { return -m.get('timestamp'); }, + comparator: 'timestamp', destroyAll: function () { return Promise.all(this.models.map(function(m) { return new Promise(function(resolve, reject) { diff --git a/js/views/message_list_view.js b/js/views/message_list_view.js index ea8edfb76..02d0d0821 100644 --- a/js/views/message_list_view.js +++ b/js/views/message_list_view.js @@ -14,11 +14,7 @@ var Whisper = Whisper || {}; this.$el.scrollTop(this.el.scrollHeight); }, addAll: function() { - this.$el.html(''); - this.collection.each(function(model) { - var view = new this.itemView({model: model}); - this.$el.prepend(view.render().el); - }, this); + Whisper.ListView.prototype.addAll.apply(this, arguments); // super() this.scrollToBottom(); }, }); diff --git a/test/models/conversations_test.js b/test/models/conversations_test.js index d5f3c175b..3857d31e9 100644 --- a/test/models/conversations_test.js +++ b/test/models/conversations_test.js @@ -89,7 +89,7 @@ before(function(done) { var convo = new Whisper.ConversationCollection().add(attributes); convo.save().then(function() { - var message = convo.messages().add({body: 'hello world', conversationId: convo.id}); + var message = convo.messageCollection.add({body: 'hello world', conversationId: convo.id}); message.save().then(done) }); }); @@ -97,16 +97,16 @@ it('contains its own messages', function (done) { var convo = new Whisper.ConversationCollection().add({id: 'foobar'}); - convo.fetch().then(function() { - assert.notEqual(convo.messages().length, 0); + convo.fetchMessages().then(function() { + assert.notEqual(convo.messageCollection.length, 0); done(); }); }); it('contains only its own messages', function (done) { var convo = new Whisper.ConversationCollection().add({id: 'barfoo'}); - convo.fetch().then(function() { - assert.strictEqual(convo.messages().length, 0); + convo.fetchMessages().then(function() { + assert.strictEqual(convo.messageCollection.length, 0); done(); }); }); diff --git a/test/models/messages_test.js b/test/models/messages_test.js index af8c9d60b..35191711c 100644 --- a/test/models/messages_test.js +++ b/test/models/messages_test.js @@ -72,5 +72,25 @@ }); }); }); + + it('should be ordered oldest to newest', function() { + var messages = new Whisper.MessageCollection(); + // Timestamps + var today = new Date(); + var tomorrow = new Date(); + tomorrow.setDate(today.getDate()+1); + + // Add threads + messages.add({ timestamp: today }); + messages.add({ timestamp: tomorrow }); + + var models = messages.models; + var firstTimestamp = models[0].get('timestamp').getTime(); + var secondTimestamp = models[1].get('timestamp').getTime(); + + // Compare timestamps + assert(firstTimestamp < secondTimestamp); + }); + }); })(); diff --git a/test/views/message_view_test.js b/test/views/message_view_test.js index 6f4490114..62994605c 100644 --- a/test/views/message_view_test.js +++ b/test/views/message_view_test.js @@ -5,7 +5,7 @@ describe('MessageView', function() { }); var convo = conversations.add({id: 'foo'}); - var message = convo.messages().add({ + var message = convo.messageCollection.add({ conversationId: convo.id, body: 'hello world', type: 'outgoing', @@ -13,12 +13,12 @@ describe('MessageView', function() { }); it('should display the message text', function() { - var view = new Whisper.MessageView({model: message}); - assert.match(view.render().$el.html(), /hello world/); + var view = new Whisper.MessageView({model: message}).render(); + assert.match(view.$el.text(), /hello world/); }); it('should auto-update the message text', function() { - var view = new Whisper.MessageView({model: message}); + var view = new Whisper.MessageView({model: message}).render(); message.set('body', 'goodbye world'); assert.match(view.$el.html(), /goodbye world/); });