occupants.js 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. /*global mock, converse */
  2. const { Strophe, u } = converse.env;
  3. describe("A MUC occupant", function () {
  4. it("does not stores the XEP-0421 occupant id if the feature isn't advertised",
  5. mock.initConverse([], {}, async function (_converse) {
  6. const muc_jid = 'lounge@montague.lit';
  7. const nick = 'romeo';
  8. const model = await mock.openAndEnterChatRoom(_converse, muc_jid, nick);
  9. // See example 21 https://xmpp.org/extensions/xep-0045.html#enter-pres
  10. const id = u.getUniqueId();
  11. const name = mock.chatroom_names[0];
  12. const presence = u.toStanza(`
  13. <presence
  14. from="${muc_jid}/${name}"
  15. id="${u.getUniqueId()}"
  16. to="${_converse.bare_jid}">
  17. <x xmlns="http://jabber.org/protocol/muc#user" />
  18. <occupant-id xmlns="urn:xmpp:occupant-id:0" id="${id}" />
  19. </presence>`);
  20. _converse.connection._dataRecv(mock.createRequest(presence));
  21. expect(model.getOccupantByNickname(name).get('occupant_id')).toBe(undefined);
  22. }));
  23. it("stores the XEP-0421 occupant id received from a presence stanza",
  24. mock.initConverse([], {}, async function (_converse) {
  25. const muc_jid = 'lounge@montague.lit';
  26. const nick = 'romeo';
  27. const features = [...mock.default_muc_features, Strophe.NS.OCCUPANTID];
  28. const model = await mock.openAndEnterChatRoom(_converse, muc_jid, nick, features);
  29. for (let i=0; i<mock.chatroom_names.length; i++) {
  30. // See example 21 https://xmpp.org/extensions/xep-0045.html#enter-pres
  31. const id = u.getUniqueId();
  32. const name = mock.chatroom_names[i];
  33. const presence = u.toStanza(`
  34. <presence
  35. from="${muc_jid}/${name}"
  36. id="${u.getUniqueId()}"
  37. to="${_converse.bare_jid}">
  38. <x xmlns="http://jabber.org/protocol/muc#user" />
  39. <occupant-id xmlns="urn:xmpp:occupant-id:0" id="${id}" />
  40. </presence>`);
  41. _converse.connection._dataRecv(mock.createRequest(presence));
  42. expect(model.getOccupantByNickname(name).get('occupant_id')).toBe(id);
  43. }
  44. expect(model.occupants.length).toBe(mock.chatroom_names.length + 1);
  45. }));
  46. it("will be added to a MUC message based on the XEP-0421 occupant id",
  47. mock.initConverse([], {}, async function (_converse) {
  48. const muc_jid = 'lounge@montague.lit';
  49. const nick = 'romeo';
  50. const features = [...mock.default_muc_features, Strophe.NS.OCCUPANTID];
  51. const model = await mock.openAndEnterChatRoom(_converse, muc_jid, nick, features);
  52. const occupant_jid = mock.cur_names[0].replace(/ /g,'.').toLowerCase() + '@montague.lit';
  53. const stanza = u.toStanza(`
  54. <message
  55. from='${muc_jid}/3rdwitch'
  56. id='hysf1v37'
  57. to='${_converse.bare_jid}'
  58. type='groupchat'>
  59. <body>Harpier cries: 'tis time, 'tis time.</body>
  60. <occupant-id xmlns="urn:xmpp:occupant-id:0" id="dd72603deec90a38ba552f7c68cbcc61bca202cd" />
  61. </message>`);
  62. _converse.connection._dataRecv(mock.createRequest(stanza));
  63. await u.waitUntil(() => model.messages.length);
  64. let message = model.messages.at(0);
  65. expect(message.get('occupant_id')).toBe("dd72603deec90a38ba552f7c68cbcc61bca202cd");
  66. expect(message.occupant).toBeUndefined();
  67. expect(message.getDisplayName()).toBe('3rdwitch');
  68. const presence = u.toStanza(`
  69. <presence
  70. from="${muc_jid}/thirdwitch"
  71. id="${u.getUniqueId()}"
  72. to="${_converse.bare_jid}">
  73. <x xmlns="http://jabber.org/protocol/muc#user">
  74. <item jid="${occupant_jid}" />
  75. </x>
  76. <occupant-id xmlns="urn:xmpp:occupant-id:0" id="dd72603deec90a38ba552f7c68cbcc61bca202cd" />
  77. </presence>`);
  78. _converse.connection._dataRecv(mock.createRequest(presence));
  79. const occupant = await u.waitUntil(() => model.getOccupantByNickname('thirdwitch'));
  80. expect(occupant.get('occupant_id')).toBe('dd72603deec90a38ba552f7c68cbcc61bca202cd');
  81. expect(model.occupants.findWhere({'occupant_id': "dd72603deec90a38ba552f7c68cbcc61bca202cd"})).toBe(occupant);
  82. message = model.messages.at(0);
  83. expect(occupant.get('nick')).toBe('thirdwitch');
  84. expect(message.occupant).toEqual(occupant);
  85. expect(message.getDisplayName()).toBe('thirdwitch');
  86. }));
  87. });