Просмотр исходного кода

Split ChatRooms tests out into their own spec file

JC Brand 12 лет назад
Родитель
Сommit
6d9fe68a25
4 измененных файлов с 300 добавлено и 267 удалено
  1. 43 0
      mock.js
  2. 224 0
      spec/ChatRoomSpec.js
  3. 14 253
      spec/MainSpec.js
  4. 19 14
      tests_main.js

+ 43 - 0
mock.js

@@ -0,0 +1,43 @@
+(function (root, factory) {
+    define("mock", 
+        ['converse'], 
+        function() { 
+            return factory(); 
+        });
+}(this, function (converse) {
+    var mock_connection = {
+        'muc': {
+            'listRooms': function () {},
+            'join': function () {},
+            'leave': function () {}
+        },
+        'jid': 'dummy@localhost',
+        'addHandler': function (handler, ns, name, type, id, from, options) { 
+            return function () {};
+        },
+        'send': function () {},
+        'roster': {
+            'add': function () {},
+            'authorize': function () {},
+            'unauthorize': function () {},
+            'get': function () {},
+            'subscribe': function () {},
+            'registerCallback': function () {}
+        },
+        'vcard': { 
+            'get': function (callback, jid) {
+                var name = jid.split('@')[0].replace('.', ' ').split(' ');
+                var firstname = name[0].charAt(0).toUpperCase()+name[0].slice(1);
+                var lastname = name[1].charAt(0).toUpperCase()+name[1].slice(1);
+                var fullname = firstname+' '+lastname;
+                var vcard = $iq().c('vCard').c('FN').t(fullname);
+                callback(vcard.tree());
+            } 
+        },
+        'disco': {
+            'info': function () {},
+            'items': function () {}
+        }
+    };
+    return mock_connection;
+}));

+ 224 - 0
spec/ChatRoomSpec.js

