Move /me message tests to own file
Test mention inside a /me message
This commit is contained in:
parent
357b6406e2
commit
7ae2b48da9
|
@ -49,6 +49,7 @@ module.exports = function(config) {
|
|||
{ pattern: "spec/corrections.js", type: 'module' },
|
||||
{ pattern: "spec/receipts.js", type: 'module' },
|
||||
{ pattern: "spec/muc_messages.js", type: 'module' },
|
||||
{ pattern: "spec/me-messages.js", type: 'module' },
|
||||
{ pattern: "spec/mentions.js", type: 'module' },
|
||||
{ pattern: "spec/retractions.js", type: 'module' },
|
||||
{ pattern: "spec/muc.js", type: 'module' },
|
||||
|
|
|
@ -72,57 +72,6 @@ describe("Chatboxes", function () {
|
|||
}));
|
||||
|
||||
|
||||
it("supports the /me command", mock.initConverse(['rosterGroupsFetched'], {}, async function (done, _converse) {
|
||||
await mock.waitForRoster(_converse, 'current');
|
||||
await mock.waitUntilDiscoConfirmed(_converse, 'montague.lit', [], ['vcard-temp']);
|
||||
await u.waitUntil(() => _converse.xmppstatus.vcard.get('fullname'));
|
||||
await mock.openControlBox(_converse);
|
||||
expect(_converse.chatboxes.length).toEqual(1);
|
||||
const sender_jid = mock.cur_names[0].replace(/ /g,'.').toLowerCase() + '@montague.lit';
|
||||
let message = '/me is tired';
|
||||
const msg = $msg({
|
||||
from: sender_jid,
|
||||
to: _converse.connection.jid,
|
||||
type: 'chat',
|
||||
id: u.getUniqueId()
|
||||
}).c('body').t(message).up()
|
||||
.c('active', {'xmlns': 'http://jabber.org/protocol/chatstates'}).tree();
|
||||
|
||||
await _converse.handleMessageStanza(msg);
|
||||
const view = _converse.chatboxviews.get(sender_jid);
|
||||
await u.waitUntil(() => view.el.querySelector('.chat-msg__text'));
|
||||
expect(view.el.querySelectorAll('.chat-msg--action').length).toBe(1);
|
||||
expect(view.el.querySelector('.chat-msg__author').textContent.includes('**Mercutio')).toBeTruthy();
|
||||
expect(view.el.querySelector('.chat-msg__text').textContent).toBe('is tired');
|
||||
|
||||
message = '/me is as well';
|
||||
await mock.sendMessage(view, message);
|
||||
expect(view.el.querySelectorAll('.chat-msg--action').length).toBe(2);
|
||||
await u.waitUntil(() => sizzle('.chat-msg__author:last', view.el).pop().textContent.trim() === '**Romeo Montague');
|
||||
const last_el = sizzle('.chat-msg__text:last', view.el).pop();
|
||||
await u.waitUntil(() => last_el.textContent === 'is as well');
|
||||
expect(u.hasClass('chat-msg--followup', last_el)).toBe(false);
|
||||
|
||||
// Check that /me messages after a normal message don't
|
||||
// get the 'chat-msg--followup' class.
|
||||
message = 'This a normal message';
|
||||
await mock.sendMessage(view, message);
|
||||
const msg_txt_sel = 'converse-chat-message:last-child .chat-msg__text';
|
||||
await u.waitUntil(() => view.el.querySelector(msg_txt_sel).textContent.trim() === message);
|
||||
let el = view.el.querySelector('converse-chat-message:last-child .chat-msg__body');
|
||||
expect(u.hasClass('chat-msg--followup', el)).toBeFalsy();
|
||||
|
||||
message = '/me wrote a 3rd person message';
|
||||
await mock.sendMessage(view, message);
|
||||
await u.waitUntil(() => view.el.querySelector(msg_txt_sel).textContent.trim() === message.replace('/me ', ''));
|
||||
el = view.el.querySelector('converse-chat-message:last-child .chat-msg__body');
|
||||
expect(view.el.querySelectorAll('.chat-msg--action').length).toBe(3);
|
||||
|
||||
expect(sizzle('.chat-msg__text:last', view.el).pop().textContent).toBe('wrote a 3rd person message');
|
||||
expect(u.isVisible(sizzle('.chat-msg__author:last', view.el).pop())).toBeTruthy();
|
||||
done();
|
||||
}));
|
||||
|
||||
it("is created when you click on a roster item", mock.initConverse(
|
||||
['rosterGroupsFetched', 'chatBoxesFetched'], {},
|
||||
async function (done, _converse) {
|
||||
|
|
114
spec/me-messages.js
Normal file
114
spec/me-messages.js
Normal file
|
@ -0,0 +1,114 @@
|
|||
/*global mock, converse */
|
||||
|
||||
const { u, sizzle, $msg } = converse.env;
|
||||
|
||||
describe("A Groupchat Message", function () {
|
||||
|
||||
fit("supports the /me command",
|
||||
mock.initConverse(
|
||||
['rosterGroupsFetched'], {},
|
||||
async function (done, _converse) {
|
||||
|
||||
await mock.waitUntilDiscoConfirmed(_converse, 'montague.lit', [], ['vcard-temp']);
|
||||
await u.waitUntil(() => _converse.xmppstatus.vcard.get('fullname'));
|
||||
await mock.waitForRoster(_converse, 'current');
|
||||
await mock.openAndEnterChatRoom(_converse, 'lounge@montague.lit', 'romeo');
|
||||
const view = _converse.chatboxviews.get('lounge@montague.lit');
|
||||
if (!view.el.querySelectorAll('.chat-area').length) {
|
||||
view.renderChatArea();
|
||||
}
|
||||
let message = '/me is tired';
|
||||
const nick = mock.chatroom_names[0];
|
||||
let msg = $msg({
|
||||
'from': 'lounge@montague.lit/'+nick,
|
||||
'id': u.getUniqueId(),
|
||||
'to': 'romeo@montague.lit',
|
||||
'type': 'groupchat'
|
||||
}).c('body').t(message).tree();
|
||||
await view.model.handleMessageStanza(msg);
|
||||
await u.waitUntil(() => sizzle('.chat-msg:last .chat-msg__text', view.content).pop());
|
||||
expect(view.el.querySelector('.chat-msg__author').textContent.includes('**Dyon van de Wege')).toBeTruthy();
|
||||
expect(view.el.querySelector('.chat-msg__text').textContent.trim()).toBe('is tired');
|
||||
|
||||
message = '/me is as well';
|
||||
msg = $msg({
|
||||
from: 'lounge@montague.lit/Romeo Montague',
|
||||
id: u.getUniqueId(),
|
||||
to: 'romeo@montague.lit',
|
||||
type: 'groupchat'
|
||||
}).c('body').t(message).tree();
|
||||
await view.model.handleMessageStanza(msg);
|
||||
await u.waitUntil(() => view.el.querySelectorAll('.chat-msg').length === 2);
|
||||
expect(sizzle('.chat-msg__author:last', view.el).pop().textContent.includes('**Romeo Montague')).toBeTruthy();
|
||||
expect(sizzle('.chat-msg__text:last', view.el).pop().textContent.trim()).toBe('is as well');
|
||||
|
||||
// Check rendering of a mention inside a me message
|
||||
const msg_text = "/me mentions romeo";
|
||||
msg = $msg({
|
||||
from: 'lounge@montague.lit/gibson',
|
||||
id: u.getUniqueId(),
|
||||
to: 'romeo@montague.lit',
|
||||
type: 'groupchat'
|
||||
}).c('body').t(msg_text).up()
|
||||
.c('reference', {'xmlns':'urn:xmpp:reference:0', 'begin':'13', 'end':'19', 'type':'mention', 'uri':'xmpp:romeo@montague.lit'}).nodeTree;
|
||||
await view.model.handleMessageStanza(msg);
|
||||
await u.waitUntil(() => view.el.querySelectorAll('.chat-msg__text').length === 3);
|
||||
await u.waitUntil(() => sizzle('.chat-msg__text:last', view.el).pop().innerHTML.replace(/<!---->/g, '') ===
|
||||
'mentions <span class="mention mention--self badge badge-info">romeo</span>');
|
||||
done();
|
||||
}));
|
||||
});
|
||||
|
||||
describe("A Message", function () {
|
||||
|
||||
it("supports the /me command", mock.initConverse(['rosterGroupsFetched'], {}, async function (done, _converse) {
|
||||
await mock.waitForRoster(_converse, 'current');
|
||||
await mock.waitUntilDiscoConfirmed(_converse, 'montague.lit', [], ['vcard-temp']);
|
||||
await u.waitUntil(() => _converse.xmppstatus.vcard.get('fullname'));
|
||||
await mock.openControlBox(_converse);
|
||||
expect(_converse.chatboxes.length).toEqual(1);
|
||||
const sender_jid = mock.cur_names[0].replace(/ /g,'.').toLowerCase() + '@montague.lit';
|
||||
let message = '/me is tired';
|
||||
const msg = $msg({
|
||||
from: sender_jid,
|
||||
to: _converse.connection.jid,
|
||||
type: 'chat',
|
||||
id: u.getUniqueId()
|
||||
}).c('body').t(message).up()
|
||||
.c('active', {'xmlns': 'http://jabber.org/protocol/chatstates'}).tree();
|
||||
|
||||
await _converse.handleMessageStanza(msg);
|
||||
const view = _converse.chatboxviews.get(sender_jid);
|
||||
await u.waitUntil(() => view.el.querySelector('.chat-msg__text'));
|
||||
expect(view.el.querySelectorAll('.chat-msg--action').length).toBe(1);
|
||||
expect(view.el.querySelector('.chat-msg__author').textContent.includes('**Mercutio')).toBeTruthy();
|
||||
expect(view.el.querySelector('.chat-msg__text').textContent).toBe('is tired');
|
||||
|
||||
message = '/me is as well';
|
||||
await mock.sendMessage(view, message);
|
||||
expect(view.el.querySelectorAll('.chat-msg--action').length).toBe(2);
|
||||
await u.waitUntil(() => sizzle('.chat-msg__author:last', view.el).pop().textContent.trim() === '**Romeo Montague');
|
||||
const last_el = sizzle('.chat-msg__text:last', view.el).pop();
|
||||
await u.waitUntil(() => last_el.textContent === 'is as well');
|
||||
expect(u.hasClass('chat-msg--followup', last_el)).toBe(false);
|
||||
|
||||
// Check that /me messages after a normal message don't
|
||||
// get the 'chat-msg--followup' class.
|
||||
message = 'This a normal message';
|
||||
await mock.sendMessage(view, message);
|
||||
const msg_txt_sel = 'converse-chat-message:last-child .chat-msg__text';
|
||||
await u.waitUntil(() => view.el.querySelector(msg_txt_sel).textContent.trim() === message);
|
||||
let el = view.el.querySelector('converse-chat-message:last-child .chat-msg__body');
|
||||
expect(u.hasClass('chat-msg--followup', el)).toBeFalsy();
|
||||
|
||||
message = '/me wrote a 3rd person message';
|
||||
await mock.sendMessage(view, message);
|
||||
await u.waitUntil(() => view.el.querySelector(msg_txt_sel).textContent.trim() === message.replace('/me ', ''));
|
||||
el = view.el.querySelector('converse-chat-message:last-child .chat-msg__body');
|
||||
expect(view.el.querySelectorAll('.chat-msg--action').length).toBe(3);
|
||||
|
||||
expect(sizzle('.chat-msg__text:last', view.el).pop().textContent).toBe('wrote a 3rd person message');
|
||||
expect(u.isVisible(sizzle('.chat-msg__author:last', view.el).pop())).toBeTruthy();
|
||||
done();
|
||||
}));
|
||||
});
|
40
spec/muc.js
40
spec/muc.js
|
@ -1400,46 +1400,6 @@ describe("Groupchats", function () {
|
|||
done();
|
||||
}));
|
||||
|
||||
it("supports the /me command",
|
||||
mock.initConverse(
|
||||
['rosterGroupsFetched'], {},
|
||||
async function (done, _converse) {
|
||||
|
||||
await mock.waitUntilDiscoConfirmed(_converse, 'montague.lit', [], ['vcard-temp']);
|
||||
await u.waitUntil(() => _converse.xmppstatus.vcard.get('fullname'));
|
||||
await mock.waitForRoster(_converse, 'current');
|
||||
await mock.openAndEnterChatRoom(_converse, 'lounge@montague.lit', 'romeo');
|
||||
const view = _converse.chatboxviews.get('lounge@montague.lit');
|
||||
if (!view.el.querySelectorAll('.chat-area').length) {
|
||||
view.renderChatArea();
|
||||
}
|
||||
let message = '/me is tired';
|
||||
const nick = mock.chatroom_names[0];
|
||||
let msg = $msg({
|
||||
'from': 'lounge@montague.lit/'+nick,
|
||||
'id': u.getUniqueId(),
|
||||
'to': 'romeo@montague.lit',
|
||||
'type': 'groupchat'
|
||||
}).c('body').t(message).tree();
|
||||
await view.model.handleMessageStanza(msg);
|
||||
await u.waitUntil(() => sizzle('.chat-msg:last .chat-msg__text', view.content).pop());
|
||||
expect(_.includes(view.el.querySelector('.chat-msg__author').textContent, '**Dyon van de Wege')).toBeTruthy();
|
||||
expect(view.el.querySelector('.chat-msg__text').textContent.trim()).toBe('is tired');
|
||||
|
||||
message = '/me is as well';
|
||||
msg = $msg({
|
||||
from: 'lounge@montague.lit/Romeo Montague',
|
||||
id: u.getUniqueId(),
|
||||
to: 'romeo@montague.lit',
|
||||
type: 'groupchat'
|
||||
}).c('body').t(message).tree();
|
||||
await view.model.handleMessageStanza(msg);
|
||||
await u.waitUntil(() => view.el.querySelectorAll('.chat-msg').length === 2);
|
||||
expect(sizzle('.chat-msg__author:last', view.el).pop().textContent.includes('**Romeo Montague')).toBeTruthy();
|
||||
expect(sizzle('.chat-msg__text:last', view.el).pop().textContent.trim()).toBe('is as well');
|
||||
done();
|
||||
}));
|
||||
|
||||
it("can be configured if you're its owner",
|
||||
mock.initConverse(
|
||||
['rosterGroupsFetched', 'chatBoxesFetched'], {},
|
||||
|
|
Loading…
Reference in New Issue
Block a user