diff --git a/converse.js b/converse.js index 2fc684ce5..df8a66466 100644 --- a/converse.js +++ b/converse.js @@ -3228,10 +3228,24 @@ showInRoster: function () { var chatStatus = this.get('chat_status'); - if (converse.show_only_online_users && chatStatus !== 'online') + if (converse.show_only_online_users && chatStatus !== 'online') { + // If pending or requesting, show + if ((this.get('ask') === 'subscribe') + || (this.get('subscription') === 'from') + || (this.get('requesting') === true)) { + return true; + } return false; - if (converse.hide_offline_users && chatStatus === 'offline') + } + if (converse.hide_offline_users && chatStatus === 'offline') { + // If pending or requesting, show + if ((this.get('ask') === 'subscribe') + || (this.get('subscription') === 'from') + || (this.get('requesting') === true)) { + return true; + } return false; + } return true; } }); diff --git a/spec/controlbox.js b/spec/controlbox.js index 88a124c0c..f8083846f 100644 --- a/spec/controlbox.js +++ b/spec/controlbox.js @@ -410,6 +410,45 @@ }, converse)); }, converse)); + it("are shown in the roster when show_only_online_users", $.proxy(function () { + converse.show_only_online_users = true; + runs(function () { + _addContacts(); + }); + waits(50); + spyOn(this.rosterview, 'update').andCallThrough(); + runs($.proxy(function () { + expect(this.rosterview.$el.is(':visible')).toEqual(true); + expect(this.rosterview.update).toHaveBeenCalled(); + }, converse)); + waits(300); // Needed, due to debounce + runs ($.proxy(function () { + expect(this.rosterview.$el.find('dd:visible').length).toBe(3); + expect(this.rosterview.$el.find('dt:visible').length).toBe(1); + }, converse)); + converse.show_only_online_users = false; + }, converse)); + + it("are shown in the roster when hide_offline_users", $.proxy(function () { + converse.hide_offline_users = true; + runs(function () { + _addContacts(); + }); + waits(50); + spyOn(this.rosterview, 'update').andCallThrough(); + waits(50); + runs($.proxy(function () { + expect(this.rosterview.$el.is(':visible')).toEqual(true); + expect(this.rosterview.update).toHaveBeenCalled(); + }, converse)); + waits(300); // Needed, due to debounce + runs ($.proxy(function () { + expect(this.rosterview.$el.find('dd:visible').length).toBe(3); + expect(this.rosterview.$el.find('dt:visible').length).toBe(1); + }, converse)); + converse.hide_offline_users = false; + }, converse)); + it("can be removed by the user", $.proxy(function () { runs($.proxy(function () { _addContacts();