room_registration.js 6.2 KB

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