diff --git a/src/headless/plugins/muc/tests/messages.js b/src/headless/plugins/muc/tests/messages.js index 8c6d18525..633abede8 100644 --- a/src/headless/plugins/muc/tests/messages.js +++ b/src/headless/plugins/muc/tests/messages.js @@ -1,6 +1,6 @@ /*global mock, converse */ -const { Strophe, u } = converse.env; +const { Strophe, u, $msg } = converse.env; describe("A MUC message", function () { @@ -40,4 +40,81 @@ describe("A MUC message", function () { expect(model.messages.at(0).get('occupant_id')).toBe("dd72603deec90a38ba552f7c68cbcc61bca202cd"); expect(model.messages.at(0).get('from_real_jid')).toBe(occupant_jid); })); + + it("keeps track whether you are the sender or not", + mock.initConverse([], {}, async function (_converse) { + + const muc_jid = 'lounge@montague.lit'; + const model = await mock.openAndEnterChatRoom(_converse, muc_jid, 'romeo'); + const msg = $msg({ + from: 'lounge@montague.lit/romeo', + id: u.getUniqueId(), + to: 'romeo@montague.lit', + type: 'groupchat' + }).c('body').t('I wrote this message!').tree(); + await model.handleMessageStanza(msg); + await u.waitUntil(() => model.messages.last()?.get('received')); + expect(model.messages.last().get('sender')).toBe('me'); + })); + + it("gets updated with its stanza-id upon MUC reflection", + mock.initConverse([], {}, async function (_converse) { + + const muc_jid = 'room@muc.example.com'; + const model = await mock.openAndEnterChatRoom(_converse, muc_jid, 'romeo'); + + model.sendMessage({'body': 'hello world'}); + await u.waitUntil(() => model.messages.length === 1); + const msg = model.messages.at(0); + expect(msg.get('stanza_id')).toBeUndefined(); + expect(msg.get('origin_id')).toBe(msg.get('origin_id')); + + const stanza = u.toStanza(` + + Hello world + + + `); + spyOn(model, 'updateMessage').and.callThrough(); + _converse.connection._dataRecv(mock.createRequest(stanza)); + await u.waitUntil(() => model.updateMessage.calls.count() === 1); + expect(model.messages.length).toBe(1); + expect(model.messages.at(0).get('stanza_id room@muc.example.com')).toBe("5f3dbc5e-e1d3-4077-a492-693f3769c7ad"); + expect(model.messages.at(0).get('origin_id')).toBe(msg.get('origin_id')); + })); + + it("is rejected if it's an unencapsulated forwarded message", + mock.initConverse(['chatBoxesFetched'], {}, async function (_converse) { + + const muc_jid = 'lounge@montague.lit'; + await mock.openAndEnterChatRoom(_converse, muc_jid, 'romeo'); + const impersonated_jid = `${muc_jid}/alice`; + const received_stanza = u.toStanza(` + + + + + Yet I should kill thee with much cherishing. + + + + `); + spyOn(converse.env.log, 'error').and.callThrough(); + _converse.connection._dataRecv(mock.createRequest(received_stanza)); + await u.waitUntil(() => converse.env.log.error.calls.count() === 1); + expect(converse.env.log.error).toHaveBeenCalledWith( + `Ignoring unencapsulated forwarded message from ${muc_jid}/mallory` + ); + const model = _converse.chatboxes.get(muc_jid); + expect(model.messages.length).toBe(0); + })); }); diff --git a/src/plugins/muc-views/tests/muc-messages.js b/src/plugins/muc-views/tests/muc-messages.js index f589102e1..b122c693a 100644 --- a/src/plugins/muc-views/tests/muc-messages.js +++ b/src/plugins/muc-views/tests/muc-messages.js @@ -51,37 +51,6 @@ describe("A Groupchat Message", function () { })); }); - it("is rejected if it's an unencapsulated forwarded message", - mock.initConverse(['chatBoxesFetched'], {}, async function (_converse) { - - const muc_jid = 'lounge@montague.lit'; - await mock.openAndEnterChatRoom(_converse, muc_jid, 'romeo'); - const impersonated_jid = `${muc_jid}/alice`; - const received_stanza = u.toStanza(` - - - - - Yet I should kill thee with much cherishing. - - - - `); - const view = _converse.chatboxviews.get(muc_jid); - spyOn(converse.env.log, 'error').and.callThrough(); - _converse.connection._dataRecv(mock.createRequest(received_stanza)); - await u.waitUntil(() => converse.env.log.error.calls.count() === 1); - expect(converse.env.log.error).toHaveBeenCalledWith( - `Ignoring unencapsulated forwarded message from ${muc_jid}/mallory` - ); - expect(view.querySelectorAll('.chat-msg').length).toBe(0); - expect(view.model.messages.length).toBe(0); - })); - it("can contain a chat state notification and will still be shown", mock.initConverse(['chatBoxesFetched'], {}, async function (_converse) { @@ -302,23 +271,6 @@ describe("A Groupchat Message", function () { expect(view.model.occupants._events.add.length).toBe(add_events); })); - it("keeps track whether you are the sender or not", - mock.initConverse([], {}, async function (_converse) { - - const muc_jid = 'lounge@montague.lit'; - await mock.openAndEnterChatRoom(_converse, muc_jid, 'romeo'); - const view = _converse.chatboxviews.get(muc_jid); - const msg = $msg({ - from: 'lounge@montague.lit/romeo', - id: u.getUniqueId(), - to: 'romeo@montague.lit', - type: 'groupchat' - }).c('body').t('I wrote this message!').tree(); - await view.model.handleMessageStanza(msg); - await u.waitUntil(() => view.model.messages.last()?.get('received')); - expect(view.model.messages.last().get('sender')).toBe('me'); - })); - it("will be shown as received upon MUC reflection", mock.initConverse([], {}, async function (_converse) { @@ -360,38 +312,6 @@ describe("A Groupchat Message", function () { expect(message.get('origin_id')).toBe(msg_obj.get('origin_id')); })); - it("gets updated with its stanza-id upon MUC reflection", - mock.initConverse([], {}, async function (_converse) { - - const muc_jid = 'room@muc.example.com'; - await mock.openAndEnterChatRoom(_converse, muc_jid, 'romeo'); - const view = _converse.chatboxviews.get(muc_jid); - - view.model.sendMessage({'body': 'hello world'}); - await u.waitUntil(() => view.model.messages.length === 1); - const msg = view.model.messages.at(0); - expect(msg.get('stanza_id')).toBeUndefined(); - expect(msg.get('origin_id')).toBe(msg.get('origin_id')); - - const stanza = u.toStanza(` - - Hello world - - - `); - spyOn(view.model, 'updateMessage').and.callThrough(); - _converse.connection._dataRecv(mock.createRequest(stanza)); - await u.waitUntil(() => view.model.updateMessage.calls.count() === 1); - expect(view.model.messages.length).toBe(1); - expect(view.model.messages.at(0).get('stanza_id room@muc.example.com')).toBe("5f3dbc5e-e1d3-4077-a492-693f3769c7ad"); - expect(view.model.messages.at(0).get('origin_id')).toBe(msg.get('origin_id')); - })); - it("can cause a delivery receipt to be returned", mock.initConverse([], {}, async function (_converse) {