hats.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. /*global mock */
  2. const u = converse.env.utils;
  3. describe("A XEP-0317 MUC Hat", function () {
  4. it("can be included in a presence stanza",
  5. mock.initConverse(
  6. ['rosterGroupsFetched', 'chatBoxesFetched'], {},
  7. async function (done, _converse) {
  8. const muc_jid = 'lounge@montague.lit';
  9. await mock.openAndEnterChatRoom(_converse, muc_jid, 'romeo');
  10. const view = _converse.chatboxviews.get(muc_jid);
  11. const hat1_id = u.getUniqueId();
  12. const hat2_id = u.getUniqueId();
  13. _converse.connection._dataRecv(mock.createRequest(u.toStanza(`
  14. <presence from="${muc_jid}/Terry" id="${u.getUniqueId()}" to="${_converse.jid}">
  15. <x xmlns="http://jabber.org/protocol/muc#user">
  16. <item affiliation="member" role="participant"/>
  17. </x>
  18. <hats xmlns="xmpp:prosody.im/protocol/hats:1">
  19. <hat title="Teacher&apos;s Assistant" id="${hat1_id}"/>
  20. <hat title="Dark Mage" id="${hat2_id}"/>
  21. </hats>
  22. </presence>
  23. `)));
  24. await u.waitUntil(() => view.el.querySelector('.chat-content__notifications').textContent.trim() ===
  25. "romeo and Terry have entered the groupchat");
  26. let hats = view.model.getOccupant("Terry").get('hats');
  27. expect(hats.length).toBe(2);
  28. expect(hats.map(h => h.title).join(' ')).toBe("Teacher's Assistant Dark Mage");
  29. _converse.connection._dataRecv(mock.createRequest(u.toStanza(`
  30. <message type="groupchat" from="${muc_jid}/Terry" id="${u.getUniqueId()}" to="${_converse.jid}">
  31. <body>Hello world</body>
  32. </message>
  33. `)));
  34. const msg_el = await u.waitUntil(() => view.el.querySelector('.chat-msg'));
  35. let badges = Array.from(msg_el.querySelectorAll('.badge'));
  36. expect(badges.length).toBe(2);
  37. expect(badges.map(b => b.textContent.trim()).join(' ' )).toBe("Teacher's Assistant Dark Mage");
  38. const hat3_id = u.getUniqueId();
  39. _converse.connection._dataRecv(mock.createRequest(u.toStanza(`
  40. <presence from="${muc_jid}/Terry" id="${u.getUniqueId()}" to="${_converse.jid}">
  41. <x xmlns="http://jabber.org/protocol/muc#user">
  42. <item affiliation="member" role="participant"/>
  43. </x>
  44. <hats xmlns="xmpp:prosody.im/protocol/hats:1">
  45. <hat title="Teacher&apos;s Assistant" id="${hat1_id}"/>
  46. <hat title="Dark Mage" id="${hat2_id}"/>
  47. <hat title="Mad hatter" id="${hat3_id}"/>
  48. </hats>
  49. </presence>
  50. `)));
  51. await u.waitUntil(() => view.model.getOccupant("Terry").get('hats').length === 3);
  52. hats = view.model.getOccupant("Terry").get('hats');
  53. expect(hats.map(h => h.title).join(' ')).toBe("Teacher's Assistant Dark Mage Mad hatter");
  54. await u.waitUntil(() => view.el.querySelectorAll('.chat-msg .badge').length === 3);
  55. badges = Array.from(view.el.querySelectorAll('.chat-msg .badge'));
  56. expect(badges.map(b => b.textContent.trim()).join(' ' )).toBe("Teacher's Assistant Dark Mage Mad hatter");
  57. _converse.connection._dataRecv(mock.createRequest(u.toStanza(`
  58. <presence from="${muc_jid}/Terry" id="${u.getUniqueId()}" to="${_converse.jid}">
  59. <x xmlns="http://jabber.org/protocol/muc#user">
  60. <item affiliation="member" role="participant"/>
  61. </x>
  62. </presence>
  63. `)));
  64. await u.waitUntil(() => view.model.getOccupant("Terry").get('hats').length === 0);
  65. await u.waitUntil(() => view.el.querySelectorAll('.chat-msg .badge').length === 0);
  66. done();
  67. }));
  68. })