converse.js
Version:
Browser based XMPP chat client
104 lines (90 loc) • 4.94 kB
JavaScript
const { stx, u } = converse.env;
describe('An unsaved Contact', function () {
it(
'is shown upon receiving a message',
mock.initConverse([], {}, async function (_converse) {
const { api } = _converse;
await mock.waitUntilBlocklistInitialized(_converse);
await mock.waitForRoster(_converse, 'current', 0);
await mock.openControlBox(_converse);
const sender_jid = mock.cur_names[0].replace(/ /g, '.').toLowerCase() + '@montague.lit';
const msg = stx`
<message xmlns='jabber:client'
id='${api.connection.get().getUniqueId()}'
to='${_converse.bare_jid}'
from='${sender_jid}'
type='chat'>
<body>Hello</body>
</message>`;
await _converse.handleMessageStanza(msg);
const rosterview = document.querySelector('converse-roster');
await u.waitUntil(() => rosterview.querySelectorAll(`ul[data-group="Unsaved contacts"] li .open-chat`).length);
expect(rosterview.querySelectorAll(`ul[data-group="Unsaved contacts"] li .open-chat`).length).toBe(1);
const el = rosterview.querySelector(`ul[data-group="Unsaved contacts"] li .contact-name`);
expect(el.textContent).toBe('Mercutio');
})
);
it(
'is shown upon receiving a message to a previously removed contact',
mock.initConverse([], { lazy_load_vcards: false }, async function (_converse) {
const { api } = _converse;
await mock.waitUntilBlocklistInitialized(_converse);
await mock.waitForRoster(_converse, 'current', 1);
await mock.openControlBox(_converse);
const sender_jid = mock.cur_names[0].replace(/ /g, '.').toLowerCase() + '@montague.lit';
let msg = stx`
<message xmlns='jabber:client'
id='${api.connection.get().getUniqueId()}'
to='${_converse.bare_jid}'
from='${sender_jid}'
type='chat'>
<body>Hello</body>
</message>`;
await _converse.handleMessageStanza(msg);
spyOn(_converse.api, 'confirm').and.returnValue(Promise.resolve(true));
const rosterview = document.querySelector('converse-roster');
rosterview.querySelector(`.remove-xmpp-contact`).click();
expect(_converse.api.confirm).toHaveBeenCalled();
msg = stx`
<message xmlns='jabber:client'
id='${api.connection.get().getUniqueId()}'
to='${_converse.bare_jid}'
from='${sender_jid}'
type='chat'>
<body>Why did you remove me?</body>
</message>`;
await _converse.handleMessageStanza(msg);
await u.waitUntil(() => rosterview.querySelectorAll(`ul[data-group="Unsaved contacts"] li .open-chat`).length);
expect(rosterview.querySelectorAll(`ul[data-group="Unsaved contacts"] li .open-chat`).length).toBe(1);
const el = rosterview.querySelector(`ul[data-group="Unsaved contacts"] li .contact-name`);
expect(el.textContent).toBe('Mercutio');
})
);
it(
'is removed again when the chat is closed',
mock.initConverse([], {}, async function (_converse) {
const { api } = _converse;
await mock.waitUntilBlocklistInitialized(_converse);
await mock.waitForRoster(_converse, 'current', 0);
await mock.openControlBox(_converse);
const sender_jid = mock.cur_names[0].replace(/ /g, '.').toLowerCase() + '@montague.lit';
const msg = stx`
<message xmlns='jabber:client'
id='${api.connection.get().getUniqueId()}'
to='${_converse.bare_jid}'
from='${sender_jid}'
type='chat'>
<body>Hello</body>
</message>`;
await _converse.handleMessageStanza(msg);
const rosterview = document.querySelector('converse-roster');
await u.waitUntil(() => rosterview.querySelectorAll(`ul[data-group="Unsaved contacts"] li .open-chat`).length);
expect(rosterview.querySelectorAll(`ul[data-group="Unsaved contacts"] li .open-chat`).length).toBe(1);
const el = rosterview.querySelector(`ul[data-group="Unsaved contacts"] li .contact-name`);
expect(el.textContent).toBe('Mercutio');
const chat = await api.chats.get(sender_jid);
chat.close();
await u.waitUntil(() => rosterview.querySelectorAll(`ul[data-group="Unsaved contacts"] li`).length === 0);
})
);
});