room_registration.js 5.6 KB

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