Browse Source

Move MUC API tests into own file

JC Brand 4 years ago
parent
commit
851bfc61e0
3 changed files with 256 additions and 249 deletions
  1. 1 0
      karma.conf.js
  2. 255 0
      spec/muc-api.js
  3. 0 249
      spec/muc.js

+ 1 - 0
karma.conf.js

@@ -58,6 +58,7 @@ module.exports = function(config) {
       { pattern: "spec/me-messages.js", type: 'module' },
       { pattern: "spec/me-messages.js", type: 'module' },
       { pattern: "spec/mentions.js", type: 'module' },
       { pattern: "spec/mentions.js", type: 'module' },
       { pattern: "spec/retractions.js", type: 'module' },
       { pattern: "spec/retractions.js", type: 'module' },
+      { pattern: "spec/muc-api.js", type: 'module' },
       { pattern: "spec/muc.js", type: 'module' },
       { pattern: "spec/muc.js", type: 'module' },
       { pattern: "spec/modtools.js", type: 'module' },
       { pattern: "spec/modtools.js", type: 'module' },
       { pattern: "spec/room_registration.js", type: 'module' },
       { pattern: "spec/room_registration.js", type: 'module' },

+ 255 - 0
spec/muc-api.js

@@ -0,0 +1,255 @@
+/*global mock, converse */
+
+const Model = converse.env.Model;
+const { sizzle, u } = converse.env;
+
+describe("Groupchats", function () {
+
+    describe("The \"rooms\" API", function () {
+
+        it("has a method 'close' which closes rooms by JID or all rooms when called with no arguments",
+                mock.initConverse([], {}, async function (done, _converse) {
+
+            await mock.openAndEnterChatRoom(_converse, 'lounge@montague.lit', 'romeo');
+
+            _converse.connection.IQ_stanzas = [];
+            await mock.openAndEnterChatRoom(_converse, 'leisure@montague.lit', 'romeo');
+
+            _converse.connection.IQ_stanzas = [];
+            await mock.openAndEnterChatRoom(_converse, 'news@montague.lit', 'romeo');
+
+            expect(u.isVisible(_converse.chatboxviews.get('lounge@montague.lit'))).toBeTruthy();
+            expect(u.isVisible(_converse.chatboxviews.get('leisure@montague.lit'))).toBeTruthy();
+            expect(u.isVisible(_converse.chatboxviews.get('news@montague.lit'))).toBeTruthy();
+
+            await _converse.api.roomviews.close('lounge@montague.lit');
+            expect(_converse.chatboxviews.get('lounge@montague.lit')).toBeUndefined();
+            expect(u.isVisible(_converse.chatboxviews.get('leisure@montague.lit'))).toBeTruthy();
+            expect(u.isVisible(_converse.chatboxviews.get('news@montague.lit'))).toBeTruthy();
+
+            await _converse.api.roomviews.close(['leisure@montague.lit', 'news@montague.lit']);
+            expect(_converse.chatboxviews.get('lounge@montague.lit')).toBeUndefined();
+            expect(_converse.chatboxviews.get('leisure@montague.lit')).toBeUndefined();
+            expect(_converse.chatboxviews.get('news@montague.lit')).toBeUndefined();
+            await mock.openAndEnterChatRoom(_converse, 'lounge@montague.lit', 'romeo');
+            await mock.openAndEnterChatRoom(_converse, 'leisure@montague.lit', 'romeo');
+            expect(u.isVisible(_converse.chatboxviews.get('lounge@montague.lit'))).toBeTruthy();
+            expect(u.isVisible(_converse.chatboxviews.get('leisure@montague.lit'))).toBeTruthy();
+            await _converse.api.roomviews.close();
+            expect(_converse.chatboxviews.get('lounge@montague.lit')).toBeUndefined();
+            expect(_converse.chatboxviews.get('leisure@montague.lit')).toBeUndefined();
+            done();
+        }));
+
+        it("has a method 'get' which returns a wrapped groupchat (if it exists)",
+                mock.initConverse([], {}, async function (done, _converse) {
+
+            await mock.waitForRoster(_converse, 'current');
+            const rosterview = document.querySelector('converse-roster');
+            await u.waitUntil(() => rosterview.querySelectorAll('.roster-group .group-toggle').length, 300);
+            let muc_jid = 'chillout@montague.lit';
+            await mock.openAndEnterChatRoom(_converse, muc_jid, 'romeo');
+            let room = await _converse.api.rooms.get(muc_jid);
+            expect(room instanceof Object).toBeTruthy();
+
+            let chatroomview = _converse.chatboxviews.get(muc_jid);
+            expect(chatroomview.is_chatroom).toBeTruthy();
+
+            expect(u.isVisible(chatroomview)).toBeTruthy();
+            await chatroomview.close();
+
+            // Test with mixed case
+            muc_jid = 'Leisure@montague.lit';
+            await mock.openAndEnterChatRoom(_converse, muc_jid, 'romeo');
+            room = await _converse.api.rooms.get(muc_jid);
+            expect(room instanceof Object).toBeTruthy();
+            chatroomview = _converse.chatboxviews.get(muc_jid.toLowerCase());
+            expect(u.isVisible(chatroomview)).toBeTruthy();
+
+            muc_jid = 'leisure@montague.lit';
+            room = await _converse.api.rooms.get(muc_jid);
+            expect(room instanceof Object).toBeTruthy();
+            chatroomview = _converse.chatboxviews.get(muc_jid.toLowerCase());
+            expect(u.isVisible(chatroomview)).toBeTruthy();
+
+            muc_jid = 'leiSure@montague.lit';
+            room = await _converse.api.rooms.get(muc_jid);
+            expect(room instanceof Object).toBeTruthy();
+            chatroomview = _converse.chatboxviews.get(muc_jid.toLowerCase());
+            expect(u.isVisible(chatroomview)).toBeTruthy();
+            chatroomview.close();
+
+            // Non-existing room
+            muc_jid = 'chillout2@montague.lit';
+            room = await _converse.api.rooms.get(muc_jid);
+            expect(room).toBe(null);
+            done();
+        }));
+
+        it("has a method 'open' which opens (optionally configures) and returns a wrapped chat box",
+                mock.initConverse(['chatBoxesFetched'], {}, async function (done, _converse) {
+
+            // Mock 'getDiscoInfo', otherwise the room won't be
+            // displayed as it waits first for the features to be returned
+            // (when it's a new room being created).
+            spyOn(_converse.ChatRoom.prototype, 'getDiscoInfo').and.callFake(() => Promise.resolve());
+
+            let jid = 'lounge@montague.lit';
+            let chatroomview, IQ_id;
+            await mock.openControlBox(_converse);
+            await mock.waitForRoster(_converse, 'current');
+            const rosterview = document.querySelector('converse-roster');
+            await u.waitUntil(() => rosterview.querySelectorAll('.roster-group .group-toggle').length);
+
+            let room = await _converse.api.rooms.open(jid);
+            // Test on groupchat that's not yet open
+            expect(room instanceof Model).toBeTruthy();
+            chatroomview = _converse.chatboxviews.get(jid);
+            expect(chatroomview.is_chatroom).toBeTruthy();
+            await u.waitUntil(() => u.isVisible(chatroomview));
+
+            // Test again, now that the room exists.
+            room = await _converse.api.rooms.open(jid);
+            expect(room instanceof Model).toBeTruthy();
+            chatroomview = _converse.chatboxviews.get(jid);
+            expect(chatroomview.is_chatroom).toBeTruthy();
+            expect(u.isVisible(chatroomview)).toBeTruthy();
+            await chatroomview.close();
+
+            // Test with mixed case in JID
+            jid = 'Leisure@montague.lit';
+            room = await _converse.api.rooms.open(jid);
+            expect(room instanceof Model).toBeTruthy();
+            chatroomview = _converse.chatboxviews.get(jid.toLowerCase());
+            await u.waitUntil(() => u.isVisible(chatroomview));
+
+            jid = 'leisure@montague.lit';
+            room = await _converse.api.rooms.open(jid);
+            expect(room instanceof Model).toBeTruthy();
+            chatroomview = _converse.chatboxviews.get(jid.toLowerCase());
+            await u.waitUntil(() => u.isVisible(chatroomview));
+
+            jid = 'leiSure@montague.lit';
+            room = await _converse.api.rooms.open(jid);
+            expect(room instanceof Model).toBeTruthy();
+            chatroomview = _converse.chatboxviews.get(jid.toLowerCase());
+            await u.waitUntil(() => u.isVisible(chatroomview));
+            chatroomview.close();
+
+            _converse.muc_instant_rooms = false;
+            const sendIQ = _converse.connection.sendIQ;
+            spyOn(_converse.connection, 'sendIQ').and.callFake(function (iq, callback, errback) {
+                IQ_id = sendIQ.bind(this)(iq, callback, errback);
+            });
+            // Test with configuration
+            room = await _converse.api.rooms.open('room@conference.example.org', {
+                'nick': 'some1',
+                'auto_configure': true,
+                'roomconfig': {
+                    'getmemberlist': ['moderator', 'participant'],
+                    'changesubject': false,
+                    'membersonly': true,
+                    'persistentroom': true,
+                    'publicroom': true,
+                    'roomdesc': 'Welcome to this groupchat',
+                    'whois': 'anyone'
+                }
+            });
+            expect(room instanceof Model).toBeTruthy();
+            chatroomview = _converse.chatboxviews.get('room@conference.example.org');
+
+            // We pretend this is a new room, so no disco info is returned.
+            const features_stanza = $iq({
+                    from: 'room@conference.example.org',
+                    'id': IQ_id,
+                    'to': 'romeo@montague.lit/desktop',
+                    'type': 'error'
+                }).c('error', {'type': 'cancel'})
+                    .c('item-not-found', {'xmlns': "urn:ietf:params:xml:ns:xmpp-stanzas"});
+            _converse.connection._dataRecv(mock.createRequest(features_stanza));
+
+            /* <presence xmlns="jabber:client" to="romeo@montague.lit/pda" from="room@conference.example.org/yo">
+             *  <x xmlns="http://jabber.org/protocol/muc#user">
+             *      <item affiliation="owner" jid="romeo@montague.lit/pda" role="moderator"/>
+             *      <status code="110"/>
+             *      <status code="201"/>
+             *  </x>
+             * </presence>
+             */
+            const presence = $pres({
+                    from:'room@conference.example.org/some1',
+                    to:'romeo@montague.lit/pda'
+                })
+                .c('x', {xmlns:'http://jabber.org/protocol/muc#user'})
+                .c('item', {
+                    affiliation: 'owner',
+                    jid: 'romeo@montague.lit/pda',
+                    role: 'moderator'
+                }).up()
+                .c('status', {code:'110'}).up()
+                .c('status', {code:'201'});
+            _converse.connection._dataRecv(mock.createRequest(presence));
+            expect(_converse.connection.sendIQ).toHaveBeenCalled();
+
+            const IQ_stanzas = _converse.connection.IQ_stanzas;
+            const iq = await u.waitUntil(() => IQ_stanzas.filter(s => s.querySelector(`query[xmlns="${Strophe.NS.MUC_OWNER}"]`)).pop());
+            expect(Strophe.serialize(iq)).toBe(
+                `<iq id="${iq.getAttribute('id')}" to="room@conference.example.org" type="get" xmlns="jabber:client">`+
+                `<query xmlns="http://jabber.org/protocol/muc#owner"/></iq>`);
+
+            const node = u.toStanza(`
+               <iq xmlns="jabber:client"
+                    type="result"
+                    to="romeo@montague.lit/pda"
+                    from="room@conference.example.org" id="${iq.getAttribute('id')}">
+                <query xmlns="http://jabber.org/protocol/muc#owner">
+                    <x xmlns="jabber:x:data" type="form">
+                    <title>Configuration for room@conference.example.org</title>
+                    <instructions>Complete and submit this form to configure the room.</instructions>
+                    <field var="FORM_TYPE" type="hidden">
+                        <value>http://jabber.org/protocol/muc#roomconfig</value>
+                    </field>
+                    <field type="text-single" var="muc#roomconfig_roomname" label="Name">
+                        <value>Room</value>
+                    </field>
+                    <field type="text-single" var="muc#roomconfig_roomdesc" label="Description"><value/></field>
+                    <field type="boolean" var="muc#roomconfig_persistentroom" label="Make Room Persistent?"/>
+                    <field type="boolean" var="muc#roomconfig_publicroom" label="Make Room Publicly Searchable?"><value>1</value></field>
+                    <field type="boolean" var="muc#roomconfig_changesubject" label="Allow Occupants to Change Subject?"/>
+                    <field type="list-single" var="muc#roomconfig_whois" label="Who May Discover Real JIDs?"><option label="Moderators Only">
+                       <value>moderators</value></option><option label="Anyone"><value>anyone</value></option>
+                    </field>
+                    <field label="Roles and Affiliations that May Retrieve Member List"
+                           type="list-multi"
+                           var="muc#roomconfig_getmemberlist">
+                        <value>moderator</value>
+                        <value>participant</value>
+                        <value>visitor</value>
+                    </field>
+                    <field type="text-private" var="muc#roomconfig_roomsecret" label="Password"><value/></field>
+                    <field type="boolean" var="muc#roomconfig_moderatedroom" label="Make Room Moderated?"/>
+                    <field type="boolean" var="muc#roomconfig_membersonly" label="Make Room Members-Only?"/>
+                    <field type="text-single" var="muc#roomconfig_historylength" label="Maximum Number of History Messages Returned by Room">
+                       <value>20</value></field>
+                    </x>
+                </query>
+                </iq>`);
+
+            spyOn(chatroomview.model, 'sendConfiguration').and.callThrough();
+            _converse.connection._dataRecv(mock.createRequest(node));
+            await u.waitUntil(() => chatroomview.model.sendConfiguration.calls.count() === 1);
+
+            const sent_stanza = IQ_stanzas.filter(s => s.getAttribute('type') === 'set').pop();
+            expect(sizzle('field[var="muc#roomconfig_roomname"] value', sent_stanza).pop().textContent.trim()).toBe('Room');
+            expect(sizzle('field[var="muc#roomconfig_roomdesc"] value', sent_stanza).pop().textContent.trim()).toBe('Welcome to this groupchat');
+            expect(sizzle('field[var="muc#roomconfig_persistentroom"] value', sent_stanza).pop().textContent.trim()).toBe('1');
+            expect(sizzle('field[var="muc#roomconfig_getmemberlist"] value', sent_stanza).map(e => e.textContent.trim()).join(' ')).toBe('moderator participant');
+            expect(sizzle('field[var="muc#roomconfig_publicroom"] value ', sent_stanza).pop().textContent.trim()).toBe('1');
+            expect(sizzle('field[var="muc#roomconfig_changesubject"] value', sent_stanza).pop().textContent.trim()).toBe('0');
+            expect(sizzle('field[var="muc#roomconfig_whois"] value ', sent_stanza).pop().textContent.trim()).toBe('anyone');
+            expect(sizzle('field[var="muc#roomconfig_membersonly"] value', sent_stanza).pop().textContent.trim()).toBe('1');
+            expect(sizzle('field[var="muc#roomconfig_historylength"] value', sent_stanza).pop().textContent.trim()).toBe('20');
+            done();
+        }));
+    });
+});

+ 0 - 249
spec/muc.js

@@ -3,7 +3,6 @@
 const $pres = converse.env.$pres;
 const $pres = converse.env.$pres;
 const $iq = converse.env.$iq;
 const $iq = converse.env.$iq;
 const $msg = converse.env.$msg;
 const $msg = converse.env.$msg;
-const Model = converse.env.Model;
 const Strophe = converse.env.Strophe;
 const Strophe = converse.env.Strophe;
 const Promise = converse.env.Promise;
 const Promise = converse.env.Promise;
 const sizzle = converse.env.sizzle;
 const sizzle = converse.env.sizzle;
@@ -11,254 +10,6 @@ const u = converse.env.utils;
 
 
 describe("Groupchats", function () {
 describe("Groupchats", function () {
 
 
-    describe("The \"rooms\" API", function () {
-
-        it("has a method 'close' which closes rooms by JID or all rooms when called with no arguments",
-                mock.initConverse([], {}, async function (done, _converse) {
-
-            await mock.openAndEnterChatRoom(_converse, 'lounge@montague.lit', 'romeo');
-
-            _converse.connection.IQ_stanzas = [];
-            await mock.openAndEnterChatRoom(_converse, 'leisure@montague.lit', 'romeo');
-
-            _converse.connection.IQ_stanzas = [];
-            await mock.openAndEnterChatRoom(_converse, 'news@montague.lit', 'romeo');
-
-            expect(u.isVisible(_converse.chatboxviews.get('lounge@montague.lit'))).toBeTruthy();
-            expect(u.isVisible(_converse.chatboxviews.get('leisure@montague.lit'))).toBeTruthy();
-            expect(u.isVisible(_converse.chatboxviews.get('news@montague.lit'))).toBeTruthy();
-
-            await _converse.api.roomviews.close('lounge@montague.lit');
-            expect(_converse.chatboxviews.get('lounge@montague.lit')).toBeUndefined();
-            expect(u.isVisible(_converse.chatboxviews.get('leisure@montague.lit'))).toBeTruthy();
-            expect(u.isVisible(_converse.chatboxviews.get('news@montague.lit'))).toBeTruthy();
-
-            await _converse.api.roomviews.close(['leisure@montague.lit', 'news@montague.lit']);
-            expect(_converse.chatboxviews.get('lounge@montague.lit')).toBeUndefined();
-            expect(_converse.chatboxviews.get('leisure@montague.lit')).toBeUndefined();
-            expect(_converse.chatboxviews.get('news@montague.lit')).toBeUndefined();
-            await mock.openAndEnterChatRoom(_converse, 'lounge@montague.lit', 'romeo');
-            await mock.openAndEnterChatRoom(_converse, 'leisure@montague.lit', 'romeo');
-            expect(u.isVisible(_converse.chatboxviews.get('lounge@montague.lit'))).toBeTruthy();
-            expect(u.isVisible(_converse.chatboxviews.get('leisure@montague.lit'))).toBeTruthy();
-            await _converse.api.roomviews.close();
-            expect(_converse.chatboxviews.get('lounge@montague.lit')).toBeUndefined();
-            expect(_converse.chatboxviews.get('leisure@montague.lit')).toBeUndefined();
-            done();
-        }));
-
-        it("has a method 'get' which returns a wrapped groupchat (if it exists)",
-                mock.initConverse([], {}, async function (done, _converse) {
-
-            await mock.waitForRoster(_converse, 'current');
-            const rosterview = document.querySelector('converse-roster');
-            await u.waitUntil(() => rosterview.querySelectorAll('.roster-group .group-toggle').length, 300);
-            let muc_jid = 'chillout@montague.lit';
-            await mock.openAndEnterChatRoom(_converse, muc_jid, 'romeo');
-            let room = await _converse.api.rooms.get(muc_jid);
-            expect(room instanceof Object).toBeTruthy();
-
-            let chatroomview = _converse.chatboxviews.get(muc_jid);
-            expect(chatroomview.is_chatroom).toBeTruthy();
-
-            expect(u.isVisible(chatroomview)).toBeTruthy();
-            await chatroomview.close();
-
-            // Test with mixed case
-            muc_jid = 'Leisure@montague.lit';
-            await mock.openAndEnterChatRoom(_converse, muc_jid, 'romeo');
-            room = await _converse.api.rooms.get(muc_jid);
-            expect(room instanceof Object).toBeTruthy();
-            chatroomview = _converse.chatboxviews.get(muc_jid.toLowerCase());
-            expect(u.isVisible(chatroomview)).toBeTruthy();
-
-            muc_jid = 'leisure@montague.lit';
-            room = await _converse.api.rooms.get(muc_jid);
-            expect(room instanceof Object).toBeTruthy();
-            chatroomview = _converse.chatboxviews.get(muc_jid.toLowerCase());
-            expect(u.isVisible(chatroomview)).toBeTruthy();
-
-            muc_jid = 'leiSure@montague.lit';
-            room = await _converse.api.rooms.get(muc_jid);
-            expect(room instanceof Object).toBeTruthy();
-            chatroomview = _converse.chatboxviews.get(muc_jid.toLowerCase());
-            expect(u.isVisible(chatroomview)).toBeTruthy();
-            chatroomview.close();
-
-            // Non-existing room
-            muc_jid = 'chillout2@montague.lit';
-            room = await _converse.api.rooms.get(muc_jid);
-            expect(room).toBe(null);
-            done();
-        }));
-
-        it("has a method 'open' which opens (optionally configures) and returns a wrapped chat box",
-                mock.initConverse(['chatBoxesFetched'], {}, async function (done, _converse) {
-
-            // Mock 'getDiscoInfo', otherwise the room won't be
-            // displayed as it waits first for the features to be returned
-            // (when it's a new room being created).
-            spyOn(_converse.ChatRoom.prototype, 'getDiscoInfo').and.callFake(() => Promise.resolve());
-
-            let jid = 'lounge@montague.lit';
-            let chatroomview, IQ_id;
-            await mock.openControlBox(_converse);
-            await mock.waitForRoster(_converse, 'current');
-            const rosterview = document.querySelector('converse-roster');
-            await u.waitUntil(() => rosterview.querySelectorAll('.roster-group .group-toggle').length);
-
-            let room = await _converse.api.rooms.open(jid);
-            // Test on groupchat that's not yet open
-            expect(room instanceof Model).toBeTruthy();
-            chatroomview = _converse.chatboxviews.get(jid);
-            expect(chatroomview.is_chatroom).toBeTruthy();
-            await u.waitUntil(() => u.isVisible(chatroomview));
-
-            // Test again, now that the room exists.
-            room = await _converse.api.rooms.open(jid);
-            expect(room instanceof Model).toBeTruthy();
-            chatroomview = _converse.chatboxviews.get(jid);
-            expect(chatroomview.is_chatroom).toBeTruthy();
-            expect(u.isVisible(chatroomview)).toBeTruthy();
-            await chatroomview.close();
-
-            // Test with mixed case in JID
-            jid = 'Leisure@montague.lit';
-            room = await _converse.api.rooms.open(jid);
-            expect(room instanceof Model).toBeTruthy();
-            chatroomview = _converse.chatboxviews.get(jid.toLowerCase());
-            await u.waitUntil(() => u.isVisible(chatroomview));
-
-            jid = 'leisure@montague.lit';
-            room = await _converse.api.rooms.open(jid);
-            expect(room instanceof Model).toBeTruthy();
-            chatroomview = _converse.chatboxviews.get(jid.toLowerCase());
-            await u.waitUntil(() => u.isVisible(chatroomview));
-
-            jid = 'leiSure@montague.lit';
-            room = await _converse.api.rooms.open(jid);
-            expect(room instanceof Model).toBeTruthy();
-            chatroomview = _converse.chatboxviews.get(jid.toLowerCase());
-            await u.waitUntil(() => u.isVisible(chatroomview));
-            chatroomview.close();
-
-            _converse.muc_instant_rooms = false;
-            const sendIQ = _converse.connection.sendIQ;
-            spyOn(_converse.connection, 'sendIQ').and.callFake(function (iq, callback, errback) {
-                IQ_id = sendIQ.bind(this)(iq, callback, errback);
-            });
-            // Test with configuration
-            room = await _converse.api.rooms.open('room@conference.example.org', {
-                'nick': 'some1',
-                'auto_configure': true,
-                'roomconfig': {
-                    'getmemberlist': ['moderator', 'participant'],
-                    'changesubject': false,
-                    'membersonly': true,
-                    'persistentroom': true,
-                    'publicroom': true,
-                    'roomdesc': 'Welcome to this groupchat',
-                    'whois': 'anyone'
-                }
-            });
-            expect(room instanceof Model).toBeTruthy();
-            chatroomview = _converse.chatboxviews.get('room@conference.example.org');
-
-            // We pretend this is a new room, so no disco info is returned.
-            const features_stanza = $iq({
-                    from: 'room@conference.example.org',
-                    'id': IQ_id,
-                    'to': 'romeo@montague.lit/desktop',
-                    'type': 'error'
-                }).c('error', {'type': 'cancel'})
-                    .c('item-not-found', {'xmlns': "urn:ietf:params:xml:ns:xmpp-stanzas"});
-            _converse.connection._dataRecv(mock.createRequest(features_stanza));
-
-            /* <presence xmlns="jabber:client" to="romeo@montague.lit/pda" from="room@conference.example.org/yo">
-             *  <x xmlns="http://jabber.org/protocol/muc#user">
-             *      <item affiliation="owner" jid="romeo@montague.lit/pda" role="moderator"/>
-             *      <status code="110"/>
-             *      <status code="201"/>
-             *  </x>
-             * </presence>
-             */
-            const presence = $pres({
-                    from:'room@conference.example.org/some1',
-                    to:'romeo@montague.lit/pda'
-                })
-                .c('x', {xmlns:'http://jabber.org/protocol/muc#user'})
-                .c('item', {
-                    affiliation: 'owner',
-                    jid: 'romeo@montague.lit/pda',
-                    role: 'moderator'
-                }).up()
-                .c('status', {code:'110'}).up()
-                .c('status', {code:'201'});
-            _converse.connection._dataRecv(mock.createRequest(presence));
-            expect(_converse.connection.sendIQ).toHaveBeenCalled();
-
-            const IQ_stanzas = _converse.connection.IQ_stanzas;
-            const iq = await u.waitUntil(() => IQ_stanzas.filter(s => s.querySelector(`query[xmlns="${Strophe.NS.MUC_OWNER}"]`)).pop());
-            expect(Strophe.serialize(iq)).toBe(
-                `<iq id="${iq.getAttribute('id')}" to="room@conference.example.org" type="get" xmlns="jabber:client">`+
-                `<query xmlns="http://jabber.org/protocol/muc#owner"/></iq>`);
-
-            const node = u.toStanza(`
-               <iq xmlns="jabber:client"
-                    type="result"
-                    to="romeo@montague.lit/pda"
-                    from="room@conference.example.org" id="${iq.getAttribute('id')}">
-                <query xmlns="http://jabber.org/protocol/muc#owner">
-                    <x xmlns="jabber:x:data" type="form">
-                    <title>Configuration for room@conference.example.org</title>
-                    <instructions>Complete and submit this form to configure the room.</instructions>
-                    <field var="FORM_TYPE" type="hidden">
-                        <value>http://jabber.org/protocol/muc#roomconfig</value>
-                    </field>
-                    <field type="text-single" var="muc#roomconfig_roomname" label="Name">
-                        <value>Room</value>
-                    </field>
-                    <field type="text-single" var="muc#roomconfig_roomdesc" label="Description"><value/></field>
-                    <field type="boolean" var="muc#roomconfig_persistentroom" label="Make Room Persistent?"/>
-                    <field type="boolean" var="muc#roomconfig_publicroom" label="Make Room Publicly Searchable?"><value>1</value></field>
-                    <field type="boolean" var="muc#roomconfig_changesubject" label="Allow Occupants to Change Subject?"/>
-                    <field type="list-single" var="muc#roomconfig_whois" label="Who May Discover Real JIDs?"><option label="Moderators Only">
-                       <value>moderators</value></option><option label="Anyone"><value>anyone</value></option>
-                    </field>
-                    <field label="Roles and Affiliations that May Retrieve Member List"
-                           type="list-multi"
-                           var="muc#roomconfig_getmemberlist">
-                        <value>moderator</value>
-                        <value>participant</value>
-                        <value>visitor</value>
-                    </field>
-                    <field type="text-private" var="muc#roomconfig_roomsecret" label="Password"><value/></field>
-                    <field type="boolean" var="muc#roomconfig_moderatedroom" label="Make Room Moderated?"/>
-                    <field type="boolean" var="muc#roomconfig_membersonly" label="Make Room Members-Only?"/>
-                    <field type="text-single" var="muc#roomconfig_historylength" label="Maximum Number of History Messages Returned by Room">
-                       <value>20</value></field>
-                    </x>
-                </query>
-                </iq>`);
-
-            spyOn(chatroomview.model, 'sendConfiguration').and.callThrough();
-            _converse.connection._dataRecv(mock.createRequest(node));
-            await u.waitUntil(() => chatroomview.model.sendConfiguration.calls.count() === 1);
-
-            const sent_stanza = IQ_stanzas.filter(s => s.getAttribute('type') === 'set').pop();
-            expect(sizzle('field[var="muc#roomconfig_roomname"] value', sent_stanza).pop().textContent.trim()).toBe('Room');
-            expect(sizzle('field[var="muc#roomconfig_roomdesc"] value', sent_stanza).pop().textContent.trim()).toBe('Welcome to this groupchat');
-            expect(sizzle('field[var="muc#roomconfig_persistentroom"] value', sent_stanza).pop().textContent.trim()).toBe('1');
-            expect(sizzle('field[var="muc#roomconfig_getmemberlist"] value', sent_stanza).map(e => e.textContent.trim()).join(' ')).toBe('moderator participant');
-            expect(sizzle('field[var="muc#roomconfig_publicroom"] value ', sent_stanza).pop().textContent.trim()).toBe('1');
-            expect(sizzle('field[var="muc#roomconfig_changesubject"] value', sent_stanza).pop().textContent.trim()).toBe('0');
-            expect(sizzle('field[var="muc#roomconfig_whois"] value ', sent_stanza).pop().textContent.trim()).toBe('anyone');
-            expect(sizzle('field[var="muc#roomconfig_membersonly"] value', sent_stanza).pop().textContent.trim()).toBe('1');
-            expect(sizzle('field[var="muc#roomconfig_historylength"] value', sent_stanza).pop().textContent.trim()).toBe('20');
-            done();
-        }));
-    });
-
     describe("An instant groupchat", function () {
     describe("An instant groupchat", function () {
 
 
         it("will be created when muc_instant_rooms is set to true",
         it("will be created when muc_instant_rooms is set to true",