(function (root, factory) { define(["jquery", "jasmine", "mock", "converse-core", "test-utils"], factory); } (this, function ($, jasmine, mock, converse, test_utils) { var _ = converse.env._; var $pres = converse.env.$pres; var $msg = converse.env.$msg; var $iq = converse.env.$iq; var u = converse.env.utils; var checkHeaderToggling = function (group) { var $group = $(group); var toggle = group.querySelector('a.group-toggle'); expect(u.isVisible($group[0])).toBeTruthy(); expect($group.find('ul.collapsed').length).toBe(0); expect(u.hasClass('fa-caret-right', toggle.firstElementChild)).toBeFalsy(); expect(u.hasClass('fa-caret-down', toggle.firstElementChild)).toBeTruthy(); toggle.click(); return test_utils.waitUntil(function () { return $group.find('ul.collapsed').length === 1; }, 500).then(function () { expect(u.hasClass('fa-caret-right', toggle.firstElementChild)).toBeTruthy(); expect(u.hasClass('fa-caret-down', toggle.firstElementChild)).toBeFalsy(); toggle.click(); return test_utils.waitUntil(function () { return $group.find('li').length === $group.find('li:visible').length }, 500); }).then(function () { expect(u.hasClass('fa-caret-right', toggle.firstElementChild)).toBeFalsy(); expect(u.hasClass('fa-caret-down', toggle.firstElementChild)).toBeTruthy(); }); }; describe("The Contacts Roster", function () { describe("The live filter", function () { it("will only appear when roster contacts flow over the visible area", mock.initConverseWithPromises( null, ['rosterGroupsFetched'], {}, function (done, _converse) { var $filter = $(_converse.rosterview.el.querySelector('.roster-filter')); var names = mock.cur_names; test_utils.openControlBox(); _converse.rosterview.update(); // XXX: Will normally called as event handler expect($filter.length).toBe(1); test_utils.waitUntil(function () { return !$filter.is(':visible'); }).then(function () { for (var i=0; i"+ ""+ ""+ ""+ ""); done(); }); })); it("do not have a header if there aren't any", mock.initConverseWithPromises( null, ['rosterGroupsFetched'], {}, function (done, _converse) { test_utils.openControlBox(); var name = mock.pend_names[0]; _converse.roster.create({ jid: name.replace(/ /g,'.').toLowerCase() + '@localhost', subscription: 'none', ask: 'subscribe', fullname: name }); spyOn(window, 'confirm').and.returnValue(true); spyOn(_converse.connection, 'sendIQ').and.callFake(function (iq, callback) { if (typeof callback === "function") { return callback(); } }); test_utils.waitUntil(function () { var $pending_contacts = $(_converse.rosterview.get('Pending contacts').el); return $pending_contacts.is(':visible') && $pending_contacts.find('li:visible').length; }, 700).then(function () { $(_converse.rosterview.el).find(".pending-contact-name:contains('"+name+"')") .parent().siblings('.remove-xmpp-contact')[0].click(); expect(window.confirm).toHaveBeenCalled(); expect(_converse.connection.sendIQ).toHaveBeenCalled(); expect(u.isVisible(_converse.rosterview.get('Pending contacts').el)).toEqual(false); done(); }); })); it("is shown when a new private message is received", mock.initConverseWithPromises( null, ['rosterGroupsFetched'], {}, function (done, _converse) { _addContacts(_converse); var name; spyOn(window, 'confirm').and.returnValue(true); for (var i=0; i