Commit cc98cea0 authored by JC Brand's avatar JC Brand

Fix failing tests by waiting appropriately

parent 9a60b5bb
...@@ -78646,7 +78646,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_ ...@@ -78646,7 +78646,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
if (_converse.allow_muc_invitations) { if (_converse.allow_muc_invitations) {
const registerDirectInvitationHandler = function registerDirectInvitationHandler() { const registerDirectInvitationHandler = function registerDirectInvitationHandler() {
_converse.connection.addHandler(function (message) { _converse.connection.addHandler(message => {
_converse.onDirectMUCInvitation(message); _converse.onDirectMUCInvitation(message);
return true; return true;
...@@ -377,14 +377,14 @@ ...@@ -377,14 +377,14 @@
['http://jabber.org/protocol/pubsub#publish-options'] ['http://jabber.org/protocol/pubsub#publish-options']
).then(function () { ).then(function () {
/* Client requests all items /* Client requests all items
* ------------------------- * -------------------------
* *
* <iq from='juliet@capulet.lit/randomID' type='get' id='retrieve1'> * <iq from='juliet@capulet.lit/randomID' type='get' id='retrieve1'>
* <pubsub xmlns='http://jabber.org/protocol/pubsub'> * <pubsub xmlns='http://jabber.org/protocol/pubsub'>
* <items node='storage:bookmarks'/> * <items node='storage:bookmarks'/>
* </pubsub> * </pubsub>
* </iq> * </iq>
*/ */
var IQ_id; var IQ_id;
expect(_.filter(_converse.connection.send.calls.all(), function (call) { expect(_.filter(_converse.connection.send.calls.all(), function (call) {
var stanza = call.args[0]; var stanza = call.args[0];
...@@ -407,27 +407,29 @@ ...@@ -407,27 +407,29 @@
}).length).toBe(1); }).length).toBe(1);
/* /*
* Server returns all items * Server returns all items
* ------------------------ * ------------------------
* <iq type='result' * <iq type='result'
* to='juliet@capulet.lit/randomID' * to='juliet@capulet.lit/randomID'
* id='retrieve1'> * id='retrieve1'>
* <pubsub xmlns='http://jabber.org/protocol/pubsub'> * <pubsub xmlns='http://jabber.org/protocol/pubsub'>
* <items node='storage:bookmarks'> * <items node='storage:bookmarks'>
* <item id='current'> * <item id='current'>
* <storage xmlns='storage:bookmarks'> * <storage xmlns='storage:bookmarks'>
* <conference name='The Play&apos;s the Thing' * <conference name='The Play&apos;s the Thing'
* autojoin='true' * autojoin='true'
* jid='theplay@conference.shakespeare.lit'> * jid='theplay@conference.shakespeare.lit'>
* <nick>JC</nick> * <nick>JC</nick>
* </conference> * </conference>
* </storage> * </storage>
* </item> * </item>
* </items> * </items>
* </pubsub> * </pubsub>
* </iq> * </iq>
*/ */
expect(_converse.bookmarks.models.length).toBe(0); expect(_converse.bookmarks.models.length).toBe(0);
spyOn(_converse.bookmarks, 'onBookmarksReceived').and.callThrough();
var stanza = $iq({'to': _converse.connection.jid, 'type':'result', 'id':IQ_id}) var stanza = $iq({'to': _converse.connection.jid, 'type':'result', 'id':IQ_id})
.c('pubsub', {'xmlns': Strophe.NS.PUBSUB}) .c('pubsub', {'xmlns': Strophe.NS.PUBSUB})
.c('items', {'node': 'storage:bookmarks'}) .c('items', {'node': 'storage:bookmarks'})
...@@ -444,11 +446,13 @@ ...@@ -444,11 +446,13 @@
'jid': 'another@conference.shakespeare.lit' 'jid': 'another@conference.shakespeare.lit'
}); // Purposefully exclude the <nick> element to test #1043 }); // Purposefully exclude the <nick> element to test #1043
_converse.connection._dataRecv(test_utils.createRequest(stanza)); _converse.connection._dataRecv(test_utils.createRequest(stanza));
return test_utils.waitUntil(() => _converse.bookmarks.onBookmarksReceived.calls.count(), 300)
}).then(() => {
expect(_converse.bookmarks.models.length).toBe(2); expect(_converse.bookmarks.models.length).toBe(2);
expect(_converse.bookmarks.findWhere({'jid': 'theplay@conference.shakespeare.lit'}).get('autojoin')).toBe(true); expect(_converse.bookmarks.findWhere({'jid': 'theplay@conference.shakespeare.lit'}).get('autojoin')).toBe(true);
expect(_converse.bookmarks.findWhere({'jid': 'another@conference.shakespeare.lit'}).get('autojoin')).toBe(false); expect(_converse.bookmarks.findWhere({'jid': 'another@conference.shakespeare.lit'}).get('autojoin')).toBe(false);
done(); done();
}); }).catch(_.partial(console.error, _));
})); }));
describe("The rooms panel", function () { describe("The rooms panel", function () {
......
...@@ -1800,6 +1800,8 @@ ...@@ -1800,6 +1800,8 @@
"<query xmlns='http://jabber.org/protocol/disco#info'/>"+ "<query xmlns='http://jabber.org/protocol/disco#info'/>"+
"</iq>"); "</iq>");
var view = _converse.chatboxviews.get('coven@chat.shakespeare.lit');
spyOn(view.model, 'parseRoomFeatures').and.callThrough();
/* <iq from='coven@chat.shakespeare.lit' /* <iq from='coven@chat.shakespeare.lit'
* id='ik3vs715' * id='ik3vs715'
* to='hag66@shakespeare.lit/pda' * to='hag66@shakespeare.lit/pda'
...@@ -1839,16 +1841,17 @@ ...@@ -1839,16 +1841,17 @@
.c('feature', {'var': 'muc_unmoderated'}).up() .c('feature', {'var': 'muc_unmoderated'}).up()
.c('feature', {'var': 'muc_nonanonymous'}); .c('feature', {'var': 'muc_nonanonymous'});
_converse.connection._dataRecv(test_utils.createRequest(features_stanza)); _converse.connection._dataRecv(test_utils.createRequest(features_stanza));
test_utils.waitUntil(() => view.model.parseRoomFeatures.calls.count(), 300)
var view = _converse.chatboxviews.get('coven@chat.shakespeare.lit'); .then(() => {
expect(view.model.get('features_fetched')).toBeTruthy(); expect(view.model.get('features_fetched')).toBeTruthy();
expect(view.model.get('passwordprotected')).toBe(true); expect(view.model.get('passwordprotected')).toBe(true);
expect(view.model.get('hidden')).toBe(true); expect(view.model.get('hidden')).toBe(true);
expect(view.model.get('temporary')).toBe(true); expect(view.model.get('temporary')).toBe(true);
expect(view.model.get('open')).toBe(true); expect(view.model.get('open')).toBe(true);
expect(view.model.get('unmoderated')).toBe(true); expect(view.model.get('unmoderated')).toBe(true);
expect(view.model.get('nonanonymous')).toBe(true); expect(view.model.get('nonanonymous')).toBe(true);
done(); done();
});
})); }));
it("updates the shown features when the room configuration has changed", it("updates the shown features when the room configuration has changed",
...@@ -2946,6 +2949,7 @@ ...@@ -2946,6 +2949,7 @@
function (done, _converse) { function (done, _converse) {
var sent_IQs = [], IQ_ids = []; var sent_IQs = [], IQ_ids = [];
var invitee_jid, sent_stanza, sent_id;
var sendIQ = _converse.connection.sendIQ; var sendIQ = _converse.connection.sendIQ;
spyOn(_converse.connection, 'sendIQ').and.callFake(function (iq, callback, errback) { spyOn(_converse.connection, 'sendIQ').and.callFake(function (iq, callback, errback) {
sent_IQs.push(iq); sent_IQs.push(iq);
...@@ -2954,6 +2958,9 @@ ...@@ -2954,6 +2958,9 @@
_converse.api.rooms.open('coven@chat.shakespeare.lit', {'nick': 'dummy'}); _converse.api.rooms.open('coven@chat.shakespeare.lit', {'nick': 'dummy'});
var view = _converse.chatboxviews.get('coven@chat.shakespeare.lit');
spyOn(view.model, 'parseRoomFeatures').and.callThrough();
// State that the chat is members-only via the features IQ // State that the chat is members-only via the features IQ
var features_stanza = $iq({ var features_stanza = $iq({
from: 'coven@chat.shakespeare.lit', from: 'coven@chat.shakespeare.lit',
...@@ -2973,104 +2980,102 @@ ...@@ -2973,104 +2980,102 @@
.c('feature', {'var': 'muc_membersonly'}).up(); .c('feature', {'var': 'muc_membersonly'}).up();
_converse.connection._dataRecv(test_utils.createRequest(features_stanza)); _converse.connection._dataRecv(test_utils.createRequest(features_stanza));
var view = _converse.chatboxviews.get('coven@chat.shakespeare.lit'); test_utils.waitUntil(() => view.model.parseRoomFeatures.calls.count(), 300)
expect(view.model.get('membersonly')).toBeTruthy(); .then(() => {
expect(view.model.get('membersonly')).toBeTruthy();
test_utils.createContacts(_converse, 'current');
test_utils.createContacts(_converse, 'current');
var sent_stanza, sent_id;
spyOn(_converse.connection, 'send').and.callFake(function (stanza) { spyOn(_converse.connection, 'send').and.callFake(function (stanza) {
if (stanza.nodeTree && stanza.nodeTree.nodeName === 'message') { if (stanza.nodeTree && stanza.nodeTree.nodeName === 'message') {
sent_id = stanza.nodeTree.getAttribute('id'); sent_id = stanza.nodeTree.getAttribute('id');
sent_stanza = stanza; sent_stanza = stanza;
} }
}); });
var name = mock.cur_names[0]; var name = mock.cur_names[0];
var invitee_jid = name.replace(/ /g,'.').toLowerCase() + '@localhost'; invitee_jid = name.replace(/ /g,'.').toLowerCase() + '@localhost';
var reason = "Please join this chat room"; var reason = "Please join this chat room";
view.model.directInvite(invitee_jid, reason); view.model.directInvite(invitee_jid, reason);
// Check in reverse order that we requested all three lists // Check in reverse order that we requested all three lists
// (member, owner and admin). // (member, owner and admin).
var admin_iq_id = IQ_ids.pop(); var admin_iq_id = IQ_ids.pop();
var owner_iq_id = IQ_ids.pop(); var owner_iq_id = IQ_ids.pop();
var member_iq_id = IQ_ids.pop(); var member_iq_id = IQ_ids.pop();
expect(sent_IQs.pop().toLocaleString()).toBe( expect(sent_IQs.pop().toLocaleString()).toBe(
"<iq to='coven@chat.shakespeare.lit' type='get' xmlns='jabber:client' id='"+admin_iq_id+"'>"+ "<iq to='coven@chat.shakespeare.lit' type='get' xmlns='jabber:client' id='"+admin_iq_id+"'>"+
"<query xmlns='http://jabber.org/protocol/muc#admin'>"+ "<query xmlns='http://jabber.org/protocol/muc#admin'>"+
"<item affiliation='admin'/>"+ "<item affiliation='admin'/>"+
"</query>"+ "</query>"+
"</iq>"); "</iq>");
expect(sent_IQs.pop().toLocaleString()).toBe( expect(sent_IQs.pop().toLocaleString()).toBe(
"<iq to='coven@chat.shakespeare.lit' type='get' xmlns='jabber:client' id='"+owner_iq_id+"'>"+ "<iq to='coven@chat.shakespeare.lit' type='get' xmlns='jabber:client' id='"+owner_iq_id+"'>"+
"<query xmlns='http://jabber.org/protocol/muc#admin'>"+ "<query xmlns='http://jabber.org/protocol/muc#admin'>"+
"<item affiliation='owner'/>"+ "<item affiliation='owner'/>"+
"</query>"+ "</query>"+
"</iq>"); "</iq>");
expect(sent_IQs.pop().toLocaleString()).toBe( expect(sent_IQs.pop().toLocaleString()).toBe(
"<iq to='coven@chat.shakespeare.lit' type='get' xmlns='jabber:client' id='"+member_iq_id+"'>"+ "<iq to='coven@chat.shakespeare.lit' type='get' xmlns='jabber:client' id='"+member_iq_id+"'>"+
"<query xmlns='http://jabber.org/protocol/muc#admin'>"+ "<query xmlns='http://jabber.org/protocol/muc#admin'>"+
"<item affiliation='member'/>"+ "<item affiliation='member'/>"+
"</query>"+ "</query>"+
"</iq>"); "</iq>");
/* Now the service sends the member list to the user /* Now the service sends the member list to the user
* *
* <iq from='coven@chat.shakespeare.lit' * <iq from='coven@chat.shakespeare.lit'
* id='member3' * id='member3'
* to='crone1@shakespeare.lit/desktop' * to='crone1@shakespeare.lit/desktop'
* type='result'> * type='result'>
* <query xmlns='http://jabber.org/protocol/muc#admin'> * <query xmlns='http://jabber.org/protocol/muc#admin'>
* <item affiliation='member' * <item affiliation='member'
* jid='hag66@shakespeare.lit' * jid='hag66@shakespeare.lit'
* nick='thirdwitch' * nick='thirdwitch'
* role='participant'/> * role='participant'/>
* </query> * </query>
* </iq> * </iq>
*/ */
var member_list_stanza = $iq({ var member_list_stanza = $iq({
'from': 'coven@chat.shakespeare.lit', 'from': 'coven@chat.shakespeare.lit',
'id': member_iq_id, 'id': member_iq_id,
'to': 'dummy@localhost/resource', 'to': 'dummy@localhost/resource',
'type': 'result' 'type': 'result'
}).c('query', {'xmlns': Strophe.NS.MUC_ADMIN}) }).c('query', {'xmlns': Strophe.NS.MUC_ADMIN})
.c('item', { .c('item', {
'affiliation': 'member', 'affiliation': 'member',
'jid': 'hag66@shakespeare.lit', 'jid': 'hag66@shakespeare.lit',
'nick': 'thirdwitch', 'nick': 'thirdwitch',
'role': 'participant' 'role': 'participant'
}); });
_converse.connection._dataRecv(test_utils.createRequest(member_list_stanza)); _converse.connection._dataRecv(test_utils.createRequest(member_list_stanza));
var admin_list_stanza = $iq({ var admin_list_stanza = $iq({
'from': 'coven@chat.shakespeare.lit', 'from': 'coven@chat.shakespeare.lit',
'id': admin_iq_id, 'id': admin_iq_id,
'to': 'dummy@localhost/resource', 'to': 'dummy@localhost/resource',
'type': 'result' 'type': 'result'
}).c('query', {'xmlns': Strophe.NS.MUC_ADMIN}) }).c('query', {'xmlns': Strophe.NS.MUC_ADMIN})
.c('item', { .c('item', {
'affiliation': 'admin', 'affiliation': 'admin',
'jid': 'wiccarocks@shakespeare.lit', 'jid': 'wiccarocks@shakespeare.lit',
'nick': 'secondwitch' 'nick': 'secondwitch'
}); });
_converse.connection._dataRecv(test_utils.createRequest(admin_list_stanza)); _converse.connection._dataRecv(test_utils.createRequest(admin_list_stanza));
var owner_list_stanza = $iq({ var owner_list_stanza = $iq({
'from': 'coven@chat.shakespeare.lit', 'from': 'coven@chat.shakespeare.lit',
'id': owner_iq_id, 'id': owner_iq_id,
'to': 'dummy@localhost/resource', 'to': 'dummy@localhost/resource',
'type': 'result' 'type': 'result'
}).c('query', {'xmlns': Strophe.NS.MUC_ADMIN}) }).c('query', {'xmlns': Strophe.NS.MUC_ADMIN})
.c('item', { .c('item', {
'affiliation': 'owner', 'affiliation': 'owner',
'jid': 'crone1@shakespeare.lit', 'jid': 'crone1@shakespeare.lit',
}); });
_converse.connection._dataRecv(test_utils.createRequest(owner_list_stanza)); _converse.connection._dataRecv(test_utils.createRequest(owner_list_stanza));
return test_utils.waitUntil(() => IQ_ids.length, 300);
test_utils.waitUntil(function () { }).then(() => {
return IQ_ids.length;
}, 300).then(function () {
// Check that the member list now gets updated // Check that the member list now gets updated
var iq = "<iq to='coven@chat.shakespeare.lit' type='set' xmlns='jabber:client' id='"+IQ_ids.pop()+"'>"+ var iq = "<iq to='coven@chat.shakespeare.lit' type='set' xmlns='jabber:client' id='"+IQ_ids.pop()+"'>"+
"<query xmlns='http://jabber.org/protocol/muc#admin'>"+ "<query xmlns='http://jabber.org/protocol/muc#admin'>"+
...@@ -3079,18 +3084,15 @@ ...@@ -3079,18 +3084,15 @@
"</item>"+ "</item>"+
"</query>"+ "</query>"+
"</iq>"; "</iq>";
return test_utils.waitUntil(() => _.includes(_.invokeMap(sent_IQs, Object.prototype.toLocaleString), iq), 300);
test_utils.waitUntil(function () { }).then(() => {
return _.includes(_.invokeMap(sent_IQs, Object.prototype.toLocaleString), iq); // Finally check that the user gets invited.
}, 300).then(function () { expect(sent_stanza.toLocaleString()).toBe( // Strophe adds the xmlns attr (although not in spec)
// Finally check that the user gets invited. "<message from='dummy@localhost/resource' to='"+invitee_jid+"' id='"+sent_id+"' xmlns='jabber:client'>"+
expect(sent_stanza.toLocaleString()).toBe( // Strophe adds the xmlns attr (although not in spec) "<x xmlns='jabber:x:conference' jid='coven@chat.shakespeare.lit' reason='Please join this chat room'/>"+
"<message from='dummy@localhost/resource' to='"+invitee_jid+"' id='"+sent_id+"' xmlns='jabber:client'>"+ "</message>"
"<x xmlns='jabber:x:conference' jid='coven@chat.shakespeare.lit' reason='Please join this chat room'/>"+ );
"</message>" done();
);
done();
});
}); });
})); }));
}); });
......
...@@ -403,6 +403,7 @@ ...@@ -403,6 +403,7 @@
}; };
if (reason !== null) { attrs.reason = reason; } if (reason !== null) { attrs.reason = reason; }
if (this.get('password')) { attrs.password = this.get('password'); } if (this.get('password')) { attrs.password = this.get('password'); }
const invitation = $msg({ const invitation = $msg({
from: _converse.connection.jid, from: _converse.connection.jid,
to: recipient, to: recipient,
...@@ -1126,7 +1127,7 @@ ...@@ -1126,7 +1127,7 @@
if (_converse.allow_muc_invitations) { if (_converse.allow_muc_invitations) {
const registerDirectInvitationHandler = function () { const registerDirectInvitationHandler = function () {
_converse.connection.addHandler( _converse.connection.addHandler(
function (message) { (message) => {
_converse.onDirectMUCInvitation(message); _converse.onDirectMUCInvitation(message);
return true; return true;
}, 'jabber:x:conference', 'message'); }, 'jabber:x:conference', 'message');
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment