signal-desktop/test/views/message_view_test.js

92 lines
2.9 KiB
JavaScript
Raw Normal View History

2014-09-01 18:52:58 +00:00
describe('MessageView', function() {
var convo, message;
2018-04-27 21:25:04 +00:00
before(async done => {
await clearDatabase();
2018-04-27 21:25:04 +00:00
convo = new Whisper.Conversation({ id: 'foo' });
message = convo.messageCollection.add({
conversationId: convo.id,
body: 'hello world',
type: 'outgoing',
source: '+14158675309',
received_at: Date.now(),
});
await storage.put('number_id', '+18088888888.1');
done();
2014-09-01 18:52:58 +00:00
});
2014-09-04 07:25:08 +00:00
it('should display the message text', function() {
2018-04-27 21:25:04 +00:00
var view = new Whisper.MessageView({ model: message }).render();
2014-11-21 00:30:52 +00:00
assert.match(view.$el.text(), /hello world/);
2014-09-04 07:25:08 +00:00
});
2014-09-01 18:52:58 +00:00
2014-09-04 07:25:08 +00:00
it('should auto-update the message text', function() {
2018-04-27 21:25:04 +00:00
var view = new Whisper.MessageView({ model: message }).render();
2014-09-04 07:25:08 +00:00
message.set('body', 'goodbye world');
assert.match(view.$el.html(), /goodbye world/);
});
2014-09-01 18:52:58 +00:00
it('should have a nice timestamp', function() {
2018-04-27 21:25:04 +00:00
var view = new Whisper.MessageView({ model: message });
message.set({ sent_at: Date.now() - 5000 });
2015-03-06 00:51:53 +00:00
view.render();
assert.match(view.$el.html(), /now/);
2018-04-27 21:25:04 +00:00
message.set({ sent_at: Date.now() - 60000 });
2015-03-06 00:51:53 +00:00
view.render();
assert.match(view.$el.html(), /min/);
2018-04-27 21:25:04 +00:00
message.set({ sent_at: Date.now() - 3600000 });
2015-03-06 00:51:53 +00:00
view.render();
assert.match(view.$el.html(), /hour/);
});
it('should not imply messages are from the future', function() {
2018-04-27 21:25:04 +00:00
var view = new Whisper.MessageView({ model: message });
message.set({ sent_at: Date.now() + 60000 });
view.render();
assert.match(view.$el.html(), /now/);
});
2014-09-04 07:25:08 +00:00
it('should go away when the model is destroyed', function() {
2018-04-27 21:25:04 +00:00
var view = new Whisper.MessageView({ model: message });
2014-09-04 07:25:08 +00:00
var div = $('<div>').append(view.$el);
message.destroy();
assert.strictEqual(div.find(view.$el).length, 0);
2014-09-01 18:52:58 +00:00
});
it('allows links', function() {
var url = 'http://example.com';
message.set('body', url);
2018-04-27 21:25:04 +00:00
var view = new Whisper.MessageView({ model: message });
view.render();
2016-09-01 20:31:36 +00:00
var link = view.$el.find('.body a');
assert.strictEqual(link.length, 1);
assert.strictEqual(link.text(), url);
assert.strictEqual(link.attr('href'), url);
});
it('disallows xss', function() {
var xss = '<script>alert("pwnd")</script>';
message.set('body', xss);
2018-04-27 21:25:04 +00:00
var view = new Whisper.MessageView({ model: message });
view.render();
assert.include(view.$el.text(), xss); // should appear as escaped text
assert.strictEqual(view.$el.find('script').length, 0); // should not appear as html
});
2016-09-01 20:31:36 +00:00
it('supports emoji', function() {
message.set('body', 'I \u2764\uFE0F emoji!');
2018-04-27 21:25:04 +00:00
var view = new Whisper.MessageView({ model: message });
view.render();
var img = view.$el.find('.content img');
assert.strictEqual(img.length, 1);
2018-04-27 21:25:04 +00:00
assert.strictEqual(
img.attr('src'),
'node_modules/emoji-datasource-apple/img/apple/64/2764-fe0f.png'
);
2016-09-01 20:31:36 +00:00
assert.strictEqual(img.attr('title'), ':heart:');
assert.strictEqual(img.attr('class'), 'emoji');
});
2014-09-01 18:52:58 +00:00
});