瀏覽代碼

Bugfix. Should be && not ||

JC Brand 6 年之前
父節點
當前提交
93c956ba4b
共有 4 個文件被更改,包括 45 次插入5 次删除
  1. 2 2
      dist/converse.js
  2. 1 0
      spec/push.js
  3. 40 1
      spec/room_registration.js
  4. 2 2
      src/converse-muc.js

+ 2 - 2
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`);
           }
 

+ 1 - 0
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'

+ 40 - 1
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

+ 2 - 2
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 {