瀏覽代碼

MUC: Add test for showing cached messages before entering

JC Brand 4 年之前
父節點
當前提交
5feaab9a95
共有 4 個文件被更改,包括 42 次插入4 次删除
  1. 39 0
      spec/muc.js
  2. 1 3
      src/headless/plugins/mam/index.js
  3. 0 1
      src/headless/plugins/muc/muc.js
  4. 2 0
      src/plugins/muc-views/muc.js

+ 39 - 0
spec/muc.js

@@ -358,6 +358,45 @@ describe("Groupchats", function () {
 
     describe("A Groupchat", function () {
 
+        it("Can be configured to show cached messages before being joined",
+            mock.initConverse(['discoInitialized'],
+                {
+                    'muc_show_logs_before_join': true,
+                    'archived_messages_page_size': 2,
+                    'muc_nickname_from_jid': false,
+                    'muc_clear_messages_on_leave': false,
+                }, async function (done, _converse) {
+
+            const { api } = _converse;
+            const muc_jid = 'orchard@chat.shakespeare.lit';
+            const nick = 'romeo';
+            api.rooms.open(muc_jid);
+            await mock.getRoomFeatures(_converse, muc_jid);
+            await mock.waitForReservedNick(_converse, muc_jid);
+            const view = _converse.chatboxviews.get(muc_jid);
+            await view.model.messages.fetched;
+
+            view.model.messages.create({
+                'type': 'groupchat',
+                'to': muc_jid,
+                'from': `${_converse.bare_jid}/orchard`,
+                'body': 'Hello world',
+                'message': 'Hello world',
+                'time': '2021-02-02T12:00:00Z'
+            });
+            expect(view.model.session.get('connection_status')).toBe(converse.ROOMSTATUS.NICKNAME_REQUIRED);
+            expect(view.el.querySelectorAll('converse-chat-message').length).toBe(1);
+
+            view.el.querySelector('[name="nick"]').value = nick;
+            view.el.querySelector('.muc-nickname-form input[type="submit"]').click();
+            _converse.connection.IQ_stanzas = [];
+            await mock.getRoomFeatures(_converse, muc_jid);
+            await u.waitUntil(() => view.model.session.get('connection_status') === converse.ROOMSTATUS.CONNECTING);
+            await mock.receiveOwnMUCPresence(_converse, muc_jid, nick);
+            return done();
+        }));
+
+
         it("maintains its state across reloads",
             mock.initConverse(
                 ['rosterGroupsFetched'], {

+ 1 - 3
src/headless/plugins/mam/index.js

@@ -30,11 +30,10 @@ converse.plugins.add('converse-mam', {
         });
 
         Object.assign(api, mam_api);
-
         // This is mainly done to aid with tests
         Object.assign(_converse, { onMAMError, onMAMPreferences, handleMAMResult });
 
-        /************************ BEGIN Event Handlers ************************/
+        /************************ Event Handlers ************************/
         api.listen.on('addClientFeatures', () => api.disco.own.features.add(NS.MAM));
         api.listen.on('serviceDiscovered', getMAMPrefsFromFeature);
         api.listen.on('chatRoomViewInitialized', view => {
@@ -64,6 +63,5 @@ converse.plugins.add('converse-mam', {
                 fetchNewestMessages(chat);
             }
         });
-        /************************ END Event Handlers **************************/
     }
 });

+ 0 - 1
src/headless/plugins/muc/muc.js

@@ -2246,7 +2246,6 @@ const ChatRoomMixin = {
             if (error?.getAttribute('type') === 'wait' && error?.querySelector('resource-constraint')) {
                 // If we get a <resource-constraint> error, we assume it's in context of XEP-0437 RAI.
                 // We remove this MUC's host from the list of enabled domains and rejoin the MUC.
-                const muc_domain = Strophe.getDomainFromJid(this.get('jid'));
                 if (this.session.get('connection_status') === converse.ROOMSTATUS.DISCONNECTED) {
                     this.rejoin();
                 }

+ 2 - 0
src/plugins/muc-views/muc.js

@@ -1121,6 +1121,8 @@ const ChatRoomViewMixin = {
     renderNicknameForm () {
         const tpl_result = tpl_muc_nickname_form(this.model.toJSON());
         if (api.settings.get('muc_show_logs_before_join')) {
+            this.hideSpinner();
+            u.showElement(this.el.querySelector('.chat-area'));
             const container = this.el.querySelector('.muc-bottom-panel');
             render(tpl_result, container);
             u.addClass('muc-bottom-panel--nickname', container);