Browse Source

Bugfix: MUC invite form not shown

JC Brand 6 years ago
parent
commit
af0093bd39
4 changed files with 39 additions and 30 deletions
  1. 1 0
      CHANGES.md
  2. 2 2
      dist/converse.js
  3. 34 26
      spec/muc.js
  4. 2 2
      src/converse-muc-views.js

+ 1 - 0
CHANGES.md

@@ -9,6 +9,7 @@
 - Rudimentary support for XEP-0333 chat markers
 - Better support for XEP-0359 `stanza-id` and `origin-id` elements.
 - Bugfix: restore textarea size after sending a message
+- Bugfix: MUC invite form not appearing
 - #1369 Don't wrongly interpret message with `subject` as a topic change.
 - #1405 Status of contacts list are not displayed properly
 - #1408 New config option `roomconfig_whitelist`

+ 2 - 2
dist/converse.js

@@ -55146,8 +55146,8 @@ _converse_headless_converse_core__WEBPACK_IMPORTED_MODULE_3__["default"].plugins
       initialize() {
         Backbone.OrderedListView.prototype.initialize.apply(this, arguments);
         this.chatroomview = this.model.chatroomview;
-        this.chatroomview.model.on('change:open', this.renderInviteWidget, this);
         this.chatroomview.model.on('change:affiliation', this.renderInviteWidget, this);
+        this.chatroomview.model.features.on('change:open', this.renderInviteWidget, this);
         this.chatroomview.model.features.on('change', this.renderRoomFeatures, this);
         this.render();
         this.model.fetch({
@@ -55251,7 +55251,7 @@ _converse_headless_converse_core__WEBPACK_IMPORTED_MODULE_3__["default"].plugins
       },
 
       shouldInviteWidgetBeShown() {
-        return _converse.allow_muc_invitations && (this.chatroomview.model.get('open') || this.chatroomview.model.get('affiliation') === "owner");
+        return _converse.allow_muc_invitations && (this.chatroomview.model.features.get('open') || this.chatroomview.model.get('affiliation') === "owner");
       },
 
       initInviteWidget() {

+ 34 - 26
spec/muc.js

@@ -1725,20 +1725,31 @@
                 // cheat here and emit the event.
                 _converse.emit('rosterContactsFetched');
 
-                await test_utils.openChatRoom(_converse, 'lounge', 'localhost', 'dummy');
-                spyOn(_converse, 'emit');
-                spyOn(window, 'prompt').and.callFake(function () {
-                    return "Please join!";
-                });
+                const features = [
+                    'http://jabber.org/protocol/muc',
+                    'jabber:iq:register',
+                    'muc_passwordprotected',
+                    'muc_hidden',
+                    'muc_temporary',
+                    'muc_membersonly',
+                    'muc_unmoderated',
+                    'muc_anonymous'
+                ]
+                await test_utils.openAndEnterChatRoom(_converse, 'lounge', 'localhost', 'dummy', features);
+                spyOn(_converse, 'emit').and.callThrough();
+                spyOn(window, 'prompt').and.callFake(() => "Please join!");
                 const view = _converse.chatboxviews.get('lounge@localhost');
+                const chat_area = view.el.querySelector('.chat-area');
 
-                // XXX: cheating a lttle bit, normally this'll be set after
-                // receiving the features for the groupchat.
-                view.model.set('open', 'true');
+                expect(view.model.get('affiliation')).toBe('owner');
+                expect(view.model.features.get('open')).toBe(false);
+                expect(view.el.querySelectorAll('input.invited-contact').length).toBe(1);
 
+                view.model.set('affiliation', 'member');
+                await test_utils.waitUntil(() => view.el.querySelectorAll('input.invited-contact').length === 0);
+
+                view.model.features.set('open', 'true');
                 spyOn(view.model, 'directInvite').and.callThrough();
-                const chat_area = view.el.querySelector('.chat-area');
-                chat_area.parentElement.removeChild(chat_area);
                 await test_utils.waitUntil(() => view.el.querySelectorAll('input.invited-contact').length);
                 const input = view.el.querySelector('input.invited-contact');
                 expect(input.getAttribute('placeholder')).toBe('Invite');
@@ -1755,22 +1766,19 @@
                 expect(hint.textContent).toBe('Felix Amsel');
                 expect(input.nextSibling.childNodes.length).toBe(1);
 
-                if (typeof(Event) === 'function') {
-                    // Not working on PhantomJS
-                    evt = new Event('mousedown', {'bubbles': true});
-                    evt.button = 0; // For some reason awesomplete wants this
-                    hint.dispatchEvent(evt);
-                    expect(window.prompt).toHaveBeenCalled();
-                    expect(view.model.directInvite).toHaveBeenCalled();
-                    expect(sent_stanza.toLocaleString()).toBe(
-                        `<message from="dummy@localhost/resource" `+
-                                `id="${sent_stanza.nodeTree.getAttribute("id")}" `+
-                                `to="felix.amsel@localhost" `+
-                                `xmlns="jabber:client">`+
-                            `<x jid="lounge@localhost" reason="Please join!" xmlns="jabber:x:conference"/>`+
-                        `</message>`
-                    );
-                }
+                evt = new Event('mousedown', {'bubbles': true});
+                evt.button = 0; // For some reason awesomplete wants this
+                hint.dispatchEvent(evt);
+                expect(window.prompt).toHaveBeenCalled();
+                expect(view.model.directInvite).toHaveBeenCalled();
+                expect(sent_stanza.toLocaleString()).toBe(
+                    `<message from="dummy@localhost/resource" `+
+                            `id="${sent_stanza.nodeTree.getAttribute("id")}" `+
+                            `to="felix.amsel@localhost" `+
+                            `xmlns="jabber:client">`+
+                        `<x jid="lounge@localhost" reason="Please join!" xmlns="jabber:x:conference"/>`+
+                    `</message>`
+                );
                 done();
             }));
 

+ 2 - 2
src/converse-muc-views.js

@@ -1849,8 +1849,8 @@ converse.plugins.add('converse-muc-views', {
                 Backbone.OrderedListView.prototype.initialize.apply(this, arguments);
 
                 this.chatroomview = this.model.chatroomview;
-                this.chatroomview.model.on('change:open', this.renderInviteWidget, this);
                 this.chatroomview.model.on('change:affiliation', this.renderInviteWidget, this);
+                this.chatroomview.model.features.on('change:open', this.renderInviteWidget, this);
                 this.chatroomview.model.features.on('change', this.renderRoomFeatures, this);
 
                 this.render();
@@ -1955,7 +1955,7 @@ converse.plugins.add('converse-muc-views', {
 
             shouldInviteWidgetBeShown () {
                 return _converse.allow_muc_invitations &&
-                    (this.chatroomview.model.get('open') ||
+                    (this.chatroomview.model.features.get('open') ||
                         this.chatroomview.model.get('affiliation') === "owner"
                     );
             },