Bugfix. See below.
"TypeError: this.sendConfiguration(...).then is not a function" when a room is created
This commit is contained in:
parent
bc8e3e1a01
commit
e52a775430
|
@ -20,6 +20,9 @@
|
||||||
- Allow JIDs not on the roster to be invited to a chatroom. [jcbrand]
|
- Allow JIDs not on the roster to be invited to a chatroom. [jcbrand]
|
||||||
- #770 Allow setting contact attrs on chats.open [Ape]
|
- #770 Allow setting contact attrs on chats.open [Ape]
|
||||||
|
|
||||||
|
## 2.0.7 (2017-02-14)
|
||||||
|
- Bugfix. 'TypeError: this.sendConfiguration(...).then is not a function' when an instant room is created. [jcbrand]
|
||||||
|
|
||||||
## 2.0.6 (2017-02-13)
|
## 2.0.6 (2017-02-13)
|
||||||
- Escape user-generated input to prevent JS-injection attacks. (Thanks to SamWhited) [jcbrand]
|
- Escape user-generated input to prevent JS-injection attacks. (Thanks to SamWhited) [jcbrand]
|
||||||
- #486 Honor existing mam user configuration [throwaway42]
|
- #486 Honor existing mam user configuration [throwaway42]
|
||||||
|
|
108
spec/chatroom.js
108
spec/chatroom.js
|
@ -235,6 +235,114 @@
|
||||||
}));
|
}));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe("An instant chat room", function () {
|
||||||
|
it("will be created when muc_instant_rooms is set to true", mock.initConverse(function (_converse) {
|
||||||
|
var sent_IQ, IQ_id;
|
||||||
|
var sendIQ = _converse.connection.sendIQ;
|
||||||
|
spyOn(_converse.connection, 'sendIQ').andCallFake(function (iq, callback, errback) {
|
||||||
|
sent_IQ = iq;
|
||||||
|
IQ_id = sendIQ.bind(this)(iq, callback, errback);
|
||||||
|
});
|
||||||
|
/* <iq from="jordie.langen@chat.example.org/converse.js-11659299" to="myroom@conference.chat.example.org" type="get">
|
||||||
|
* <query xmlns="http://jabber.org/protocol/disco#info"/>
|
||||||
|
* </iq>
|
||||||
|
* <iq xmlns="jabber:client" type="error" to="jordie.langen@chat.example.org/converse.js-11659299" from="myroom@conference.chat.example.org">
|
||||||
|
* <error type="cancel">
|
||||||
|
* <item-not-found xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/>
|
||||||
|
* </error>
|
||||||
|
* </iq>
|
||||||
|
*/
|
||||||
|
test_utils.openChatRoom(_converse, 'lounge', 'localhost', 'dummy');
|
||||||
|
// We pretend this is a new room, so no disco info is returned.
|
||||||
|
var features_stanza = $iq({
|
||||||
|
from: 'lounge@localhost',
|
||||||
|
'id': IQ_id,
|
||||||
|
'to': 'dummy@localhost/desktop',
|
||||||
|
'type': 'error'
|
||||||
|
}).c('error', {'type': 'cancel'})
|
||||||
|
.c('item-not-found', {'xmlns': "urn:ietf:params:xml:ns:xmpp-stanzas"});
|
||||||
|
_converse.connection._dataRecv(test_utils.createRequest(features_stanza));
|
||||||
|
|
||||||
|
|
||||||
|
var view = _converse.chatboxviews.get('lounge@localhost');
|
||||||
|
spyOn(view, 'join').andCallThrough();
|
||||||
|
|
||||||
|
/* <iq to="myroom@conference.chat.example.org"
|
||||||
|
* from="jordie.langen@chat.example.org/converse.js-11659299"
|
||||||
|
* type="get">
|
||||||
|
* <query xmlns="http://jabber.org/protocol/disco#info"
|
||||||
|
* node="x-roomuser-item"/>
|
||||||
|
* </iq>
|
||||||
|
*/
|
||||||
|
expect(sent_IQ.toLocaleString()).toBe(
|
||||||
|
"<iq to='lounge@localhost' from='dummy@localhost/resource' "+
|
||||||
|
"type='get' xmlns='jabber:client' id='"+IQ_id+"'>"+
|
||||||
|
"<query xmlns='http://jabber.org/protocol/disco#info' node='x-roomuser-item'/></iq>"
|
||||||
|
);
|
||||||
|
/* * <iq xmlns="jabber:client" type="error" to="jordie.langen@chat.example.org/converse.js-11659299" from="myroom@conference.chat.example.org">
|
||||||
|
* <error type="cancel">
|
||||||
|
* <item-not-found xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/>
|
||||||
|
* </error>
|
||||||
|
* </iq>
|
||||||
|
*/
|
||||||
|
var stanza = $iq({
|
||||||
|
'type': 'error',
|
||||||
|
'id': IQ_id,
|
||||||
|
'from': view.model.get('jid'),
|
||||||
|
'to': _converse.connection.jid
|
||||||
|
}).c('error', {'type': 'cancel'})
|
||||||
|
.c('item-not-found', {'xmlns': "urn:ietf:params:xml:ns:xmpp-stanzas"});
|
||||||
|
_converse.connection._dataRecv(test_utils.createRequest(stanza));
|
||||||
|
|
||||||
|
// TODO: enter nickname
|
||||||
|
var $input = view.$el.find('input.new-chatroom-nick');
|
||||||
|
$input.val('nicky').parents('form').submit();
|
||||||
|
|
||||||
|
expect(view.join).toHaveBeenCalled();
|
||||||
|
|
||||||
|
// The user has just entered the room (because join was called)
|
||||||
|
// and receives their own presence from the server.
|
||||||
|
// See example 24:
|
||||||
|
// http://xmpp.org/extensions/xep-0045.html#enter-pres
|
||||||
|
//
|
||||||
|
/* <presence xmlns="jabber:client" to="jordie.langen@chat.example.org/converse.js-11659299" from="myroom@conference.chat.example.org/jc">
|
||||||
|
* <x xmlns="http://jabber.org/protocol/muc#user">
|
||||||
|
* <item jid="jordie.langen@chat.example.org/converse.js-11659299" affiliation="owner" role="moderator"/>
|
||||||
|
* <status code="110"/>
|
||||||
|
* <status code="201"/>
|
||||||
|
* </x>
|
||||||
|
* </presence>
|
||||||
|
*/
|
||||||
|
var presence = $pres({
|
||||||
|
to:'dummy@localhost/resource',
|
||||||
|
from:'lounge@localhost/thirdwitch',
|
||||||
|
id:'5025e055-036c-4bc5-a227-706e7e352053'
|
||||||
|
}).c('x').attrs({xmlns:'http://jabber.org/protocol/muc#user'})
|
||||||
|
.c('item').attrs({
|
||||||
|
affiliation: 'owner',
|
||||||
|
jid: 'dummy@localhost/resource',
|
||||||
|
role: 'moderator'
|
||||||
|
}).up()
|
||||||
|
.c('status').attrs({code:'110'}).up()
|
||||||
|
.c('status').attrs({code:'201'}).nodeTree;
|
||||||
|
|
||||||
|
_converse.connection._dataRecv(test_utils.createRequest(presence));
|
||||||
|
var info_text = view.$el.find('.chat-content .chat-info').text();
|
||||||
|
expect(info_text).toBe('A new room has been created');
|
||||||
|
|
||||||
|
// An instant room is created by saving the default configuratoin.
|
||||||
|
//
|
||||||
|
/* <iq to="myroom@conference.chat.example.org" type="set" xmlns="jabber:client" id="5025e055-036c-4bc5-a227-706e7e352053:sendIQ">
|
||||||
|
* <query xmlns="http://jabber.org/protocol/muc#owner"><x xmlns="jabber:x:data" type="submit"/></query>
|
||||||
|
* </iq>
|
||||||
|
*/
|
||||||
|
expect(sent_IQ.toLocaleString()).toBe(
|
||||||
|
"<iq to='lounge@localhost' type='set' xmlns='jabber:client' id='"+IQ_id+"'>"+
|
||||||
|
"<query xmlns='http://jabber.org/protocol/muc#owner'><x xmlns='jabber:x:data' type='submit'/>"+
|
||||||
|
"</query></iq>");
|
||||||
|
}));
|
||||||
|
});
|
||||||
|
|
||||||
describe("A Chat Room", function () {
|
describe("A Chat Room", function () {
|
||||||
|
|
||||||
it("can have spaces and special characters in its name", mock.initConverse(function (_converse) {
|
it("can have spaces and special characters in its name", mock.initConverse(function (_converse) {
|
||||||
|
|
|
@ -1203,19 +1203,25 @@
|
||||||
* Parameters:
|
* Parameters:
|
||||||
* (HTMLElement) form: The configuration form DOM element.
|
* (HTMLElement) form: The configuration form DOM element.
|
||||||
*/
|
*/
|
||||||
|
var deferred = new $.Deferred();
|
||||||
var that = this;
|
var that = this;
|
||||||
var $inputs = $(form).find(':input:not([type=button]):not([type=submit])'),
|
var $inputs = $(form).find(':input:not([type=button]):not([type=submit])'),
|
||||||
configArray = [];
|
configArray = [];
|
||||||
$inputs.each(function () {
|
$inputs.each(function () {
|
||||||
configArray.push(utils.webForm2xForm(this));
|
configArray.push(utils.webForm2xForm(this));
|
||||||
});
|
});
|
||||||
this.sendConfiguration(configArray);
|
this.sendConfiguration(
|
||||||
|
configArray,
|
||||||
|
deferred.resolve,
|
||||||
|
deferred.reject
|
||||||
|
);
|
||||||
this.$el.find('div.chatroom-form-container').hide(
|
this.$el.find('div.chatroom-form-container').hide(
|
||||||
function () {
|
function () {
|
||||||
$(this).remove();
|
$(this).remove();
|
||||||
that.$el.find('.chat-area').removeClass('hidden');
|
that.$el.find('.chat-area').removeClass('hidden');
|
||||||
that.$el.find('.occupants').removeClass('hidden');
|
that.$el.find('.occupants').removeClass('hidden');
|
||||||
});
|
});
|
||||||
|
return deferred.promise();
|
||||||
},
|
},
|
||||||
|
|
||||||
autoConfigureChatRoom: function (stanza) {
|
autoConfigureChatRoom: function (stanza) {
|
||||||
|
@ -1727,7 +1733,7 @@
|
||||||
*
|
*
|
||||||
* See http://xmpp.org/extensions/xep-0045.html#createroom-instant
|
* See http://xmpp.org/extensions/xep-0045.html#createroom-instant
|
||||||
*/
|
*/
|
||||||
this.sendConfiguration().then(this.getRoomFeatures.bind(this));
|
this.saveConfiguration().then(this.getRoomFeatures.bind(this));
|
||||||
},
|
},
|
||||||
|
|
||||||
onChatRoomPresence: function (pres) {
|
onChatRoomPresence: function (pres) {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user