From 32847e860fc7dd9e6ae4be7e5ef3985df1dbccdd Mon Sep 17 00:00:00 2001 From: JC Brand Date: Fri, 18 Sep 2020 12:55:24 +0200 Subject: [PATCH] pubsub: await IQ response when publishing --- spec/omemo.js | 22 ++++++++++++++++++---- src/headless/converse-pubsub.js | 4 ++-- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/spec/omemo.js b/spec/omemo.js index b22155343..fda3c4159 100644 --- a/spec/omemo.js +++ b/spec/omemo.js @@ -57,6 +57,7 @@ async function initializedOMEMO (_converse) { 'to': _converse.bare_jid, 'type': 'result'}); _converse.connection._dataRecv(mock.createRequest(stanza)); + iq_stanza = await u.waitUntil(() => bundleHasBeenPublished(_converse)) stanza = $iq({ @@ -69,7 +70,7 @@ async function initializedOMEMO (_converse) { } -describe("The OMEMO module", function() { +fdescribe("The OMEMO module", function() { it("adds methods for encrypting and decrypting messages via AES GCM", mock.initConverse( @@ -244,7 +245,8 @@ describe("The OMEMO module", function() { await u.waitUntil(() => initializedOMEMO(_converse)); const toolbar = view.el.querySelector('.chat-toolbar'); - toolbar.querySelector('.toggle-omemo').click(); + const el = await u.waitUntil(() => toolbar.querySelector('.toggle-omemo')); + el.click(); expect(view.model.get('omemo_active')).toBe(true); // newguy enters the room @@ -433,7 +435,19 @@ describe("The OMEMO module", function() { `); + _converse.connection.IQ_stanzas = []; _converse.connection._dataRecv(mock.createRequest(carbon)); + + // The message received is a prekey message, so missing prekeys are + // generated and a new bundle published. + iq_stanza = await u.waitUntil(() => bundleHasBeenPublished(_converse)); + const result_iq = $iq({ + 'from': _converse.bare_jid, + 'id': iq_stanza.getAttribute('id'), + 'to': _converse.bare_jid, + 'type': 'result'}); + _converse.connection._dataRecv(mock.createRequest(result_iq)); + await new Promise(resolve => view.model.messages.once('rendered', resolve)); expect(view.model.messages.length).toBe(1); @@ -501,7 +515,7 @@ describe("The OMEMO module", function() { _converse.connection._dataRecv(mock.createRequest(stanza)); const toolbar = view.el.querySelector('.chat-toolbar'); - const toggle = toolbar.querySelector('.toggle-omemo'); + const toggle = await u.waitUntil(() => toolbar.querySelector('.toggle-omemo')); toggle.click(); expect(view.model.get('omemo_active')).toBe(true); expect(view.model.get('omemo_supported')).toBe(true); @@ -1283,7 +1297,7 @@ describe("The OMEMO module", function() { await u.waitUntil(() => initializedOMEMO(_converse)); const toolbar = view.el.querySelector('.chat-toolbar'); - let toggle = toolbar.querySelector('.toggle-omemo'); + let toggle = await u.waitUntil(() => toolbar.querySelector('.toggle-omemo')); expect(view.model.get('omemo_active')).toBe(undefined); expect(view.model.get('omemo_supported')).toBe(true); await u.waitUntil(() => !toggle.disabled); diff --git a/src/headless/converse-pubsub.js b/src/headless/converse-pubsub.js index 71f8d72e4..2ccdd9255 100644 --- a/src/headless/converse-pubsub.js +++ b/src/headless/converse-pubsub.js @@ -66,7 +66,7 @@ converse.plugins.add('converse-pubsub', { } } try { - api.sendIQ(stanza); + await api.sendIQ(stanza); } catch (iq) { if (iq instanceof Element && strict_options && @@ -77,7 +77,7 @@ converse.plugins.add('converse-pubsub', { const el = stanza.nodeTree; el.querySelector('publish-options').outerHTML = ''; log.warn(`PubSub: Republishing without publish options. ${el.outerHTML}`); - api.sendIQ(el); + await api.sendIQ(el); } else { throw iq; }