|
@@ -3,6 +3,7 @@
|
|
|
} (this, function (jasmine, mock, test_utils) {
|
|
|
"use strict";
|
|
|
const $iq = converse.env.$iq;
|
|
|
+ const $msg = converse.env.$msg;
|
|
|
const Strophe = converse.env.Strophe;
|
|
|
const sizzle = converse.env.sizzle;
|
|
|
const u = converse.env.utils;
|
|
@@ -178,5 +179,92 @@
|
|
|
await test_utils.waitForRoster(_converse, 'current', 1);
|
|
|
done();
|
|
|
}));
|
|
|
+
|
|
|
+
|
|
|
+ it("can cause MUC messages to be received before chatboxes are initialized",
|
|
|
+ mock.initConverse(
|
|
|
+ ['chatBoxesInitialized'],
|
|
|
+ { 'auto_login': false,
|
|
|
+ 'enable_smacks': true,
|
|
|
+ 'show_controlbox_by_default': true,
|
|
|
+ 'blacklisted_plugins': 'converse-mam',
|
|
|
+ 'smacks_max_unacked_stanzas': 2
|
|
|
+ },
|
|
|
+ async function (done, _converse) {
|
|
|
+
|
|
|
+ const key = "converse-test-session/converse.session-romeo@montague.lit-converse.session-romeo@montague.lit";
|
|
|
+ sessionStorage.setItem(
|
|
|
+ key,
|
|
|
+ JSON.stringify({
|
|
|
+ "id": "converse.session-romeo@montague.lit",
|
|
|
+ "jid": "romeo@montague.lit/converse.js-100020907",
|
|
|
+ "bare_jid": "romeo@montague.lit",
|
|
|
+ "resource": "converse.js-100020907",
|
|
|
+ "domain": "montague.lit",
|
|
|
+ "active": false,
|
|
|
+ "smacks_enabled": true,
|
|
|
+ "num_stanzas_handled": 580,
|
|
|
+ "num_stanzas_handled_by_server": 525,
|
|
|
+ "num_stanzas_since_last_ack": 0,
|
|
|
+ "unacked_stanzas": [],
|
|
|
+ "smacks_stream_id": "some-long-sm-id",
|
|
|
+ "push_enabled": ["romeo@montague.lit"],
|
|
|
+ "carbons_enabled": true,
|
|
|
+ "roster_cached": true
|
|
|
+ })
|
|
|
+ );
|
|
|
+
|
|
|
+ const muc_jid = 'lounge@montague.lit';
|
|
|
+ const chatkey = `converse.chatboxes-romeo@montague.lit-${muc_jid}`;
|
|
|
+ sessionStorage.setItem('converse.chatboxes-romeo@montague.lit', JSON.stringify([chatkey]));
|
|
|
+ sessionStorage.setItem(chatkey,
|
|
|
+ JSON.stringify({
|
|
|
+ hidden: false,
|
|
|
+ message_type: "groupchat",
|
|
|
+ name: "lounge",
|
|
|
+ num_unread: 0,
|
|
|
+ type: "chatroom",
|
|
|
+ jid: muc_jid,
|
|
|
+ id: muc_jid,
|
|
|
+ box_id: "box-YXJnQGNvbmZlcmVuY2UuY2hhdC5leGFtcGxlLm9yZw==",
|
|
|
+ nick: "romeo"
|
|
|
+ })
|
|
|
+ );
|
|
|
+
|
|
|
+ _converse.no_connection_on_bind = true; // XXX Don't trigger CONNECTED in tests/mock.js
|
|
|
+ _converse.api.user.login('romeo@montague.lit', 'secret');
|
|
|
+ delete _converse.no_connection_on_bind;
|
|
|
+
|
|
|
+ const sent_stanzas = _converse.connection.sent_stanzas;
|
|
|
+ const stanza = await u.waitUntil(() => sent_stanzas.filter(s => (s.tagName === 'resume')).pop());
|
|
|
+ expect(Strophe.serialize(stanza)).toEqual('<resume h="580" previd="some-long-sm-id" xmlns="urn:xmpp:sm:3"/>');
|
|
|
+
|
|
|
+ const result = u.toStanza(`<resumed xmlns="urn:xmpp:sm:3" h="another-sequence-number" previd="some-long-sm-id"/>`);
|
|
|
+ _converse.connection._dataRecv(test_utils.createRequest(result));
|
|
|
+ expect(_converse.session.get('smacks_enabled')).toBe(true);
|
|
|
+
|
|
|
+ const func = _converse.chatboxes.onChatBoxesFetched;
|
|
|
+ spyOn(_converse.chatboxes, 'onChatBoxesFetched').and.callFake(collection => {
|
|
|
+ const muc = new _converse.ChatRoom({'jid': muc_jid, 'id': muc_jid}, {'collection': _converse.chatboxes});
|
|
|
+ _converse.chatboxes.add(muc);
|
|
|
+ func.call(_converse.chatboxes, collection);
|
|
|
+ });
|
|
|
+
|
|
|
+ // A MUC message gets received
|
|
|
+ const msg = $msg({
|
|
|
+ from: `${muc_jid}/juliet`,
|
|
|
+ id: u.getUniqueId(),
|
|
|
+ to: 'romeo@montague.lit',
|
|
|
+ type: 'groupchat'
|
|
|
+ }).c('body').t('First message').tree();
|
|
|
+
|
|
|
+ _converse.connection._dataRecv(test_utils.createRequest(msg));
|
|
|
+
|
|
|
+ await _converse.api.waitUntil('chatBoxesFetched');
|
|
|
+ const muc = _converse.chatboxes.get(muc_jid);
|
|
|
+ await u.waitUntil(() => muc.messages.length === 1);
|
|
|
+ expect(muc.messages.at(0).get('message')).toBe('First message')
|
|
|
+ done();
|
|
|
+ }));
|
|
|
});
|
|
|
}));
|