Refactor other tests. All tests pass now again. updates #307

This commit is contained in:
JC Brand 2015-03-01 11:58:07 +01:00
parent 405351058a
commit 6c31f76406
3 changed files with 58 additions and 24 deletions

View File

@ -2523,9 +2523,10 @@
}, },
leave: function(exit_msg) { leave: function(exit_msg) {
var presenceid = converse.connection.getUniqueId();
var presence = $pres({ var presence = $pres({
type: "unavailable", type: "unavailable",
id: converse.connection.getUniqueId(), id: presenceid,
from: converse.connection.jid, from: converse.connection.jid,
to: this.getRoomJID() to: this.getRoomJID()
}); });
@ -2772,10 +2773,10 @@
return this.scrollDown(); return this.scrollDown();
}, },
showErrorMessage: function ($error, room) { showErrorMessage: function ($error) {
// We didn't enter the room, so we must remove it from the MUC // We didn't enter the room, so we must remove it from the MUC
// add-on // add-on
delete converse.connection.muc[room.name]; delete converse.connection.muc[this.model.get('jid')]; // XXX: Still needed?
if ($error.attr('type') == 'auth') { if ($error.attr('type') == 'auth') {
if ($error.find('not-authorized').length) { if ($error.find('not-authorized').length) {
this.renderPasswordForm(); this.renderPasswordForm();
@ -2810,7 +2811,7 @@
var nick = this.model.get('nick'); var nick = this.model.get('nick');
if ($presence.attr('type') === 'error') { if ($presence.attr('type') === 'error') {
this.model.set('connected', false); this.model.set('connected', false);
this.showErrorMessage($presence.find('error'), room); this.showErrorMessage($presence.find('error'));
} else { } else {
is_self = ($presence.find("status[code='110']").length) || is_self = ($presence.find("status[code='110']").length) ||
($presence.attr('from') == this.model.get('id')+'/'+Strophe.escapeNode(nick)); ($presence.attr('from') == this.model.get('id')+'/'+Strophe.escapeNode(nick));

View File

@ -23,30 +23,54 @@
it("shows users currently present in the room", $.proxy(function () { it("shows users currently present in the room", $.proxy(function () {
test_utils.openChatRoom('lounge', 'localhost', 'dummy'); test_utils.openChatRoom('lounge', 'localhost', 'dummy');
var chatroomview = this.chatboxviews.get('lounge@localhost'), var name;
$participant_list; var view = this.chatboxviews.get('lounge@localhost'),
var roster = {}, room = {}, i; $participants = view.$('.participant-list');
for (i=0; i<mock.chatroom_names.length-1; i++) { spyOn(view, 'onChatRoomPresence').andCallThrough();
roster[mock.chatroom_names[i]] = {}; var room = {}, i, role;
chatroomview.onChatRoomRoster(roster, room); for (i=0; i<mock.chatroom_names.length; i++) {
$participant_list = chatroomview.$el.find('.participant-list'); name = mock.chatroom_names[i];
expect($participant_list.find('li').length).toBe(1+i); console.log(name);
expect($($participant_list.find('li')[i]).text()).toBe(mock.chatroom_names[i]); role = mock.chatroom_roles[name].role;
// See example 21 http://xmpp.org/extensions/xep-0045.html#enter-pres
var presence = $pres({
to:'dummy@localhost/pda',
from:'lounge@localhost/'+name
}).c('x').attrs({xmlns:'http://jabber.org/protocol/muc#user'})
.c('item').attrs({
affiliation: mock.chatroom_roles[name].affiliation,
jid: 'dummy@localhost/pda',
role: role
}).up()
.c('status').attrs({code:'110'}).nodeTree;
this.connection._dataRecv(test_utils.createRequest(presence));
expect(view.onChatRoomPresence).toHaveBeenCalled();
expect($participants.find('li').length).toBe(1+i);
expect($($participants.find('li')[i]).text()).toBe(mock.chatroom_names[i]);
expect($($participants.find('li')[i]).hasClass('moderator')).toBe(role === "moderator");
} }
roster[converse.bare_jid] = {};
chatroomview.onChatRoomRoster(roster, room);
}, converse)); }, converse));
it("indicates moderators by means of a special css class and tooltip", $.proxy(function () { it("indicates moderators by means of a special css class and tooltip", $.proxy(function () {
test_utils.openChatRoom('lounge', 'localhost', 'dummy'); test_utils.openChatRoom('lounge', 'localhost', 'dummy');
var chatroomview = this.chatboxviews.get('lounge@localhost'); var view = this.chatboxviews.get('lounge@localhost');
var roster = {}, idx = mock.chatroom_names.length-1;
roster[mock.chatroom_names[idx]] = {}; var presence = $pres({
roster[mock.chatroom_names[idx]].role = 'moderator'; to:'dummy@localhost/pda',
chatroomview.onChatRoomRoster(roster, {}); from:'lounge@localhost/moderatorman'
var occupant = chatroomview.$el.find('.participant-list').find('li'); }).c('x').attrs({xmlns:'http://jabber.org/protocol/muc#user'})
.c('item').attrs({
affiliation: 'admin',
jid: 'dummy@localhost/pda',
role: 'moderator',
}).up()
.c('status').attrs({code:'110'}).nodeTree;
this.connection._dataRecv(test_utils.createRequest(presence));
var occupant = view.$el.find('.participant-list').find('li');
expect(occupant.length).toBe(1); expect(occupant.length).toBe(1);
expect($(occupant).text()).toBe(mock.chatroom_names[idx]); expect($(occupant).text()).toBe("moderatorman");
expect($(occupant).attr('class')).toBe('moderator'); expect($(occupant).attr('class')).toBe('moderator');
expect($(occupant).attr('title')).toBe('This user is a moderator'); expect($(occupant).attr('title')).toBe('This user is a moderator');
}, converse)); }, converse));
@ -371,7 +395,7 @@
var view = this.chatboxviews.get('lounge@localhost'), chatroom = view.model, $el; var view = this.chatboxviews.get('lounge@localhost'), chatroom = view.model, $el;
spyOn(view, 'close').andCallThrough(); spyOn(view, 'close').andCallThrough();
spyOn(converse, 'emit'); spyOn(converse, 'emit');
spyOn(converse.connection.muc, 'leave'); spyOn(view, 'leave');
view.delegateEvents(); // We need to rebind all events otherwise our spy won't be called view.delegateEvents(); // We need to rebind all events otherwise our spy won't be called
runs(function () { runs(function () {
view.$el.find('.close-chatbox-button').click(); view.$el.find('.close-chatbox-button').click();
@ -379,7 +403,7 @@
waits(50); waits(50);
runs(function () { runs(function () {
expect(view.close).toHaveBeenCalled(); expect(view.close).toHaveBeenCalled();
expect(this.connection.muc.leave).toHaveBeenCalled(); expect(view.leave).toHaveBeenCalled();
expect(this.emit).toHaveBeenCalledWith('chatBoxClosed', jasmine.any(Object)); expect(this.emit).toHaveBeenCalledWith('chatBoxClosed', jasmine.any(Object));
}.bind(converse)); }.bind(converse));
}, converse)); }, converse));

View File

@ -33,6 +33,15 @@
mock.chatroom_names = [ mock.chatroom_names = [
'Dyon van de Wege', 'Thomas Kalb', 'Dirk Theissen', 'Felix Hofmann', 'Ka Lek', 'Anne Ebersbacher' 'Dyon van de Wege', 'Thomas Kalb', 'Dirk Theissen', 'Felix Hofmann', 'Ka Lek', 'Anne Ebersbacher'
]; ];
// TODO: need to also test other roles and affiliations
mock.chatroom_roles = {
'Anne Ebersbacher': { affiliation: "owner", role: "moderator" },
'Dirk Theissen': { affiliation: "admin", role: "moderator" },
'Dyon van de Wege': { affiliation: "member", role: "participant" },
'Felix Hofmann': { affiliation: "member", role: "participant" },
'Ka Lek': { affiliation: "member", role: "participant" },
'Thomas Kalb': { affiliation: "member", role: "participant" }
};
mock.event = { mock.event = {
'preventDefault': function () {} 'preventDefault': function () {}