Преглед на файлове

Add tests for the chat toolbar.

Including the emoticon menu and the OTR menu.
More tests needed for OTR in particular.
JC Brand преди 11 години
родител
ревизия
fc3a08400e
променени са 2 файла, в които са добавени 104 реда и са изтрити 5 реда
  1. 4 4
      converse.js
  2. 100 1
      spec/ChatBoxSpec.js

+ 4 - 4
converse.js

@@ -639,7 +639,7 @@
                 'click .close-chatbox-button': 'closeChat',
                 'keypress textarea.chat-textarea': 'keyPressed',
                 'click .toggle-smiley': 'toggleEmoticonMenu',
-                'click .toggle-smiley ul li': 'addEmoticon',
+                'click .toggle-smiley ul li': 'insertEmoticon',
                 'click .toggle-otr': 'toggleOTRMenu',
                 'click .start-otr': 'startOTRFromToolbar',
                 'click .end-otr': 'endOTR',
@@ -678,7 +678,7 @@
                             '<li><a class="icon-cool" href="#" data-emoticon="8)"></a></li>'+
                             '<li><a class="icon-evil" href="#" data-emoticon=">:)"></a></li>'+
                             '<li><a class="icon-confused" href="#" data-emoticon=":S"></a></li>'+
-                            '<li><a class="icon-wondering" href="#" data-emoticon=":\"></a></li>'+
+                            '<li><a class="icon-wondering" href="#" data-emoticon=":\\"></a></li>'+
                             '<li><a class="icon-angry" href="#" data-emoticon=">:("></a></li>'+
                             '<li><a class="icon-sad" href="#" data-emoticon=":("></a></li>'+
                             '<li><a class="icon-shocked" href="#" data-emoticon=":O"></a></li>'+
@@ -990,7 +990,7 @@
                 }
             },
 
-            addEmoticon: function (ev) {
+            insertEmoticon: function (ev) {
                 ev.stopPropagation();
                 this.$el.find('.toggle-smiley ul').slideToggle(200);
                 var $textbox = this.$el.find('textarea.chat-textarea');
@@ -1719,7 +1719,7 @@
                 'click a.close-chatbox-button': 'closeChat',
                 'click a.configure-chatroom-button': 'configureChatRoom',
                 'click .toggle-smiley': 'toggleEmoticonMenu',
-                'click .toggle-smiley ul li': 'addEmoticon',
+                'click .toggle-smiley ul li': 'insertEmoticon',
                 'keypress textarea.chat-textarea': 'keyPressed'
             },
             info_template: _.template('<div class="chat-info">{{message}}</div>'),

+ 100 - 1
spec/ChatBoxSpec.js

@@ -91,6 +91,105 @@
                 expect(newchatboxes.length).toEqual(0);
             }, converse));
 
