converse.js
Version:
Browser based XMPP chat client
55 lines (45 loc) • 2.65 kB
JavaScript
/*global mock, converse */
const { Strophe, u, stx, dayjs } = converse.env;
describe('A received chat message', function () {
beforeAll(() => jasmine.addMatchers({ toEqualStanza: jasmine.toEqualStanza }));
it(
'can be followed up with a deprecated retraction',
mock.initConverse(['chatBoxesFetched'], {}, async function (_converse) {
await mock.waitForRoster(_converse, 'current', 1);
const contact_jid = mock.cur_names[0].replace(/ /g, '.').toLowerCase() + '@montague.lit';
const view = await mock.openChatBoxFor(_converse, contact_jid);
const received_stanza = stx`
<message xmlns="jabber:client"
to="${_converse.bare_jid}"
type="chat"
id="29132ea0-0121-2897-b121-36638c259554"
from="${contact_jid}">
<body>😊</body>
<markable xmlns="urn:xmpp:chat-markers:0"/>
<origin-id xmlns="urn:xmpp:sid:0" id="29132ea0-0121-2897-b121-36638c259554"/>
<stanza-id xmlns="urn:xmpp:sid:0" id="kxViLhgbnNMcWv10" by="${_converse.bare_jid}"/>
</message>`;
_converse.api.connection.get()._dataRecv(mock.createRequest(received_stanza));
await u.waitUntil(() => view.model.messages.length === 1);
await u.waitUntil(() => view.querySelectorAll('.chat-msg').length === 1);
const retraction_stanza = stx`
<message id="${u.getUniqueId()}"
to="${_converse.bare_jid}"
from="${contact_jid}"
type="chat"
xmlns="jabber:client">
<apply-to id="29132ea0-0121-2897-b121-36638c259554" xmlns="urn:xmpp:fasten:0">
<retract xmlns="urn:xmpp:message-retract:0"/>
</apply-to>
</message>`;
_converse.api.connection.get()._dataRecv(mock.createRequest(retraction_stanza));
await u.waitUntil(() => view.querySelectorAll('.chat-msg--retracted').length === 1);
expect(view.model.messages.length).toBe(1);
const message = view.model.messages.at(0);
expect(message.get('retracted')).toBeTruthy();
expect(view.querySelectorAll('.chat-msg--retracted').length).toBe(1);
const msg_el = view.querySelector('.chat-msg--retracted .chat-msg__message .retraction');
expect(msg_el.firstElementChild.textContent.trim()).toBe('Mercutio has removed a message');
})
);
});