@@ -0,0 +1,224 @@
+(function (root, factory) {
+    define([
+        "converse",
+        "mock"
+        ], function (converse, mock_connection) {
+            return factory(converse, mock_connection);
+        }
+    );
+} (this, function (converse, mock_connection) {
+    return describe("ChatRooms", $.proxy(function() {
+        var chatroom_names = [
+            'Dyon van de Wege', 'Thomas Kalb', 'Dirk Theissen', 'Felix Hofmann', 'Ka Lek', 'Anne Ebersbacher'
+        ];
+        describe("A Chat Room", $.proxy(function () {
+            beforeEach($.proxy(function () {
+                if (!$("div#controlbox").is(':visible')) {
+                    $('.toggle-online-users').click();
+                }
+                var roomspanel = this.chatboxesview.views.controlbox.roomspanel;
+                var $input = roomspanel.$el.find('input.new-chatroom-name');
+                var $server = roomspanel.$el.find('input.new-chatroom-server');
+                $input.val('lounge');
+                $server.val('muc.localhost');
+                roomspanel.$el.find('form').submit();
+                $('.toggle-online-users').click();
+            }, converse));
+
+            it("shows users currently present in the room", $.proxy(function () {
+                var chatroomview = this.chatboxesview.views['lounge@muc.localhost'];
+                var $participant_list = chatroomview.$el.find('.participant-list');
+                var roster = {}, room = {}, i;
+                for (i=0; i<chatroom_names.length; i++) {
+                    roster[chatroom_names[i]] = {};
+                    chatroomview.onChatRoomRoster(roster, room);
+                    expect($participant_list.find('li').length).toBe(1+i);
+                    expect($($participant_list.find('li')[i]).text()).toBe(chatroom_names[i]);
+                }
+                roster[converse.bare_jid] = {};
+                chatroomview.onChatRoomRoster(roster, room);
+            }, converse));
+
+            it("can be saved to, and retrieved from, localStorage", $.proxy(function () {
+                // We instantiate a new ChatBoxes collection, which by default
+                // will be empty.
+                var newchatboxes = new this.ChatBoxes();
+                expect(newchatboxes.length).toEqual(0);
+                // The chatboxes will then be fetched from localStorage inside the
+                // onConnected method
+                newchatboxes.onConnected();
+                expect(newchatboxes.length).toEqual(1);
+                // Check that the chatrooms retrieved from localStorage
+                // have the same attributes values as the original ones.
+                attrs = ['id', 'box_id', 'visible'];
+                for (i=0; i<attrs.length; i++) {
+                    new_attrs = _.pluck(_.pluck(newchatboxes.models, 'attributes'), attrs[i]);
+                    old_attrs = _.pluck(_.pluck(this.chatboxes.models, 'attributes'), attrs[i]);
+                    expect(_.isEqual(new_attrs, old_attrs)).toEqual(true);
+                }
+                this.rosterview.render();
+            }, converse));
+
+            it("can be closed again by clicking a DOM element with class 'close-chatbox-button'", $.proxy(function () {
+                var view = this.chatboxesview.views['lounge@muc.localhost'], chatroom = view.model, $el;
+                spyOn(view, 'closeChat').andCallThrough();
+                spyOn(converse.connection.muc, 'leave');
+                view.delegateEvents(); // We need to rebind all events otherwise our spy won't be called
+                view.$el.find('.close-chatbox-button').click();
+                expect(view.closeChat).toHaveBeenCalled();
+                expect(converse.connection.muc.leave).toHaveBeenCalled();
+            }, converse));
+        }, converse));
+
+        describe("When attempting to enter a chatroom", $.proxy(function () {
+            beforeEach($.proxy(function () {
+                var roomspanel = this.chatboxesview.views.controlbox.roomspanel;
+                var $input = roomspanel.$el.find('input.new-chatroom-name');
+                var $server = roomspanel.$el.find('input.new-chatroom-server');
+                $input.val('problematic');
+                $server.val('muc.localhost');
+                roomspanel.$el.find('form').submit();
+            }, converse));
+
+            afterEach($.proxy(function () {
+                var view = this.chatboxesview.views['problematic@muc.localhost'];
+                view.closeChat();
+            }, converse));
+
+            it("will show an error message if the room requires a password", $.proxy(function () {
+                var presence = $pres().attrs({
+                    from:'coven@chat.shakespeare.lit/thirdwitch',
+                    id:'n13mt3l',
+                    to:'hag66@shakespeare.lit/pda',
+                    type:'error'})
+                .c('x').attrs({xmlns:'http://jabber.org/protocol/muc'}).up()
+                .c('error').attrs({by:'coven@chat.shakespeare.lit', type:'auth'})
+                    .c('not-authorized').attrs({xmlns:'urn:ietf:params:xml:ns:xmpp-stanzas'}).nodeTree;
+                var view = this.chatboxesview.views['problematic@muc.localhost'];
+                view.onChatRoomPresence(presence, {'nick': 'dummy'});
+                var $chat_content = view.$el.find('.chat-content');
+                expect($chat_content.text()).toBe('This chatroom requires a password');
+            }, converse));
+
+            it("will show an error message if the room is members-only and the user not included", $.proxy(function () {
+                var presence = $pres().attrs({
+                    from:'coven@chat.shakespeare.lit/thirdwitch',
+                    id:'n13mt3l',
+                    to:'hag66@shakespeare.lit/pda',
+                    type:'error'})
+                .c('x').attrs({xmlns:'http://jabber.org/protocol/muc'}).up()
+                .c('error').attrs({by:'coven@chat.shakespeare.lit', type:'auth'})
+                    .c('registration-required').attrs({xmlns:'urn:ietf:params:xml:ns:xmpp-stanzas'}).nodeTree;
+                var view = this.chatboxesview.views['problematic@muc.localhost'];
+                view.onChatRoomPresence(presence, {'nick': 'dummy'});
+                var $chat_content = view.$el.find('.chat-content');
+                expect($chat_content.text()).toBe('You are not on the member list of this room');
+            }, converse));
+
+            it("will show an error message if the user has been banned", $.proxy(function () {
+                var presence = $pres().attrs({
+                    from:'coven@chat.shakespeare.lit/thirdwitch',
+                    id:'n13mt3l',
+                    to:'hag66@shakespeare.lit/pda',
+                    type:'error'})
+                .c('x').attrs({xmlns:'http://jabber.org/protocol/muc'}).up()
+                .c('error').attrs({by:'coven@chat.shakespeare.lit', type:'auth'})
+                    .c('forbidden').attrs({xmlns:'urn:ietf:params:xml:ns:xmpp-stanzas'}).nodeTree;
+                var view = this.chatboxesview.views['problematic@muc.localhost'];
+                view.onChatRoomPresence(presence, {'nick': 'dummy'});
+                var $chat_content = view.$el.find('.chat-content');
+                expect($chat_content.text()).toBe('You have been banned from this room');
+            }, converse));
+
+            it("will show an error message if no nickname was specified for the user", $.proxy(function () {
+                var presence = $pres().attrs({
+                    from:'coven@chat.shakespeare.lit/thirdwitch',
+                    id:'n13mt3l',
+                    to:'hag66@shakespeare.lit/pda',
+                    type:'error'})
+                .c('x').attrs({xmlns:'http://jabber.org/protocol/muc'}).up()
+                .c('error').attrs({by:'coven@chat.shakespeare.lit', type:'modify'})
+                    .c('jid-malformed').attrs({xmlns:'urn:ietf:params:xml:ns:xmpp-stanzas'}).nodeTree;
+                var view = this.chatboxesview.views['problematic@muc.localhost'];
+                view.onChatRoomPresence(presence, {'nick': 'dummy'});
+                var $chat_content = view.$el.find('.chat-content');
+                expect($chat_content.text()).toBe('No nickname was specified');
+            }, converse));
+
+            it("will show an error message if the user is not allowed to have created the room", $.proxy(function () {
+                var presence = $pres().attrs({
+                    from:'coven@chat.shakespeare.lit/thirdwitch',
+                    id:'n13mt3l',
+                    to:'hag66@shakespeare.lit/pda',
+                    type:'error'})
+                .c('x').attrs({xmlns:'http://jabber.org/protocol/muc'}).up()
+                .c('error').attrs({by:'coven@chat.shakespeare.lit', type:'cancel'})
+                    .c('not-allowed').attrs({xmlns:'urn:ietf:params:xml:ns:xmpp-stanzas'}).nodeTree;
+                var view = this.chatboxesview.views['problematic@muc.localhost'];
+                view.onChatRoomPresence(presence, {'nick': 'dummy'});
+                var $chat_content = view.$el.find('.chat-content');
+                expect($chat_content.text()).toBe('You are not allowed to create new rooms');
+            }, converse));
+
+            it("will show an error message if the user's nickname doesn't conform to room policy", $.proxy(function () {
+                var presence = $pres().attrs({
+                    from:'coven@chat.shakespeare.lit/thirdwitch',
+                    id:'n13mt3l',
+                    to:'hag66@shakespeare.lit/pda',
+                    type:'error'})
+                .c('x').attrs({xmlns:'http://jabber.org/protocol/muc'}).up()
+                .c('error').attrs({by:'coven@chat.shakespeare.lit', type:'cancel'})
+                    .c('not-acceptable').attrs({xmlns:'urn:ietf:params:xml:ns:xmpp-stanzas'}).nodeTree;
+                var view = this.chatboxesview.views['problematic@muc.localhost'];
+                view.onChatRoomPresence(presence, {'nick': 'dummy'});
+                var $chat_content = view.$el.find('.chat-content');
+                expect($chat_content.text()).toBe("Your nickname doesn't conform to the room's policies");
+            }, converse));
+
+            it("will show an error message if the user's nickname is already taken", $.proxy(function () {
+                var presence = $pres().attrs({
+                    from:'coven@chat.shakespeare.lit/thirdwitch',
+                    id:'n13mt3l',
+                    to:'hag66@shakespeare.lit/pda',
+                    type:'error'})
+                .c('x').attrs({xmlns:'http://jabber.org/protocol/muc'}).up()
+                .c('error').attrs({by:'coven@chat.shakespeare.lit', type:'cancel'})
+                    .c('conflict').attrs({xmlns:'urn:ietf:params:xml:ns:xmpp-stanzas'}).nodeTree;
+                var view = this.chatboxesview.views['problematic@muc.localhost'];
+                view.onChatRoomPresence(presence, {'nick': 'dummy'});
+                var $chat_content = view.$el.find('.chat-content');
+                expect($chat_content.text()).toBe("Your nickname is already taken");
+            }, converse));
+
+            it("will show an error message if the room doesn't yet exist", $.proxy(function () {
+                var presence = $pres().attrs({
+                    from:'coven@chat.shakespeare.lit/thirdwitch',
+                    id:'n13mt3l',
+                    to:'hag66@shakespeare.lit/pda',
+                    type:'error'})
+                .c('x').attrs({xmlns:'http://jabber.org/protocol/muc'}).up()
+                .c('error').attrs({by:'coven@chat.shakespeare.lit', type:'cancel'})
+                    .c('item-not-found').attrs({xmlns:'urn:ietf:params:xml:ns:xmpp-stanzas'}).nodeTree;
+                var view = this.chatboxesview.views['problematic@muc.localhost'];
+                view.onChatRoomPresence(presence, {'nick': 'dummy'});
+                var $chat_content = view.$el.find('.chat-content');
+                expect($chat_content.text()).toBe("This room does not (yet) exist");
+            }, converse));
+
+            it("will show an error message if the room has reached it's maximum number of occupants", $.proxy(function () {
+                var presence = $pres().attrs({
+                    from:'coven@chat.shakespeare.lit/thirdwitch',
+                    id:'n13mt3l',
+                    to:'hag66@shakespeare.lit/pda',
+                    type:'error'})
+                .c('x').attrs({xmlns:'http://jabber.org/protocol/muc'}).up()
+                .c('error').attrs({by:'coven@chat.shakespeare.lit', type:'cancel'})
+                    .c('service-unavailable').attrs({xmlns:'urn:ietf:params:xml:ns:xmpp-stanzas'}).nodeTree;
+                var view = this.chatboxesview.views['problematic@muc.localhost'];
+                view.onChatRoomPresence(presence, {'nick': 'dummy'});
+                var $chat_content = view.$el.find('.chat-content');
+                expect($chat_content.text()).toBe("This room has reached it's maximum number of occupants");
+            }, converse));
+        }, converse));
+    }, converse));
+}));

