headline.js 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. /*global mock, converse, _ */
  2. describe("A headlines box", function () {
  3. it("will not open nor display non-headline messages",
  4. mock.initConverse(
  5. ['rosterGroupsFetched', 'chatBoxesFetched'], {}, function (done, _converse) {
  6. const { $msg } = converse.env;
  7. /* XMPP spam message:
  8. *
  9. * <message xmlns="jabber:client"
  10. * to="romeo@montague.lit"
  11. * type="chat"
  12. * from="gapowa20102106@rds-rostov.ru/Adium">
  13. * <nick xmlns="http://jabber.org/protocol/nick">-wwdmz</nick>
  14. * <body>SORRY FOR THIS ADVERT</body
  15. * </message
  16. */
  17. const stanza = $msg({
  18. 'xmlns': 'jabber:client',
  19. 'to': 'romeo@montague.lit',
  20. 'type': 'chat',
  21. 'from': 'gapowa20102106@rds-rostov.ru/Adium',
  22. })
  23. .c('nick', {'xmlns': "http://jabber.org/protocol/nick"}).t("-wwdmz").up()
  24. .c('body').t('SORRY FOR THIS ADVERT');
  25. _converse.connection._dataRecv(mock.createRequest(stanza));
  26. expect(_converse.api.headlines.get().length === 0);
  27. done();
  28. }));
  29. it("will open and display headline messages", mock.initConverse(
  30. ['rosterGroupsFetched'], {}, async function (done, _converse) {
  31. const { u, $msg} = converse.env;
  32. /* <message from='notify.example.com'
  33. * to='romeo@im.example.com'
  34. * type='headline'
  35. * xml:lang='en'>
  36. * <subject>SIEVE</subject>
  37. * <body>&lt;juliet@example.com&gt; You got mail.</body>
  38. * <x xmlns='jabber:x:oob'>
  39. * <url>
  40. * imap://romeo@example.com/INBOX;UIDVALIDITY=385759043/;UID=18
  41. * </url>
  42. * </x>
  43. * </message>
  44. */
  45. const stanza = $msg({
  46. 'type': 'headline',
  47. 'from': 'notify.example.com',
  48. 'to': 'romeo@montague.lit',
  49. 'xml:lang': 'en'
  50. })
  51. .c('subject').t('SIEVE').up()
  52. .c('body').t('&lt;juliet@example.com&gt; You got mail.').up()
  53. .c('x', {'xmlns': 'jabber:x:oob'})
  54. .c('url').t('imap://romeo@example.com/INBOX;UIDVALIDITY=385759043/;UID=18');
  55. _converse.connection._dataRecv(mock.createRequest(stanza));
  56. await u.waitUntil(() => _converse.chatboxviews.keys().includes('notify.example.com'));
  57. const view = _converse.chatboxviews.get('notify.example.com');
  58. expect(view.model.get('show_avatar')).toBeFalsy();
  59. expect(view.el.querySelector('img.avatar')).toBe(null);
  60. done();
  61. }));
  62. it("will show headline messages in the controlbox", mock.initConverse(
  63. ['rosterGroupsFetched'], {}, async function (done, _converse) {
  64. const { u, $msg} = converse.env;
  65. /* <message from='notify.example.com'
  66. * to='romeo@im.example.com'
  67. * type='headline'
  68. * xml:lang='en'>
  69. * <subject>SIEVE</subject>
  70. * <body>&lt;juliet@example.com&gt; You got mail.</body>
  71. * <x xmlns='jabber:x:oob'>
  72. * <url>
  73. * imap://romeo@example.com/INBOX;UIDVALIDITY=385759043/;UID=18
  74. * </url>
  75. * </x>
  76. * </message>
  77. */
  78. const stanza = $msg({
  79. 'type': 'headline',
  80. 'from': 'notify.example.com',
  81. 'to': 'romeo@montague.lit',
  82. 'xml:lang': 'en'
  83. })
  84. .c('subject').t('SIEVE').up()
  85. .c('body').t('&lt;juliet@example.com&gt; You got mail.').up()
  86. .c('x', {'xmlns': 'jabber:x:oob'})
  87. .c('url').t('imap://romeo@example.com/INBOX;UIDVALIDITY=385759043/;UID=18');
  88. _converse.connection._dataRecv(mock.createRequest(stanza));
  89. const view = _converse.chatboxviews.get('controlbox');
  90. await u.waitUntil(() => view.el.querySelectorAll(".open-headline").length);
  91. expect(view.el.querySelectorAll('.open-headline').length).toBe(1);
  92. expect(view.el.querySelector('.open-headline').text).toBe('notify.example.com');
  93. done();
  94. }));
  95. it("will remove headline messages from the controlbox if closed", mock.initConverse(
  96. ['rosterGroupsFetched'], {}, async function (done, _converse) {
  97. const { u, $msg} = converse.env;
  98. await mock.openControlBox(_converse);
  99. /* <message from='notify.example.com'
  100. * to='romeo@im.example.com'
  101. * type='headline'
  102. * xml:lang='en'>
  103. * <subject>SIEVE</subject>
  104. * <body>&lt;juliet@example.com&gt; You got mail.</body>
  105. * <x xmlns='jabber:x:oob'>
  106. * <url>
  107. * imap://romeo@example.com/INBOX;UIDVALIDITY=385759043/;UID=18
  108. * </url>
  109. * </x>
  110. * </message>
  111. */
  112. const stanza = $msg({
  113. 'type': 'headline',
  114. 'from': 'notify.example.com',
  115. 'to': 'romeo@montague.lit',
  116. 'xml:lang': 'en'
  117. })
  118. .c('subject').t('SIEVE').up()
  119. .c('body').t('&lt;juliet@example.com&gt; You got mail.').up()
  120. .c('x', {'xmlns': 'jabber:x:oob'})
  121. .c('url').t('imap://romeo@example.com/INBOX;UIDVALIDITY=385759043/;UID=18');
  122. _converse.connection._dataRecv(mock.createRequest(stanza));
  123. const cbview = _converse.chatboxviews.get('controlbox');
  124. await u.waitUntil(() => cbview.el.querySelectorAll(".open-headline").length);
  125. const hlview = _converse.chatboxviews.get('notify.example.com');
  126. await u.isVisible(hlview.el);
  127. const close_el = await u.waitUntil(() => hlview.el.querySelector('.close-chatbox-button'));
  128. close_el.click();
  129. await u.waitUntil(() => cbview.el.querySelectorAll(".open-headline").length === 0);
  130. expect(cbview.el.querySelectorAll('.open-headline').length).toBe(0);
  131. done();
  132. }));
  133. it("will not show a headline messages from a full JID if allow_non_roster_messaging is false",
  134. mock.initConverse(
  135. ['rosterGroupsFetched', 'chatBoxesFetched'], {}, function (done, _converse) {
  136. const { $msg } = converse.env;
  137. _converse.allow_non_roster_messaging = false;
  138. const stanza = $msg({
  139. 'type': 'headline',
  140. 'from': 'andre5114@jabber.snc.ru/Spark',
  141. 'to': 'romeo@montague.lit',
  142. 'xml:lang': 'en'
  143. })
  144. .c('nick').t('gpocy').up()
  145. .c('body').t('Здравствуйте друзья');
  146. _converse.connection._dataRecv(mock.createRequest(stanza));
  147. expect(_.without('controlbox', _converse.chatboxviews.keys()).length).toBe(0);
  148. done();
  149. }));
  150. });