room_registration.js 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. /*global mock, converse, _ */
  2. const $iq = converse.env.$iq,
  3. Strophe = converse.env.Strophe,
  4. sizzle = converse.env.sizzle,
  5. u = converse.env.utils;
  6. describe("Chatrooms", function () {
  7. describe("The /register commmand", function () {
  8. it("allows you to register your nickname in a room",
  9. mock.initConverse(
  10. ['rosterGroupsFetched', 'chatBoxesFetched'], {'auto_register_muc_nickname': true},
  11. async function (done, _converse) {
  12. const muc_jid = 'coven@chat.shakespeare.lit';
  13. await mock.openAndEnterChatRoom(_converse, muc_jid, 'romeo')
  14. const view = _converse.chatboxviews.get(muc_jid);
  15. const textarea = view.el.querySelector('.chat-textarea')
  16. textarea.value = '/register';
  17. view.onKeyDown({
  18. target: textarea,
  19. preventDefault: function preventDefault () {},
  20. keyCode: 13
  21. });
  22. let stanza = await u.waitUntil(() => _.filter(
  23. _converse.connection.IQ_stanzas,
  24. iq => sizzle(`iq[to="${muc_jid}"][type="get"] query[xmlns="jabber:iq:register"]`, iq).length
  25. ).pop());
  26. expect(Strophe.serialize(stanza))
  27. .toBe(`<iq from="romeo@montague.lit/orchard" id="${stanza.getAttribute('id')}" to="coven@chat.shakespeare.lit" `+
  28. `type="get" xmlns="jabber:client">`+
  29. `<query xmlns="jabber:iq:register"/></iq>`);
  30. const result = $iq({
  31. 'from': view.model.get('jid'),
  32. 'id': stanza.getAttribute('id'),
  33. 'to': _converse.bare_jid,
  34. 'type': 'result',
  35. }).c('query', {'type': 'jabber:iq:register'})
  36. .c('x', {'xmlns': 'jabber:x:data', 'type': 'form'})
  37. .c('field', {
  38. 'label': 'Desired Nickname',
  39. 'type': 'text-single',
  40. 'var': 'muc#register_roomnick'
  41. }).c('required');
  42. _converse.connection._dataRecv(mock.createRequest(result));
  43. stanza = await u.waitUntil(() => _.filter(
  44. _converse.connection.IQ_stanzas,
  45. iq => sizzle(`iq[to="${muc_jid}"][type="set"] query[xmlns="jabber:iq:register"]`, iq).length
  46. ).pop());
  47. expect(Strophe.serialize(stanza)).toBe(
  48. `<iq from="romeo@montague.lit/orchard" id="${stanza.getAttribute('id')}" to="coven@chat.shakespeare.lit" type="set" xmlns="jabber:client">`+
  49. `<query xmlns="jabber:iq:register">`+
  50. `<x type="submit" xmlns="jabber:x:data">`+
  51. `<field var="FORM_TYPE"><value>http://jabber.org/protocol/muc#register</value></field>`+
  52. `<field var="muc#register_roomnick"><value>romeo</value></field>`+
  53. `</x>`+
  54. `</query>`+
  55. `</iq>`);
  56. done();
  57. }));
  58. });
  59. describe("The auto_register_muc_nickname option", function () {
  60. it("allows you to automatically register your nickname when joining a room",
  61. mock.initConverse(
  62. ['rosterGroupsFetched', 'chatBoxesFetched'], {'auto_register_muc_nickname': true},
  63. async function (done, _converse) {
  64. const muc_jid = 'coven@chat.shakespeare.lit';
  65. await mock.openAndEnterChatRoom(_converse, muc_jid, 'romeo');
  66. const view = _converse.chatboxviews.get(muc_jid);
  67. let stanza = await u.waitUntil(() => _.filter(
  68. _converse.connection.IQ_stanzas,
  69. iq => sizzle(`iq[to="coven@chat.shakespeare.lit"][type="get"] query[xmlns="jabber:iq:register"]`, iq).length
  70. ).pop());
  71. expect(Strophe.serialize(stanza))
  72. .toBe(`<iq from="romeo@montague.lit/orchard" id="${stanza.getAttribute('id')}" to="coven@chat.shakespeare.lit" `+
  73. `type="get" xmlns="jabber:client">`+
  74. `<query xmlns="jabber:iq:register"/></iq>`);
  75. const result = $iq({
  76. 'from': view.model.get('jid'),
  77. 'id': stanza.getAttribute('id'),
  78. 'to': _converse.bare_jid,
  79. 'type': 'result',
  80. }).c('query', {'type': 'jabber:iq:register'})
  81. .c('x', {'xmlns': 'jabber:x:data', 'type': 'form'})
  82. .c('field', {
  83. 'label': 'Desired Nickname',
  84. 'type': 'text-single',
  85. 'var': 'muc#register_roomnick'
  86. }).c('required');
  87. _converse.connection._dataRecv(mock.createRequest(result));
  88. stanza = await u.waitUntil(() => _.filter(
  89. _converse.connection.IQ_stanzas,
  90. iq => sizzle(`iq[to="coven@chat.shakespeare.lit"][type="set"] query[xmlns="jabber:iq:register"]`, iq).length
  91. ).pop());
  92. expect(Strophe.serialize(stanza)).toBe(
  93. `<iq from="romeo@montague.lit/orchard" id="${stanza.getAttribute('id')}" to="coven@chat.shakespeare.lit" type="set" xmlns="jabber:client">`+
  94. `<query xmlns="jabber:iq:register">`+
  95. `<x type="submit" xmlns="jabber:x:data">`+
  96. `<field var="FORM_TYPE"><value>http://jabber.org/protocol/muc#register</value></field>`+
  97. `<field var="muc#register_roomnick"><value>romeo</value></field>`+
  98. `</x>`+
  99. `</query>`+
  100. `</iq>`);
  101. done();
  102. }));
  103. });
  104. });