Преглед изворни кода

Bugfix. Handle stanza that clears the MUC subject

JC Brand пре 5 година
родитељ
комит
9ce315dece
3 измењених фајлова са 30 додато и 5 уклоњено
  1. 4 1
      CHANGES.md
  2. 25 3
      spec/muc.js
  3. 1 1
      src/headless/converse-muc.js

+ 4 - 1
CHANGES.md

@@ -1,11 +1,14 @@
 # Changelog
 
+## 6.0.1 (Unreleased)
+
+- Bugfix. Handle stanza that clears the MUC subject
 - #1313: Stylistic improvements to the send button
 - #1793: Send button doesn't appear in Firefox in 1:1 chats
 - #1822: Don't log error if user has no bookmarks
 - #1820: Set focus on jid field after controlbox is loaded
 - #1823: New config options [muc_roomid_policy](https://conversejs.org/docs/html/configuration.html#muc-roomid-policy)
-  and [muc_roomid_policy_hint](https://conversejs.org/docs/html/configuration.html#muc-roomid-policy-hint)
+    and [muc_roomid_policy_hint](https://conversejs.org/docs/html/configuration.html#muc-roomid-policy-hint)
 - #1826: A user can now add himself as a contact
 
 ## 6.0.0 (2020-01-09)

+ 25 - 3
spec/muc.js

@@ -2167,12 +2167,22 @@
                      </message>`);
                 _converse.connection._dataRecv(test_utils.createRequest(stanza));
                 await new Promise(resolve => view.once('messageInserted', resolve));
-                expect(sizzle('.chat-topic').length).toBe(1);
-                expect(sizzle('.chat-msg__subject').length).toBe(1);
-                expect(sizzle('.chat-msg__subject').pop().textContent.trim()).toBe('This is a message subject');
+                expect(sizzle('.chat-topic', view.el).length).toBe(1);
+                expect(sizzle('.chat-msg__subject', view.el).length).toBe(1);
+                expect(sizzle('.chat-msg__subject', view.el).pop().textContent.trim()).toBe('This is a message subject');
                 expect(sizzle('.chat-msg__text').length).toBe(1);
                 expect(sizzle('.chat-msg__text').pop().textContent.trim()).toBe('This is a message');
                 expect(view.el.querySelector('.chatroom-description').textContent.trim()).toBe(text);
+
+                // Removes current topic
+                stanza = u.toStanza(
+                    `<message xmlns="jabber:client" to="jc@opkode.com/_converse.js-60429116" type="groupchat" from="jdev@conference.jabber.org/ralphm">
+                         <subject/>
+                     </message>`);
+                _converse.connection._dataRecv(test_utils.createRequest(stanza));
+                await new Promise(resolve => view.model.once('change:subject', resolve));
+                expect(view.el.querySelector('.chatroom-description').textContent.trim()).toBe("");
+                expect(view.el.querySelector('.chat-info:last-child').textContent.trim()).toBe("Topic cleared by ralphm");
                 done();
             }));
 
@@ -3266,6 +3276,18 @@
                     '<message from="romeo@montague.lit/orchard" to="lounge@montague.lit" type="groupchat" xmlns="jabber:client">'+
                         '<subject xmlns="jabber:client">This is yet another subject</subject>'+
                     '</message>');
+
+                // Check unsetting the topic
+                textarea.value = '/topic';
+                view.onKeyDown({
+                    target: textarea,
+                    preventDefault: function preventDefault () {},
+                    keyCode: 13
+                });
+                expect(Strophe.serialize(sent_stanza).toLocaleString()).toBe(
+                    '<message from="romeo@montague.lit/orchard" to="lounge@montague.lit" type="groupchat" xmlns="jabber:client">'+
+                        '<subject xmlns="jabber:client"></subject>'+
+                    '</message>');
                 done();
             }));
 

+ 1 - 1
src/headless/converse-muc.js

@@ -1477,7 +1477,7 @@ converse.plugins.add('converse-muc', {
              * @param { object } attrs - The message attributes
              */
             subjectChangeHandled (attrs) {
-                if (attrs.subject && !attrs.thread && !attrs.message) {
+                if (isString(attrs.subject) && !attrs.thread && !attrs.message) {
                     // https://xmpp.org/extensions/xep-0045.html#subject-mod
                     // -----------------------------------------------------
                     // The subject is changed by sending a message of type "groupchat" to the <room@service>,