+            describe("A chat toolbar", $.proxy(function () {
+                it("can be found on each chat box", $.proxy(function () {
+                    var contact_jid = mock.cur_names[2].replace(' ','.').toLowerCase() + '@localhost';
+                    utils.openChatBoxFor(contact_jid);
+                    var chatbox = this.chatboxes.get(contact_jid);
+                    var view = this.chatboxesview.views[contact_jid];
+                    expect(chatbox).toBeDefined();
+                    expect(view).toBeDefined();
+                    var $toolbar = view.$el.find('ul.chat-toolbar');
+                    expect($toolbar.length).toBe(1);
+                    expect($toolbar.children('li').length).toBe(2);
+                }, converse));
+
+                it("contains a button for inserting emoticons", $.proxy(function () {
+                    var contact_jid = mock.cur_names[2].replace(' ','.').toLowerCase() + '@localhost';
+                    utils.openChatBoxFor(contact_jid);
+                    var chatbox = this.chatboxes.get(contact_jid);
+                    var view = this.chatboxesview.views[contact_jid];
+                    var $toolbar = view.$el.find('ul.chat-toolbar');
+                    var $textarea = view.$el.find('textarea.chat-textarea');
+                    expect($toolbar.children('li.toggle-smiley').length).toBe(1);
+                    // Register spies
+                    spyOn(view, 'toggleEmoticonMenu').andCallThrough();
+                    spyOn(view, 'insertEmoticon').andCallThrough();
+                    view.delegateEvents(); // We need to rebind all events otherwise our spy won't be called
+
+                    runs(function () {
+                        $toolbar.children('li.toggle-smiley').click();
+                    });
+                    waits(250);
+                    runs(function () {
+                        expect(view.toggleEmoticonMenu).toHaveBeenCalled();
+                        var $menu = view.$el.find('.toggle-smiley ul');
+                        var $items = $menu.children('li');
+                        expect($menu.is(':visible')).toBeTruthy();
+                        expect($items.length).toBe(13);
+                        expect($($items[0]).children('a').data('emoticon')).toBe(':)');
+                        expect($($items[1]).children('a').data('emoticon')).toBe(';)');
+                        expect($($items[2]).children('a').data('emoticon')).toBe(':D');
+                        expect($($items[3]).children('a').data('emoticon')).toBe(':P');
+                        expect($($items[4]).children('a').data('emoticon')).toBe('8)');
+                        expect($($items[5]).children('a').data('emoticon')).toBe('>:)');
+                        expect($($items[6]).children('a').data('emoticon')).toBe(':S');
+                        expect($($items[7]).children('a').data('emoticon')).toBe(':\\');
+                        expect($($items[8]).children('a').data('emoticon')).toBe('>:(');
+                        expect($($items[9]).children('a').data('emoticon')).toBe(':(');
+                        expect($($items[10]).children('a').data('emoticon')).toBe(':O');
+                        expect($($items[11]).children('a').data('emoticon')).toBe('(^.^)b');
+                        expect($($items[12]).children('a').data('emoticon')).toBe('<3');
+
+                        $items[0].click();
+                    });
+                    waits(250);
+                    runs(function () {
+                        expect(view.insertEmoticon).toHaveBeenCalled();
+                        expect($textarea.val()).toBe(':) ');
+                        expect(view.$el.find('.toggle-smiley ul').is(':visible')).toBeFalsy();
+                        $toolbar.children('li.toggle-smiley').click();
+                    });
+                    waits(250);
+                    runs(function () {
+                        expect(view.toggleEmoticonMenu).toHaveBeenCalled();
+                        expect(view.$el.find('.toggle-smiley ul').is(':visible')).toBeTruthy();
+                        view.$el.find('.toggle-smiley ul').children('li').last().click();
+                    });
+                    waits(250);
+                    runs(function () {
+                        expect(view.insertEmoticon).toHaveBeenCalled();
+                        expect(view.$el.find('.toggle-smiley ul').is(':visible')).toBeFalsy();
+                        expect($textarea.val()).toBe(':) <3 ');
+                    });
+                }, converse));
+
+                it("contains a button for starting an encrypted chat session", $.proxy(function () {
+                    // TODO: More tests can be added here...
+                    var contact_jid = mock.cur_names[2].replace(' ','.').toLowerCase() + '@localhost';
+                    utils.openChatBoxFor(contact_jid);
+                    var chatbox = this.chatboxes.get(contact_jid);
+                    var view = this.chatboxesview.views[contact_jid];
+                    var $toolbar = view.$el.find('ul.chat-toolbar');
+                    expect($toolbar.children('li.toggle-otr').length).toBe(1);
+                    // Register spies
+                    spyOn(view, 'toggleOTRMenu').andCallThrough();
+                    view.delegateEvents(); // We need to rebind all events otherwise our spy won't be called
+
+                    runs(function () {
+                        $toolbar.children('li.toggle-otr').click();
+                    });
+                    waits(250);
+                    runs(function () {
+                        expect(view.toggleOTRMenu).toHaveBeenCalled();
+                        var $menu = view.$el.find('.toggle-otr ul');
+                        expect($menu.is(':visible')).toBeTruthy();
+                        expect($menu.children('li').length).toBe(2);
+                    });
+
+                }, converse));
+            }, converse));
+
             describe("A Chat Message", $.proxy(function () {
                 it("can be received which will open a chatbox and be displayed inside it", $.proxy(function () {
                     var message = 'This is a received message';
@@ -233,7 +332,7 @@
                 // (e.g for when this test is run on its own).
                 view.$el.find('.chat-textarea').val(message).text(message);
                 view.$el.find('textarea.chat-textarea').trigger($.Event('keypress', {keyCode: 13}));
-                expect(view.model.messages.length > 0).toBeTruthy(); 
+                expect(view.model.messages.length > 0).toBeTruthy();
                 expect(view.model.messages.localStorage.records.length > 0).toBeTruthy();
 
                 message = '/clear';