浏览代码

Add proper separation between controlbox tests

JC Brand 11 年之前
父节点
当前提交
c25f33b181
共有 4 个文件被更改,包括 87 次插入42 次删除
  1. 2 2
      spec/chatbox.js
  2. 55 32
      spec/controlbox.js
  3. 1 1
      spec/minchats.js
  4. 29 7
      tests/utils.js

+ 2 - 2
spec/chatbox.js

@@ -15,7 +15,7 @@
                     utils.removeControlBox();
                     converse.roster.browserStorage._clear();
                     utils.initConverse();
-                    utils.createCurrentContacts();
+                    utils.createContacts();
                     utils.openControlBox();
                     utils.openContactsPanel();
                 });
@@ -694,7 +694,7 @@
                 utils.removeControlBox();
                 converse.roster.browserStorage._clear();
                 utils.initConverse();
-                utils.createCurrentContacts();
+                utils.createContacts();
                 utils.openControlBox();
                 utils.openContactsPanel();
             });

+ 55 - 32
spec/controlbox.js

@@ -106,27 +106,30 @@
     }, converse, mock, utils));
 
     describe("The Contacts Roster", $.proxy(function (mock, utils) {
-        // FIXME: These tests are dependent on being run in order and cannot be
-        // run independently
 
         describe("Pending Contacts", $.proxy(function () {
-            beforeEach(function () {
+            beforeEach($.proxy(function () {
                 runs(function () {
-                    utils.openControlBox();
+                    converse.rosterview.model.reset();
+                    utils.createContacts('pending').openControlBox();
                 });
                 waits(50);
                 runs(function () {
                     utils.openContactsPanel();
                 });
-                waits(50);
-                runs(function () {});
-            });
+            }, converse));
 
             it("do not have a heading if there aren't any", $.proxy(function () {
+                converse.rosterview.model.reset();
                 expect(this.rosterview.$el.find('dt#pending-xmpp-contacts').css('display')).toEqual('none');
             }, converse));
 
+            it("will have their own heading once they have been added", $.proxy(function () {
+                expect(this.rosterview.$el.find('dt#pending-xmpp-contacts').css('display')).toEqual('block');
+            }, converse));
+
             it("can be added to the roster", $.proxy(function () {
+                converse.rosterview.model.reset(); // We want to manually create users so that we can spy
                 spyOn(converse, 'emit');
                 spyOn(this.rosterview, 'render').andCallThrough();
                 runs($.proxy(function () {
@@ -155,26 +158,28 @@
                 spyOn(this.connection.roster, 'unauthorize');
                 spyOn(this.rosterview.model, 'remove').andCallThrough();
 
-                runs($.proxy(function () {
-                    view.$el.find('.remove-xmpp-contact').click();
-                }, converse));
-                waits(250);
-                runs($.proxy(function () {
-                    expect(window.confirm).toHaveBeenCalled();
-                    expect(this.connection.roster.remove).toHaveBeenCalled();
-                    expect(this.connection.roster.unauthorize).toHaveBeenCalled();
-                    expect(this.rosterview.model.remove).toHaveBeenCalled();
-                    // The element must now be detached from the DOM.
-                    expect(view.$el.closest('html').length).toBeFalsy();
-                    expect(converse.emit).toHaveBeenCalledWith('onRosterViewUpdated');
-                }, converse));
+                view.$el.find('.remove-xmpp-contact').click();
+                expect(window.confirm).toHaveBeenCalled();
+                expect(this.connection.roster.remove).toHaveBeenCalled();
+                expect(this.connection.roster.unauthorize).toHaveBeenCalled();
+                expect(this.rosterview.model.remove).toHaveBeenCalled();
+                // The element must now be detached from the DOM.
+                expect(view.$el.closest('html').length).toBeFalsy();
+                expect(converse.emit).toHaveBeenCalledWith('onRosterViewUpdated');
             }, converse));
 
             it("will lose their own heading once the last one has been removed", $.proxy(function () {
+                var view;
+                spyOn(window, 'confirm').andReturn(true);
+                for (i=0; i<mock.pend_names.length; i++) {
+                    view = this.rosterview.get(mock.pend_names[i].replace(/ /g,'.').toLowerCase() + '@localhost');
+                    view.$el.find('.remove-xmpp-contact').click();
+                }
                 expect(this.rosterview.$el.find('dt#pending-xmpp-contacts').is(':visible')).toBeFalsy();
             }, converse));
 
             it("can be added to the roster and they will be sorted alphabetically", $.proxy(function () {
+                converse.rosterview.model.reset(); // We want to manually create users so that we can spy
                 var i, t, is_last;
                 spyOn(converse, 'emit');
                 spyOn(this.rosterview, 'render').andCallThrough();
@@ -195,21 +200,13 @@
                 }
             }, converse));
 
-            it("will have their own heading once they have been added", $.proxy(function () {
-                expect(this.rosterview.$el.find('dt#pending-xmpp-contacts').css('display')).toEqual('block');
-            }, converse));
-
         }, converse));
 
         describe("Existing Contacts", $.proxy(function () {
             beforeEach($.proxy(function () {
                 runs(function () {
                     converse.rosterview.model.reset();
-                    utils.createCurrentContacts();
-                });
-                waits(50);
-                runs(function () {
-                    utils.openControlBox();
+                    utils.createContacts().openControlBox();
                 });
                 waits(50);
                 runs(function () {
@@ -393,13 +390,26 @@
         }, converse));
 
         describe("Requesting Contacts", $.proxy(function () {
-            // by default the dts are hidden from css class and only later they will be hidden
-            // by jQuery therefore for the first check we will see if visible instead of none
+            beforeEach($.proxy(function () {
+                runs(function () {
+                    converse.rosterview.model.reset();
+                    utils.createContacts('requesting').openControlBox();
+                });
+                waits(50);
+                runs(function () {
+                    utils.openContactsPanel();
+                });
+            }, converse));
+
             it("do not have a heading if there aren't any", $.proxy(function () {
+                // by default the dts are hidden from css class and only later they will be hidden
+                // by jQuery therefore for the first check we will see if visible instead of none
+                converse.rosterview.model.reset();
                 expect(this.rosterview.$el.find('dt#xmpp-contact-requests').is(':visible')).toEqual(false);
             }, converse));
 
             it("can be added to the roster and they will be sorted alphabetically", $.proxy(function () {
+                converse.rosterview.model.reset(); // We want to manually create users so that we can spy
                 var i, t;
                 spyOn(converse, 'emit');
                 spyOn(this.rosterview, 'render').andCallThrough();
@@ -458,11 +468,24 @@
                 expect(this.connection.roster.unauthorize).toHaveBeenCalled();
                 expect(converse.emit).toHaveBeenCalledWith('onRosterViewUpdated');
                 // There should now be one less contact
-                expect(this.roster.length).toEqual(mock.num_contacts-1);
+                expect(this.roster.length).toEqual(mock.req_names.length-1);
             }, converse));
         }, converse));
 
         describe("All Contacts", $.proxy(function () {
+            beforeEach($.proxy(function () {
+                runs(function () {
+                    utils.clearBrowserStorage();
+                    converse.rosterview.model.reset();
+                    converse.rosterview.model.browserStorage._clear();
+                    utils.createContacts('all').openControlBox();
+                });
+                waits(50);
+                runs(function () {
+                    utils.openContactsPanel();
+                });
+            }, converse));
+
             it("are saved to, and can be retrieved from, browserStorage", $.proxy(function () {
                 var new_attrs, old_attrs, attrs, old_roster;
                 var num_contacts = this.roster.length;

+ 1 - 1
spec/minchats.js

@@ -15,7 +15,7 @@
                 utils.removeControlBox();
                 converse.roster.browserStorage._clear();
                 utils.initConverse();
-                utils.createCurrentContacts();
+                utils.createContacts();
                 utils.openControlBox();
                 utils.openContactsPanel();
                 converse.minimized_chats.toggleview.model.browserStorage._clear();

+ 29 - 7
tests/utils.js

@@ -92,6 +92,7 @@
     utils.clearBrowserStorage = function () {
         window.localStorage.clear();
         window.sessionStorage.clear();
+        return this;
     };
 
     utils.clearChatBoxMessages = function (jid) {
@@ -101,16 +102,37 @@
         view.model.messages.browserStorage._clear();
     };
 
-    utils.createCurrentContacts = function () {
+    utils.createContacts = function (type) {
         // Create current (as opposed to requesting or pending) contacts
         // for the user's roster.
-        for (i=0; i<mock.cur_names.length; i++) {
+        var names;
+        if (type === 'requesting') {
+            names = mock.req_names;
+            subscription = 'none';
+            requesting = true;
+            ask = null;
+        } else if (type === 'pending') {
+            names = mock.pend_names;
+            subscription = 'none';
+            requesting = false;
+            ask = 'subscribe';
+        } else if (type === 'all') {
+            this.createContacts().createContacts('request').createContacts('pending');
+            return this;
+        } else {
+            names = mock.cur_names;
+            subscription = 'both';
+            requesting = false;
+            ask = null;
+        }
+        for (i=0; i<names.length; i++) {
             converse.roster.create({
-                jid: mock.cur_names[i].replace(/ /g,'.').toLowerCase() + '@localhost',
-                subscription: 'both',
-                ask: null,
-                fullname: mock.cur_names[i],
-                is_last: i===(mock.cur_names.length-1)
+                ask: ask,
+                fullname: names[i],
+                is_last: i===(names.length-1),
+                jid: names[i].replace(/ /g,'.').toLowerCase() + '@localhost',
+                requesting: requesting,
+                subscription: subscription
             });
         }
         return this;