Selaa lähdekoodia

Fix sending of MUC private message via form

Updates #698
JC Brand 7 kuukautta sitten
vanhempi
commit
41c9b06a00

+ 0 - 1
src/plugins/chatview/message-form.js

@@ -192,7 +192,6 @@ export default class MessageForm extends CustomElement {
     async onFormSubmitted (ev) {
         ev?.preventDefault?.();
         const { chatboxviews } = _converse.state;
-
         const textarea = /** @type {HTMLTextAreaElement} */(this.querySelector('.chat-textarea'));
         const message_text = textarea.value.trim();
         if (

+ 3 - 0
src/plugins/muc-views/styles/occupant-bottom-panel.scss

@@ -7,6 +7,9 @@
             .bottom-panel--muted__msg {
                 padding: 0.5em 0 !important;
             }
+            .btn-primary, .btn-secondary {
+                margin-top: 0.25em;
+            }
         }
     }
 }

+ 1 - 1
src/plugins/muc-views/templates/occupant-bottom-panel.js

@@ -21,7 +21,7 @@ export default (el) => {
             ? html`<div class="new-msgs-indicator" @click=${(ev) => el.viewUnreadMessages(ev)}>▼ ${unread_msgs} ▼</div>`
             : ''}
         ${el.canPostMessages()
-            ? html`<converse-muc-message-form .model=${el.muc}></converse-muc-message-form>`
+            ? html`<converse-muc-message-form .model=${el.model}></converse-muc-message-form>`
             : html`<div class="bottom-panel bottom-panel--muted">
                   <p class="bottom-panel--muted__msg">${i18n_not_allowed}</p>
                   ${el.model.get('jid')

+ 42 - 4
src/plugins/muc-views/tests/muc-private-messages.js

@@ -93,7 +93,7 @@ describe('MUC Private Messages', () => {
 
     describe('When sending a MUC private message', () => {
         it(
-            'correctly shows the senders avatar',
+            'sends out the correct stanza',
             mock.initConverse(['chatBoxesFetched'], { view_mode: 'fullscreen' }, async (_converse) => {
                 const { api } = _converse;
                 const nick = 'romeo';
@@ -118,8 +118,11 @@ describe('MUC Private Messages', () => {
                 // Open the occupant view in the sidebar
                 view.querySelector('.occupant-list converse-avatar[name="firstwitch"]').click();
 
-                const occupant = view.model.getOccupant('firstwitch');
-                occupant.sendMessage({ body: 'hello world' });
+                const textarea = await u.waitUntil(() => view.querySelector('converse-muc-occupant textarea'));
+                textarea.value = 'hello';
+
+                const button = view.querySelector('converse-muc-occupant .send-button');
+                button.click();
 
                 await u.waitUntil(
                     () => api.connection.get().sent_stanzas.filter((s) => s.nodeName === 'message').length
@@ -131,11 +134,46 @@ describe('MUC Private Messages', () => {
                                 to="${muc_jid}/firstwitch"
                                 id="${sent_stanza.getAttribute('id')}"
                                 xmlns="jabber:client">
-                            <body>hello world</body>
+                            <body>hello</body>
                             <active xmlns="http://jabber.org/protocol/chatstates"/>
                             <request xmlns="urn:xmpp:receipts"/>
                             <origin-id xmlns="urn:xmpp:sid:0" id="${sent_stanza.querySelector('origin-id')?.getAttribute('id')}"/>
                         </message>`);
+            })
+        );
+
+        it(
+            'correctly shows the senders avatar',
+            mock.initConverse(['chatBoxesFetched'], { view_mode: 'fullscreen' }, async (_converse) => {
+                const { api } = _converse;
+                const nick = 'romeo';
+                const muc_jid = 'coven@chat.shakespeare.lit';
+                await mock.openAndEnterChatRoom(_converse, muc_jid, nick);
+                const view = _converse.chatboxviews.get(muc_jid);
+
+                _converse.api.connection.get()._dataRecv(
+                    mock.createRequest(stx`
+                            <presence
+                                from="${muc_jid}/firstwitch"
+                                id="${u.getUniqueId()}"
+                                to="${_converse.jid}"
+                                xmlns="jabber:client">
+                            <x xmlns="http://jabber.org/protocol/muc#user">
+                                <item affiliation="owner" role="moderator"/>
+                            </x>
+                            </presence>`)
+                );
+                await u.waitUntil(() => view.querySelectorAll('.occupant-list converse-avatar').length === 2);
+
+                // Open the occupant view in the sidebar
+                view.querySelector('.occupant-list converse-avatar[name="firstwitch"]').click();
+
+                const occupant = view.model.getOccupant('firstwitch');
+                occupant.sendMessage({ body: 'hello world' });
+
+                await u.waitUntil(
+                    () => api.connection.get().sent_stanzas.filter((s) => s.nodeName === 'message').length
+                );
 
                 const avatar = view.querySelector('converse-muc-occupant converse-chat-message converse-avatar');
                 expect(avatar).toBeDefined();