diff --git a/spec/muc.js b/spec/muc.js index c63b1af80..9c8c4a3ff 100644 --- a/spec/muc.js +++ b/spec/muc.js @@ -2081,6 +2081,86 @@ done(); })); + + it("reconnects when no-acceptable error is returned when sending a message", + mock.initConverse( + null, ['rosterGroupsFetched'], {}, + async function (done, _converse) { + + const groupchat_jid = 'coven@chat.shakespeare.lit'; + await test_utils.openAndEnterChatRoom(_converse, 'coven', 'chat.shakespeare.lit', 'romeo'); + const view = _converse.chatboxviews.get(groupchat_jid); + expect(view.model.get('connection_status')).toBe(converse.ROOMSTATUS.ENTERED); + await test_utils.sendMessage(view, 'hello world'); + + const stanza = u.toStanza(` + + + + + `); + _converse.connection._dataRecv(test_utils.createRequest(stanza)); + + let sent_stanzas = _converse.connection.sent_stanzas; + const iq = await test_utils.waitUntil(() => sent_stanzas.filter(s => sizzle(`[xmlns="${Strophe.NS.PING}"]`, s).length).pop()); + expect(Strophe.serialize(iq)).toBe( + ``+ + ``+ + ``); + + const result = u.toStanza(` + + + + + `); + _converse.connection.sent_stanzas = []; + sent_stanzas = _converse.connection.sent_stanzas; + _converse.connection._dataRecv(test_utils.createRequest(result)); + const pres = await test_utils.waitUntil( + () => sent_stanzas.filter(s => s.nodeName === 'presence').pop()); + expect(Strophe.serialize(pres)).toBe( + ``+ + ``+ + ``); + done(); + })); + + + it("informs users if the room configuration has changed", + mock.initConverse( + null, ['rosterGroupsFetched'], {}, + async function (done, _converse) { + + const groupchat_jid = 'coven@chat.shakespeare.lit'; + await test_utils.openAndEnterChatRoom(_converse, 'coven', 'chat.shakespeare.lit', 'romeo'); + const view = _converse.chatboxviews.get(groupchat_jid); + expect(view.model.get('connection_status')).toBe(converse.ROOMSTATUS.ENTERED); + + const stanza = u.toStanza(` + + + + + `); + _converse.connection._dataRecv(test_utils.createRequest(stanza)); + await test_utils.waitUntil(() => view.el.querySelectorAll('.chat-content .chat-info').length === 2); + const info_messages = view.el.querySelectorAll('.chat-content .chat-info'); + expect(info_messages[0].textContent).toBe('romeo has entered the groupchat'); + expect(info_messages[1].textContent).toBe('groupchat logging is now enabled'); + done(); + })); + + it("informs users if their nicknames have been changed.", mock.initConverse( null, ['rosterGroupsFetched'], {}, diff --git a/src/headless/converse-chatboxes.js b/src/headless/converse-chatboxes.js index 238402a8a..b8ed33256 100644 --- a/src/headless/converse-chatboxes.js +++ b/src/headless/converse-chatboxes.js @@ -989,7 +989,7 @@ converse.plugins.add('converse-chatboxes', { async onErrorMessage (message) { /* Handler method for all incoming error message stanzas - */ + */ const from_jid = Strophe.getBareJidFromJid(message.getAttribute('from')); if (utils.isSameBareJID(from_jid, _converse.bare_jid)) { return true;