2
0

headline.js 6.9 KB

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