2020-04-22 13:11:48 +02:00
|
|
|
/*global mock */
|
2018-09-04 11:39:27 +02:00
|
|
|
|
2020-04-22 13:11:48 +02:00
|
|
|
const _ = converse.env._,
|
|
|
|
$iq = converse.env.$iq,
|
|
|
|
Strophe = converse.env.Strophe,
|
|
|
|
sizzle = converse.env.sizzle,
|
|
|
|
u = converse.env.utils;
|
2018-09-12 15:06:08 +02:00
|
|
|
|
2020-04-22 13:11:48 +02:00
|
|
|
describe("Chatrooms", function () {
|
2018-09-12 15:06:08 +02:00
|
|
|
|
|
|
|
|
2020-04-22 13:11:48 +02:00
|
|
|
describe("The /register commmand", function () {
|
2018-09-12 15:06:08 +02:00
|
|
|
|
2020-04-22 13:11:48 +02:00
|
|
|
it("allows you to register your nickname in a room",
|
|
|
|
mock.initConverse(
|
|
|
|
['rosterGroupsFetched', 'chatBoxesFetched'], {'auto_register_muc_nickname': true},
|
|
|
|
async function (done, _converse) {
|
2019-07-03 14:18:46 +02:00
|
|
|
|
2020-04-22 13:11:48 +02:00
|
|
|
const muc_jid = 'coven@chat.shakespeare.lit';
|
|
|
|
await mock.openAndEnterChatRoom(_converse, muc_jid, 'romeo')
|
|
|
|
const view = _converse.chatboxviews.get(muc_jid);
|
|
|
|
const textarea = view.el.querySelector('.chat-textarea')
|
|
|
|
textarea.value = '/register';
|
|
|
|
view.onKeyDown({
|
|
|
|
target: textarea,
|
|
|
|
preventDefault: function preventDefault () {},
|
|
|
|
keyCode: 13
|
|
|
|
});
|
|
|
|
let stanza = await u.waitUntil(() => _.filter(
|
|
|
|
_converse.connection.IQ_stanzas,
|
|
|
|
iq => sizzle(`iq[to="${muc_jid}"][type="get"] query[xmlns="jabber:iq:register"]`, iq).length
|
|
|
|
).pop());
|
|
|
|
expect(Strophe.serialize(stanza))
|
|
|
|
.toBe(`<iq from="romeo@montague.lit/orchard" id="${stanza.getAttribute('id')}" to="coven@chat.shakespeare.lit" `+
|
|
|
|
`type="get" xmlns="jabber:client">`+
|
|
|
|
`<query xmlns="jabber:iq:register"/></iq>`);
|
|
|
|
const result = $iq({
|
|
|
|
'from': view.model.get('jid'),
|
|
|
|
'id': stanza.getAttribute('id'),
|
|
|
|
'to': _converse.bare_jid,
|
|
|
|
'type': 'result',
|
|
|
|
}).c('query', {'type': 'jabber:iq:register'})
|
|
|
|
.c('x', {'xmlns': 'jabber:x:data', 'type': 'form'})
|
|
|
|
.c('field', {
|
|
|
|
'label': 'Desired Nickname',
|
|
|
|
'type': 'text-single',
|
|
|
|
'var': 'muc#register_roomnick'
|
|
|
|
}).c('required');
|
|
|
|
_converse.connection._dataRecv(mock.createRequest(result));
|
|
|
|
stanza = await u.waitUntil(() => _.filter(
|
|
|
|
_converse.connection.IQ_stanzas,
|
|
|
|
iq => sizzle(`iq[to="${muc_jid}"][type="set"] query[xmlns="jabber:iq:register"]`, iq).length
|
|
|
|
).pop());
|
|
|
|
|
|
|
|
expect(Strophe.serialize(stanza)).toBe(
|
|
|
|
`<iq from="romeo@montague.lit/orchard" id="${stanza.getAttribute('id')}" to="coven@chat.shakespeare.lit" type="set" xmlns="jabber:client">`+
|
|
|
|
`<query xmlns="jabber:iq:register">`+
|
|
|
|
`<x type="submit" xmlns="jabber:x:data">`+
|
|
|
|
`<field var="FORM_TYPE"><value>http://jabber.org/protocol/muc#register</value></field>`+
|
|
|
|
`<field var="muc#register_roomnick"><value>romeo</value></field>`+
|
|
|
|
`</x>`+
|
|
|
|
`</query>`+
|
|
|
|
`</iq>`);
|
|
|
|
done();
|
|
|
|
}));
|
2018-09-12 15:06:08 +02:00
|
|
|
|
2020-04-22 13:11:48 +02:00
|
|
|
});
|
2018-09-12 15:06:08 +02:00
|
|
|
|
2020-04-22 13:11:48 +02:00
|
|
|
describe("The auto_register_muc_nickname option", function () {
|
2018-09-04 11:39:27 +02:00
|
|
|
|
2020-04-22 13:11:48 +02:00
|
|
|
it("allows you to automatically register your nickname when joining a room",
|
|
|
|
mock.initConverse(
|
|
|
|
['rosterGroupsFetched', 'chatBoxesFetched'], {'auto_register_muc_nickname': true},
|
|
|
|
async function (done, _converse) {
|
2018-09-04 11:39:27 +02:00
|
|
|
|
2020-04-22 13:11:48 +02:00
|
|
|
const muc_jid = 'coven@chat.shakespeare.lit';
|
|
|
|
await mock.openAndEnterChatRoom(_converse, muc_jid, 'romeo');
|
|
|
|
const view = _converse.chatboxviews.get(muc_jid);
|
2019-07-01 10:44:59 +02:00
|
|
|
|
2020-04-22 13:11:48 +02:00
|
|
|
let stanza = await u.waitUntil(() => _.filter(
|
|
|
|
_converse.connection.IQ_stanzas,
|
|
|
|
iq => sizzle(`iq[to="coven@chat.shakespeare.lit"][type="get"] query[xmlns="jabber:iq:register"]`, iq).length
|
|
|
|
).pop());
|
2019-07-01 10:44:59 +02:00
|
|
|
|
2020-04-22 13:11:48 +02:00
|
|
|
expect(Strophe.serialize(stanza))
|
|
|
|
.toBe(`<iq from="romeo@montague.lit/orchard" id="${stanza.getAttribute('id')}" to="coven@chat.shakespeare.lit" `+
|
|
|
|
`type="get" xmlns="jabber:client">`+
|
|
|
|
`<query xmlns="jabber:iq:register"/></iq>`);
|
|
|
|
const result = $iq({
|
|
|
|
'from': view.model.get('jid'),
|
|
|
|
'id': stanza.getAttribute('id'),
|
|
|
|
'to': _converse.bare_jid,
|
|
|
|
'type': 'result',
|
|
|
|
}).c('query', {'type': 'jabber:iq:register'})
|
|
|
|
.c('x', {'xmlns': 'jabber:x:data', 'type': 'form'})
|
|
|
|
.c('field', {
|
|
|
|
'label': 'Desired Nickname',
|
|
|
|
'type': 'text-single',
|
|
|
|
'var': 'muc#register_roomnick'
|
|
|
|
}).c('required');
|
|
|
|
_converse.connection._dataRecv(mock.createRequest(result));
|
|
|
|
stanza = await u.waitUntil(() => _.filter(
|
|
|
|
_converse.connection.IQ_stanzas,
|
|
|
|
iq => sizzle(`iq[to="coven@chat.shakespeare.lit"][type="set"] query[xmlns="jabber:iq:register"]`, iq).length
|
|
|
|
).pop());
|
2019-07-01 10:44:59 +02:00
|
|
|
|
2020-04-22 13:11:48 +02:00
|
|
|
expect(Strophe.serialize(stanza)).toBe(
|
|
|
|
`<iq from="romeo@montague.lit/orchard" id="${stanza.getAttribute('id')}" to="coven@chat.shakespeare.lit" type="set" xmlns="jabber:client">`+
|
|
|
|
`<query xmlns="jabber:iq:register">`+
|
|
|
|
`<x type="submit" xmlns="jabber:x:data">`+
|
|
|
|
`<field var="FORM_TYPE"><value>http://jabber.org/protocol/muc#register</value></field>`+
|
|
|
|
`<field var="muc#register_roomnick"><value>romeo</value></field>`+
|
|
|
|
`</x>`+
|
|
|
|
`</query>`+
|
|
|
|
`</iq>`);
|
|
|
|
done();
|
|
|
|
}));
|
2018-09-04 11:39:27 +02:00
|
|
|
});
|
2020-04-22 12:10:39 +02:00
|
|
|
});
|