diff --git a/dist/converse.js b/dist/converse.js index c0ee3a4a4..0bc1fedfe 100644 --- a/dist/converse.js +++ b/dist/converse.js @@ -70894,9 +70894,9 @@ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } return err_msg; } - const required_fields = _.map(sizzle('field required', iq), 'parentElement'); + const required_fields = sizzle('field required', iq).map(f => f.parentElement); - if (required_fields.length > 1 || required_fields[0].getAttribute('var') !== 'muc#register_roomnick') { + if (required_fields.length > 1 && required_fields[0].getAttribute('var') !== 'muc#register_roomnick') { return _converse.log(`Can't register the user register in the groupchat ${jid} due to the required fields`); } diff --git a/spec/push.js b/spec/push.js index 3a6b8e309..f2e854602 100644 --- a/spec/push.js +++ b/spec/push.js @@ -60,6 +60,7 @@ it("can be enabled for a MUC domain", mock.initConverseWithPromises(null, ['rosterGroupsFetched'], { + 'enable_muc_push': true, 'push_app_servers': [{ 'jid': 'push-5@client.example', 'node': 'yxs32uqsflafdk3iuqo' diff --git a/spec/room_registration.js b/spec/room_registration.js index 546e6f5ab..81f8459cb 100644 --- a/spec/room_registration.js +++ b/spec/room_registration.js @@ -3,6 +3,7 @@ } (this, function (jasmine, mock, test_utils) { const _ = converse.env._, $iq = converse.env.$iq, + $pres = converse.env.$pres, Strophe = converse.env.Strophe, sizzle = converse.env.sizzle, u = converse.env.utils; @@ -80,10 +81,48 @@ function (done, _converse) { let view; + const IQ_stanzas = _converse.connection.IQ_stanzas; const room_jid = 'coven@chat.shakespeare.lit'; - test_utils.openAndEnterChatRoom(_converse, 'coven', 'chat.shakespeare.lit', 'romeo') + _converse.api.rooms.open(room_jid, {'nick': 'romeo'}) .then(() => { + return test_utils.waitUntil(() => _.get(_.filter( + IQ_stanzas, + iq => iq.nodeTree.querySelector( + `iq[to="${room_jid}"] query[xmlns="http://jabber.org/protocol/disco#info"]` + )).pop(), 'nodeTree')); + }).then(stanza => { + const features_stanza = $iq({ + 'from': room_jid, + 'id': stanza.getAttribute('id'), + 'to': 'dummy@localhost/desktop', + 'type': 'result' + }).c('query', { 'xmlns': 'http://jabber.org/protocol/disco#info'}) + .c('identity', { + 'category': 'conference', + 'name': 'A Dark Cave', + 'type': 'text' + }).up() + .c('feature', {'var': 'http://jabber.org/protocol/muc'}).up() + .c('feature', {'var': 'jabber:iq:register'}); + _converse.connection._dataRecv(test_utils.createRequest(features_stanza)); view = _converse.chatboxviews.get('coven@chat.shakespeare.lit'); + return test_utils.waitUntil(() => (view.model.get('connection_status') === converse.ROOMSTATUS.CONNECTING)); + }).then(stanza => { + // The user has just entered the room (because join was called) + // and receives their own presence from the server. + // See example 24: http://xmpp.org/extensions/xep-0045.html#enter-pres + const presence = $pres({ + to: _converse.connection.jid, + from: room_jid, + id: u.getUniqueId() + }).c('x').attrs({xmlns:'http://jabber.org/protocol/muc#user'}) + .c('item').attrs({ + affiliation: 'owner', + jid: _converse.bare_jid, + role: 'moderator' + }).up() + .c('status').attrs({code:'110'}); + _converse.connection._dataRecv(test_utils.createRequest(presence)); return test_utils.waitUntil(() => _.get(_.filter( _converse.connection.IQ_stanzas, iq => sizzle(`iq[to="coven@chat.shakespeare.lit"][type="get"] query[xmlns="jabber:iq:register"]`, iq.nodeTree).length diff --git a/src/converse-muc.js b/src/converse-muc.js index 6acbc4cf9..ef8c8f3db 100644 --- a/src/converse-muc.js +++ b/src/converse-muc.js @@ -836,8 +836,8 @@ _converse.log(e, Strophe.LogLevel.ERROR); return err_msg; } - const required_fields = _.map(sizzle('field required', iq), 'parentElement'); - if (required_fields.length > 1 || required_fields[0].getAttribute('var') !== 'muc#register_roomnick') { + const required_fields = sizzle('field required', iq).map(f => f.parentElement); + if (required_fields.length > 1 && required_fields[0].getAttribute('var') !== 'muc#register_roomnick') { return _converse.log(`Can't register the user register in the groupchat ${jid} due to the required fields`); } try {