Add an (incomplete) test for a received spoiler message

This commit is contained in:
JC Brand 2018-02-02 21:54:06 +01:00
parent b1ffb34b76
commit d6da643a7f
2 changed files with 53 additions and 22 deletions

View File

@ -9,9 +9,49 @@
} (this, function (jasmine, utils, mock, converse, test_utils) {
var _ = converse.env._;
var $msg = converse.env.$msg;
return describe("A spoiler message", function () {
it("can be received with a hint",
mock.initConverseWithPromises(
null, ['rosterGroupsFetched'], {},
function (done, _converse) {
test_utils.createContacts(_converse, 'current');
var sender_jid = mock.cur_names[0].replace(/ /g,'.').toLowerCase() + '@localhost';
/* <message to='romeo@montague.net/orchard' from='juliet@capulet.net/balcony' id='spoiler2'>
* <body>And at the end of the story, both of them die! It is so tragic!</body>
* <spoiler xmlns='urn:xmpp:spoiler:0'>Love story end</spoiler>
* </message>
*/
const spoiler_hint = "Love story end"
const spoiler = "And at the end of the story, both of them die! It is so tragic!";
var msg = $msg({
'xmlns': 'jabber:client',
'to': _converse.bare_jid,
'from': sender_jid,
'type': 'chat'
}).c('body').t(spoiler).up()
.c('spoiler', {
'xmlns': 'urn:xmpp:spoiler:0',
}).t(spoiler_hint)
.tree();
_converse.chatboxes.onMessage(msg);
var chatboxview = _converse.chatboxviews.get(sender_jid);
var message_content = chatboxview.el.querySelector('.chat-message .chat-msg-content');
// TODO add better assertions, currently only checks whether the
// text is in the DOM, not whether the spoiler is shown or
// not. Before updating this the spoiler rendering code needs
// improvement.
expect(_.includes(message_content.outerHTML, spoiler_hint)).toBeTruthy();
expect(_.includes(message_content.outerHTML, spoiler)).toBeTruthy();
done();
}));
it("can be sent without a hint",
mock.initConverseWithPromises(
null, ['rosterGroupsFetched'], {},

View File

@ -173,9 +173,9 @@
const msg = this.__super__.renderMessage.apply(this, arguments);
console.log(msg);
//Spoiler logic
//The value of the "spoiler" attribute, corresponds to the spoiler's hint.
if ("spoiler" in attrs) {
// Spoiler logic
// The value of the "spoiler" attribute, corresponds to the spoiler's hint.
if (attrs.is_spoiler) {
console.log('Spoiler in attrs \n');
const button = document.createElement("button");
const container = document.createElement("div");
@ -184,7 +184,7 @@
const contentHidden = document.createElement("div");
const messageContent = msg.querySelector(".chat-msg-content");
hint.appendChild(document.createTextNode(attrs.spoiler));
hint.appendChild(document.createTextNode(attrs.spoiler_hint));
for (var i = 0; i < messageContent.childNodes.length; i++){
contentHidden.append(messageContent.childNodes[i]);
@ -218,30 +218,21 @@
messageContent.append(document.createElement("br"));
messageContent.append(container);
}
return msg;
}
},
'ChatBox': {
'getMessageAttributes': function (message, delay, original_stanza) {
const { _converse } = this.__super__,
{ __ } = _converse;
const messageAttributes = this.__super__.getMessageAttributes.apply(this, arguments);
console.log(arguments);
//Check if message is spoiler
let spoiler = null, i = 0, found = false;
while (i < message.childNodes.length && !found) {
if (message.childNodes[i].nodeName == "spoiler") {
spoiler = message.childNodes[i];
found = true;
}
i++;
}
'ChatBox': {
getMessageAttributes (message, delay, original_stanza) {
const attrs = this.__super__.getMessageAttributes.apply(this, arguments);
const spoiler = message.querySelector(`spoiler[xmlns="${Strophe.NS.SPOILER}"]`)
if (spoiler) {
messageAttributes.spoiler = spoiler.textContent.length > 0 ? spoiler.textContent : __('Spoiler');
const { __ } = this.__super__._converse;
attrs.is_spoiler = true;
attrs.spoiler_hint = spoiler.textContent.length > 0 ? spoiler.textContent : __('Spoiler');
}
return messageAttributes;
return attrs;
}
}
},