/*global mock */ describe("A headlines box", function () { it("will not open nor display non-headline messages", mock.initConverse( ['rosterGroupsFetched', 'chatBoxesFetched'], {}, function (done, _converse) { const { $msg } = converse.env; /* XMPP spam message: * * * -wwdmz * SORRY FOR THIS ADVERT * SIEVE * <juliet@example.com> You got mail. * * * imap://romeo@example.com/INBOX;UIDVALIDITY=385759043/;UID=18 * * * */ const stanza = $msg({ 'type': 'headline', 'from': 'notify.example.com', 'to': 'romeo@montague.lit', 'xml:lang': 'en' }) .c('subject').t('SIEVE').up() .c('body').t('<juliet@example.com> You got mail.').up() .c('x', {'xmlns': 'jabber:x:oob'}) .c('url').t('imap://romeo@example.com/INBOX;UIDVALIDITY=385759043/;UID=18'); _converse.connection._dataRecv(mock.createRequest(stanza)); await u.waitUntil(() => _converse.chatboxviews.keys().includes('notify.example.com')); const view = _converse.chatboxviews.get('notify.example.com'); expect(view.model.get('show_avatar')).toBeFalsy(); expect(view.el.querySelector('img.avatar')).toBe(null); done(); })); it("will show headline messages in the controlbox", mock.initConverse( ['rosterGroupsFetched'], {}, async function (done, _converse) { const { u, $msg} = converse.env; /* * SIEVE * <juliet@example.com> You got mail. * * * imap://romeo@example.com/INBOX;UIDVALIDITY=385759043/;UID=18 * * * */ const stanza = $msg({ 'type': 'headline', 'from': 'notify.example.com', 'to': 'romeo@montague.lit', 'xml:lang': 'en' }) .c('subject').t('SIEVE').up() .c('body').t('<juliet@example.com> You got mail.').up() .c('x', {'xmlns': 'jabber:x:oob'}) .c('url').t('imap://romeo@example.com/INBOX;UIDVALIDITY=385759043/;UID=18'); _converse.connection._dataRecv(mock.createRequest(stanza)); const view = _converse.chatboxviews.get('controlbox'); await u.waitUntil(() => view.el.querySelectorAll(".open-headline").length); expect(view.el.querySelectorAll('.open-headline').length).toBe(1); expect(view.el.querySelector('.open-headline').text).toBe('notify.example.com'); done(); })); it("will remove headline messages from the controlbox if closed", mock.initConverse( ['rosterGroupsFetched'], {}, async function (done, _converse) { const { u, $msg} = converse.env; await mock.openControlBox(_converse); /* * SIEVE * <juliet@example.com> You got mail. * * * imap://romeo@example.com/INBOX;UIDVALIDITY=385759043/;UID=18 * * * */ const stanza = $msg({ 'type': 'headline', 'from': 'notify.example.com', 'to': 'romeo@montague.lit', 'xml:lang': 'en' }) .c('subject').t('SIEVE').up() .c('body').t('<juliet@example.com> You got mail.').up() .c('x', {'xmlns': 'jabber:x:oob'}) .c('url').t('imap://romeo@example.com/INBOX;UIDVALIDITY=385759043/;UID=18'); _converse.connection._dataRecv(mock.createRequest(stanza)); const cbview = _converse.chatboxviews.get('controlbox'); await u.waitUntil(() => cbview.el.querySelectorAll(".open-headline").length); const hlview = _converse.chatboxviews.get('notify.example.com'); await u.isVisible(hlview.el); const close_el = await u.waitUntil(() => hlview.el.querySelector('.close-chatbox-button')); close_el.click(); await u.waitUntil(() => cbview.el.querySelectorAll(".open-headline").length === 0); expect(cbview.el.querySelectorAll('.open-headline').length).toBe(0); done(); })); it("will not show a headline messages from a full JID if allow_non_roster_messaging is false", mock.initConverse( ['rosterGroupsFetched', 'chatBoxesFetched'], {}, function (done, _converse) { const { $msg, _ } = converse.env; _converse.allow_non_roster_messaging = false; const stanza = $msg({ 'type': 'headline', 'from': 'andre5114@jabber.snc.ru/Spark', 'to': 'romeo@montague.lit', 'xml:lang': 'en' }) .c('nick').t('gpocy').up() .c('body').t('Здравствуйте друзья'); _converse.connection._dataRecv(mock.createRequest(stanza)); expect(_.without('controlbox', _converse.chatboxviews.keys()).length).toBe(0); done(); })); });