+ 14 - 253
spec/MainSpec.js

@@ -1,12 +1,12 @@
 (function (root, factory) {
     define([
-        "converse"
-        ], function (converse) {
-            return factory(converse);
+        "converse",
+        "mock"
+        ], function (converse, mock_connection) {
+            return factory(converse, mock_connection);
         }
     );
-} (this, function (converse) {
-
+} (this, function (converse, mock_connection) {
     return describe("Converse.js", $.proxy(function() {
         // Names from http://www.fakenamegenerator.com/
         var req_names = [
@@ -20,56 +20,7 @@
             'Robin Schook', 'Marcel Eberhardt', 'Simone Brauer', 'Asmaa Haakman', 'Felix Amsel',
             'Lena Grunewald', 'Laura Grunewald', 'Mandy Seiler', 'Sven Bosch', 'Nuriye Cuypers'
         ];
-        var chatroom_names = [
-            'Dyon van de Wege', 'Thomas Kalb', 'Dirk Theissen', 'Felix Hofmann', 'Ka Lek', 'Anne Ebersbacher'
-        ];
         var num_contacts = req_names.length + pend_names.length + cur_names.length;
-        mock_connection  = {
-            'muc': {
-                'listRooms': function () {},
-                'join': function () {},
-                'leave': function () {}
-            },
-            'jid': 'dummy@localhost',
-            'addHandler': function (handler, ns, name, type, id, from, options) { 
-                return function () {};
-            },
-            'send': function () {},
-            'roster': {
-                'add': function () {},
-                'authorize': function () {},
-                'unauthorize': function () {},
-                'get': function () {},
-                'subscribe': function () {},
-                'registerCallback': function () {}
-            },
-            'vcard': { 
-                'get': function (callback, jid) {
-                    var name = jid.split('@')[0].replace('.', ' ').split(' ');
-                    var firstname = name[0].charAt(0).toUpperCase()+name[0].slice(1);
-                    var lastname = name[1].charAt(0).toUpperCase()+name[1].slice(1);
-                    var fullname = firstname+' '+lastname;
-                    var vcard = $iq().c('vCard').c('FN').t(fullname);
-                    callback(vcard.tree());
-                } 
-            },
-            'disco': {
-                'info': function () {},
-                'items': function () {}
-            }
-        };
-
-        // Clear localStorage
-        window.localStorage.clear();
-        this.initialize({
-            prebind: false,
-            xhr_user_search: false,
-            auto_subscribe: false,
-            animate: false
-        });
-        this.onConnected(mock_connection);
-
-        // Variable declarations for specs
         var open_controlbox;
 
         describe("The Control Box", $.proxy(function () {
@@ -82,8 +33,10 @@
                 // open yet.
                 expect($("div#controlbox").is(':visible')).toBe(false);
                 spyOn(this, 'toggleControlBox').andCallThrough();
+                spyOn(this, 'showControlBox').andCallThrough();
                 $('.toggle-online-users').click();
                 expect(this.toggleControlBox).toHaveBeenCalled();
+                expect(this.showControlBox).toHaveBeenCalled();
                 expect($("div#controlbox").is(':visible')).toBe(true);
             }, converse);
             it("can be opened by clicking a DOM element with class 'toggle-online-users'", open_controlbox);
@@ -577,8 +530,13 @@
 
             it("is cleared when the window is focused", $.proxy(function () {
                 spyOn(converse, 'clearMsgCounter').andCallThrough();
-                $(window).trigger('focus');
-                expect(converse.clearMsgCounter).toHaveBeenCalled();
+                runs(function () {
+                    $(window).trigger('focus');
+                });
+                waits(50);
+                runs(function () {
+                    expect(converse.clearMsgCounter).toHaveBeenCalled();
+                });
             }, converse));
 
             it("is not incremented when the message is received and the window is focused", $.proxy(function () {
@@ -667,202 +625,5 @@
                 }, converse));
             }, converse));
         }, converse));
-
-        describe("A Chat Room", $.proxy(function () {
-            it("shows users currently present in the room", $.proxy(function () {
-                var chatroomview = this.chatboxesview.views['lounge@muc.localhost'];
-                var $participant_list = chatroomview.$el.find('.participant-list');
-                var roster = {}, room = {}, i;
-                for (i=0; i<chatroom_names.length; i++) {
-                    roster[chatroom_names[i]] = {};
-                    chatroomview.onChatRoomRoster(roster, room);
-                    expect($participant_list.find('li').length).toBe(1+i);
-                    expect($($participant_list.find('li')[i]).text()).toBe(chatroom_names[i]);
-                }
-                roster[converse.bare_jid] = {};
-                chatroomview.onChatRoomRoster(roster, room);
-            }, converse));
-
-            it("can be saved to, and retrieved from, localStorage", $.proxy(function () {
-                // We instantiate a new ChatBoxes collection, which by default
-                // will be empty.
-                var newchatboxes = new this.ChatBoxes();
-                expect(newchatboxes.length).toEqual(0);
-                // The chatboxes will then be fetched from localStorage inside the
-                // onConnected method
-                newchatboxes.onConnected();
-                expect(newchatboxes.length).toEqual(2); // controlbox is also included
-                // Check that the chatrooms retrieved from localStorage
-                // have the same attributes values as the original ones.
-                attrs = ['id', 'box_id', 'visible'];
-                for (i=0; i<attrs.length; i++) {
-                    new_attrs = _.pluck(_.pluck(newchatboxes.models, 'attributes'), attrs[i]);
-                    old_attrs = _.pluck(_.pluck(this.chatboxes.models, 'attributes'), attrs[i]);
-                    expect(_.isEqual(new_attrs, old_attrs)).toEqual(true);
-                }
-                this.rosterview.render();
-            }, converse));
-
-            it("can be closed again by clicking a DOM element with class 'close-chatbox-button'", $.proxy(function () {
-                var view = this.chatboxesview.views['lounge@muc.localhost'], chatroom = view.model, $el;
-                spyOn(view, 'closeChat').andCallThrough();
-                spyOn(converse.connection.muc, 'leave');
-                view.delegateEvents(); // We need to rebind all events otherwise our spy won't be called
-                view.$el.find('.close-chatbox-button').click();
-                expect(view.closeChat).toHaveBeenCalled();
-                expect(converse.connection.muc.leave).toHaveBeenCalled();
-            }, converse));
-        }, converse));
-
-        describe("When attempting to enter a chatroom", $.proxy(function () {
-            beforeEach($.proxy(function () {
-                var roomspanel = this.chatboxesview.views.controlbox.roomspanel;
-                var $input = roomspanel.$el.find('input.new-chatroom-name');
-                var $server = roomspanel.$el.find('input.new-chatroom-server');
-                $input.val('problematic');
-                $server.val('muc.localhost');
-                roomspanel.$el.find('form').submit();
-            }, converse));
-
-            afterEach($.proxy(function () {
-                var view = this.chatboxesview.views['problematic@muc.localhost'];
-                view.closeChat();
-            }, converse));
-
-            it("will show an error message if the room requires a password", $.proxy(function () {
-                var presence = $pres().attrs({
-                    from:'coven@chat.shakespeare.lit/thirdwitch',
-                    id:'n13mt3l',
-                    to:'hag66@shakespeare.lit/pda',
-                    type:'error'})
-                .c('x').attrs({xmlns:'http://jabber.org/protocol/muc'}).up()
-                .c('error').attrs({by:'coven@chat.shakespeare.lit', type:'auth'})
-                    .c('not-authorized').attrs({xmlns:'urn:ietf:params:xml:ns:xmpp-stanzas'}).nodeTree;
-                var view = this.chatboxesview.views['problematic@muc.localhost'];
-                view.onChatRoomPresence(presence, {'nick': 'dummy'});
-                var $chat_content = view.$el.find('.chat-content');
-                expect($chat_content.text()).toBe('This chatroom requires a password');
-            }, converse));
-
-            it("will show an error message if the room is members-only and the user not included", $.proxy(function () {
-                var presence = $pres().attrs({
-                    from:'coven@chat.shakespeare.lit/thirdwitch',
-                    id:'n13mt3l',
-                    to:'hag66@shakespeare.lit/pda',
-                    type:'error'})
-                .c('x').attrs({xmlns:'http://jabber.org/protocol/muc'}).up()
-                .c('error').attrs({by:'coven@chat.shakespeare.lit', type:'auth'})
-                    .c('registration-required').attrs({xmlns:'urn:ietf:params:xml:ns:xmpp-stanzas'}).nodeTree;
-                var view = this.chatboxesview.views['problematic@muc.localhost'];
-                view.onChatRoomPresence(presence, {'nick': 'dummy'});
-                var $chat_content = view.$el.find('.chat-content');
-                expect($chat_content.text()).toBe('You are not on the member list of this room');
-            }, converse));
-
-            it("will show an error message if the user has been banned", $.proxy(function () {
-                var presence = $pres().attrs({
-                    from:'coven@chat.shakespeare.lit/thirdwitch',
-                    id:'n13mt3l',
-                    to:'hag66@shakespeare.lit/pda',
-                    type:'error'})
-                .c('x').attrs({xmlns:'http://jabber.org/protocol/muc'}).up()
-                .c('error').attrs({by:'coven@chat.shakespeare.lit', type:'auth'})
-                    .c('forbidden').attrs({xmlns:'urn:ietf:params:xml:ns:xmpp-stanzas'}).nodeTree;
-                var view = this.chatboxesview.views['problematic@muc.localhost'];
-                view.onChatRoomPresence(presence, {'nick': 'dummy'});
-                var $chat_content = view.$el.find('.chat-content');
-                expect($chat_content.text()).toBe('You have been banned from this room');
-            }, converse));
-
-            it("will show an error message if no nickname was specified for the user", $.proxy(function () {
-                var presence = $pres().attrs({
-                    from:'coven@chat.shakespeare.lit/thirdwitch',
-                    id:'n13mt3l',
-                    to:'hag66@shakespeare.lit/pda',
-                    type:'error'})
-                .c('x').attrs({xmlns:'http://jabber.org/protocol/muc'}).up()
-                .c('error').attrs({by:'coven@chat.shakespeare.lit', type:'modify'})
-                    .c('jid-malformed').attrs({xmlns:'urn:ietf:params:xml:ns:xmpp-stanzas'}).nodeTree;
-                var view = this.chatboxesview.views['problematic@muc.localhost'];
-                view.onChatRoomPresence(presence, {'nick': 'dummy'});
-                var $chat_content = view.$el.find('.chat-content');
-                expect($chat_content.text()).toBe('No nickname was specified');
-            }, converse));
-
-            it("will show an error message if the user is not allowed to have created the room", $.proxy(function () {
-                var presence = $pres().attrs({
-                    from:'coven@chat.shakespeare.lit/thirdwitch',
-                    id:'n13mt3l',
-                    to:'hag66@shakespeare.lit/pda',
-                    type:'error'})
-                .c('x').attrs({xmlns:'http://jabber.org/protocol/muc'}).up()
-                .c('error').attrs({by:'coven@chat.shakespeare.lit', type:'cancel'})
-                    .c('not-allowed').attrs({xmlns:'urn:ietf:params:xml:ns:xmpp-stanzas'}).nodeTree;
-                var view = this.chatboxesview.views['problematic@muc.localhost'];
-                view.onChatRoomPresence(presence, {'nick': 'dummy'});
-                var $chat_content = view.$el.find('.chat-content');
-                expect($chat_content.text()).toBe('You are not allowed to create new rooms');
-            }, converse));
-
-            it("will show an error message if the user's nickname doesn't conform to room policy", $.proxy(function () {
-                var presence = $pres().attrs({
-                    from:'coven@chat.shakespeare.lit/thirdwitch',
-                    id:'n13mt3l',
-                    to:'hag66@shakespeare.lit/pda',
-                    type:'error'})
-                .c('x').attrs({xmlns:'http://jabber.org/protocol/muc'}).up()
-                .c('error').attrs({by:'coven@chat.shakespeare.lit', type:'cancel'})
-                    .c('not-acceptable').attrs({xmlns:'urn:ietf:params:xml:ns:xmpp-stanzas'}).nodeTree;
-                var view = this.chatboxesview.views['problematic@muc.localhost'];
-                view.onChatRoomPresence(presence, {'nick': 'dummy'});
-                var $chat_content = view.$el.find('.chat-content');
-                expect($chat_content.text()).toBe("Your nickname doesn't conform to the room's policies");
-            }, converse));
-
-            it("will show an error message if the user's nickname is already taken", $.proxy(function () {
-                var presence = $pres().attrs({
-                    from:'coven@chat.shakespeare.lit/thirdwitch',
-                    id:'n13mt3l',
-                    to:'hag66@shakespeare.lit/pda',
-                    type:'error'})
-                .c('x').attrs({xmlns:'http://jabber.org/protocol/muc'}).up()
-                .c('error').attrs({by:'coven@chat.shakespeare.lit', type:'cancel'})
-                    .c('conflict').attrs({xmlns:'urn:ietf:params:xml:ns:xmpp-stanzas'}).nodeTree;
-                var view = this.chatboxesview.views['problematic@muc.localhost'];
-                view.onChatRoomPresence(presence, {'nick': 'dummy'});
-                var $chat_content = view.$el.find('.chat-content');
-                expect($chat_content.text()).toBe("Your nickname is already taken");
-            }, converse));
-
-            it("will show an error message if the room doesn't yet exist", $.proxy(function () {
-                var presence = $pres().attrs({
-                    from:'coven@chat.shakespeare.lit/thirdwitch',
-                    id:'n13mt3l',
-                    to:'hag66@shakespeare.lit/pda',
-                    type:'error'})
-                .c('x').attrs({xmlns:'http://jabber.org/protocol/muc'}).up()
-                .c('error').attrs({by:'coven@chat.shakespeare.lit', type:'cancel'})
-                    .c('item-not-found').attrs({xmlns:'urn:ietf:params:xml:ns:xmpp-stanzas'}).nodeTree;
-                var view = this.chatboxesview.views['problematic@muc.localhost'];
-                view.onChatRoomPresence(presence, {'nick': 'dummy'});
-                var $chat_content = view.$el.find('.chat-content');
-                expect($chat_content.text()).toBe("This room does not (yet) exist");
-            }, converse));
-
-            it("will show an error message if the room has reached it's maximum number of occupants", $.proxy(function () {
-                var presence = $pres().attrs({
-                    from:'coven@chat.shakespeare.lit/thirdwitch',
-                    id:'n13mt3l',
-                    to:'hag66@shakespeare.lit/pda',
-                    type:'error'})
-                .c('x').attrs({xmlns:'http://jabber.org/protocol/muc'}).up()
-                .c('error').attrs({by:'coven@chat.shakespeare.lit', type:'cancel'})
-                    .c('service-unavailable').attrs({xmlns:'urn:ietf:params:xml:ns:xmpp-stanzas'}).nodeTree;
-                var view = this.chatboxesview.views['problematic@muc.localhost'];
-                view.onChatRoomPresence(presence, {'nick': 'dummy'});
-                var $chat_content = view.$el.find('.chat-content');
-                expect($chat_content.text()).toBe("This room has reached it's maximum number of occupants");
-            }, converse));
-        }, converse));
     }, converse));
 }));

