hats.js 3.7 KB

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