diff --git a/spec/emojis.js b/spec/emojis.js index e55f38bec..16fc5b4df 100644 --- a/spec/emojis.js +++ b/spec/emojis.js @@ -159,9 +159,9 @@ }); describe("A Chat Message", function () { - it("will display larger if it's a single emoji", + it("will display larger if it's only emojis", mock.initConverse( - null, ['rosterGroupsFetched', 'chatBoxesFetched', 'emojisInitialized'], {'use_system_emojis': false}, + null, ['rosterGroupsFetched', 'chatBoxesFetched', 'emojisInitialized'], {'use_system_emojis': true}, async function (done, _converse) { await test_utils.waitForRoster(_converse, 'current'); @@ -176,7 +176,6 @@ await new Promise(resolve => _converse.on('chatBoxInitialized', resolve)); const view = _converse.api.chatviews.get(sender_jid); await new Promise((resolve, reject) => view.once('messageInserted', resolve)); - const chat_content = view.el.querySelector('.chat-content'); let message = chat_content.querySelector('.chat-msg__text'); expect(u.hasClass('chat-msg__text--larger', message)).toBe(true); @@ -191,7 +190,38 @@ await new Promise((resolve, reject) => view.once('messageInserted', resolve)); message = chat_content.querySelector('.message:last-child .chat-msg__text'); expect(u.hasClass('chat-msg__text--larger', message)).toBe(false); - done(); + + // Test that a modified message that no longer contains only + // emojis now renders normally again. + const textarea = view.el.querySelector('textarea.chat-textarea'); + textarea.value = ':poop: :innocent:'; + view.onKeyDown({ + target: textarea, + preventDefault: function preventDefault () {}, + keyCode: 13 // Enter + }); + await new Promise((resolve, reject) => view.once('messageInserted', resolve)); + expect(view.el.querySelectorAll('.chat-msg').length).toBe(3); + expect(chat_content.querySelector('.message:last-child .chat-msg__text').textContent).toBe('💩 😇'); + expect(textarea.value).toBe(''); + view.onKeyDown({ + target: textarea, + keyCode: 38 // Up arrow + }); + expect(textarea.value).toBe('💩 😇'); + expect(view.model.messages.at(2).get('correcting')).toBe(true); + await u.waitUntil(() => u.hasClass('correcting', view.el.querySelector('.chat-msg:last-child')), 500); + textarea.value = textarea.value += 'This is no longer an emoji-only message'; + view.onKeyDown({ + target: textarea, + preventDefault: function preventDefault () {}, + keyCode: 13 // Enter + }); + await new Promise((resolve, reject) => view.model.messages.once('rendered', resolve)); + expect(view.model.messages.models.length).toBe(3); + message = chat_content.querySelector('.message:last-child .chat-msg__text'); + expect(u.hasClass('chat-msg__text--larger', message)).toBe(false); + done() })); }); }); diff --git a/src/headless/converse-chatboxes.js b/src/headless/converse-chatboxes.js index a2817015f..615887df1 100644 --- a/src/headless/converse-chatboxes.js +++ b/src/headless/converse-chatboxes.js @@ -558,7 +558,7 @@ converse.plugins.add('converse-chatboxes', { } const older_versions = message.get('older_versions') || {}; if ((attrs.time < message.get('time')) && message.get('edited')) { - // This is an older message which has been corrected already + // This is an older message which has been corrected afterwards older_versions[attrs.time] = attrs['message']; message.save({'older_versions': older_versions}); } else { @@ -787,6 +787,7 @@ converse.plugins.add('converse-chatboxes', { 'message': attrs.message, 'older_versions': older_versions, 'references': attrs.references, + 'is_single_emoji': attrs.message ? u.isSingleEmoji(attrs.message) : false, 'origin_id': _converse.connection.getUniqueId(), 'received': undefined });