+ 19 - 14
tests_main.js

@@ -1,16 +1,21 @@
-require(["jquery", "spec/MainSpec"], function($) {
-
-    $(function($) {
-        var jasmineEnv = jasmine.getEnv();
-        jasmineEnv.updateInterval = 250;
-
-        var htmlReporter = new jasmine.HtmlReporter();
-
-        jasmineEnv.addReporter(htmlReporter);
-
-        jasmineEnv.specFilter = function(spec) {
-            return htmlReporter.specFilter(spec);
-        };
-        jasmineEnv.execute();
+require(["jquery", "converse", "mock", "spec/MainSpec", "spec/ChatRoomSpec"], function($, converse, mock_connection) {
+    // Set up converse.js
+    window.localStorage.clear();
+    converse.initialize({
+        prebind: false,
+        xhr_user_search: false,
+        auto_subscribe: false,
+        animate: false
     });
+    converse.onConnected(mock_connection);
+
+    // Jasmine stuff
+    var jasmineEnv = jasmine.getEnv();
+    jasmineEnv.updateInterval = 50;
+    var htmlReporter = new jasmine.HtmlReporter();
+    jasmineEnv.addReporter(htmlReporter);
+    jasmineEnv.specFilter = function(spec) {
+        return htmlReporter.specFilter(spec);
+    };
+    jasmineEnv.execute();
 });