Commit 20706cb6 authored by JC Brand's avatar JC Brand

Expand the spoiler tests

parent f6db2a91
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
var _ = converse.env._; var _ = converse.env._;
var $msg = converse.env.$msg; var $msg = converse.env.$msg;
var u = converse.env.utils;
return describe("A spoiler message", function () { return describe("A spoiler message", function () {
...@@ -26,8 +27,8 @@ ...@@ -26,8 +27,8 @@
* <spoiler xmlns='urn:xmpp:spoiler:0'>Love story end</spoiler> * <spoiler xmlns='urn:xmpp:spoiler:0'>Love story end</spoiler>
* </message> * </message>
*/ */
const spoiler_hint = "Love story end" var spoiler_hint = "Love story end"
const spoiler = "And at the end of the story, both of them die! It is so tragic!"; var spoiler = "And at the end of the story, both of them die! It is so tragic!";
var msg = $msg({ var msg = $msg({
'xmlns': 'jabber:client', 'xmlns': 'jabber:client',
'to': _converse.bare_jid, 'to': _converse.bare_jid,
...@@ -40,15 +41,46 @@ ...@@ -40,15 +41,46 @@
.tree(); .tree();
_converse.chatboxes.onMessage(msg); _converse.chatboxes.onMessage(msg);
var chatboxview = _converse.chatboxviews.get(sender_jid); var view = _converse.chatboxviews.get(sender_jid);
var message_content = chatboxview.el.querySelector('.chat-message .chat-msg-content'); var message_content = view.el.querySelector('.chat-msg-content');
expect(message_content.textContent).toBe(spoiler);
// TODO add better assertions, currently only checks whether the var spoiler_hint_el = view.el.querySelector('.spoiler-hint');
// text is in the DOM, not whether the spoiler is shown or expect(spoiler_hint_el.textContent).toBe(spoiler_hint);
// not. Before updating this the spoiler rendering code needs done();
// improvement. }));
expect(_.includes(message_content.outerHTML, spoiler_hint)).toBeTruthy();
expect(_.includes(message_content.outerHTML, spoiler)).toBeTruthy(); it("can be received without 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>
*/
var 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',
}).tree();
_converse.chatboxes.onMessage(msg);
var view = _converse.chatboxviews.get(sender_jid);
var message_content = view.el.querySelector('.chat-msg-content');
expect(message_content.textContent).toBe(spoiler);
var spoiler_hint_el = view.el.querySelector('.spoiler-hint');
expect(spoiler_hint_el.textContent).toBe('');
done(); done();
})); }));
...@@ -65,6 +97,7 @@ ...@@ -65,6 +97,7 @@
var view = _converse.chatboxviews.get(contact_jid); var view = _converse.chatboxviews.get(contact_jid);
spyOn(view, 'onMessageSubmitted').and.callThrough(); spyOn(view, 'onMessageSubmitted').and.callThrough();
spyOn(_converse.connection, 'send');
var spoiler_toggle = view.el.querySelector('.toggle-spoiler-edit'); var spoiler_toggle = view.el.querySelector('.toggle-spoiler-edit');
spoiler_toggle.click(); spoiler_toggle.click();
...@@ -77,6 +110,39 @@ ...@@ -77,6 +110,39 @@
keyCode: 13 keyCode: 13
}); });
expect(view.onMessageSubmitted).toHaveBeenCalled(); expect(view.onMessageSubmitted).toHaveBeenCalled();
/* Test the XML stanza
*
* <message from="dummy@localhost/resource"
* to="max.frankfurter@localhost"
* type="chat"
* id="4547c38b-d98b-45a5-8f44-b4004dbc335e"
* xmlns="jabber:client">
* <body>This is the spoiler</body>
* <active xmlns="http://jabber.org/protocol/chatstates"/>
* <spoiler xmlns="urn:xmpp:spoiler:0"/>
* </message>"
*/
var stanza = _converse.connection.send.calls.argsFor(0)[0].tree();
var spoiler_el = stanza.querySelector('spoiler[xmlns="urn:xmpp:spoiler:0"]');
expect(_.isNull(spoiler_el)).toBeFalsy();
expect(spoiler_el.textContent).toBe('');
var body_el = stanza.querySelector('body');
expect(body_el.textContent).toBe('This is the spoiler');
/* Test the HTML spoiler message */
var spoiler_msg_el = view.el.querySelector('.chat-msg-content.spoiler');
expect(spoiler_msg_el.textContent).toBe('This is the spoiler');
expect(_.includes(spoiler_msg_el.classList, 'collapsed')).toBeTruthy();
spoiler_toggle = view.el.querySelector('.toggle-spoiler');
expect(spoiler_toggle.textContent).toBe('Show spoiler');
spoiler_toggle.click();
expect(_.includes(spoiler_msg_el.classList, 'collapsed')).toBeFalsy();
expect(spoiler_toggle.textContent).toBe('Hide spoiler');
spoiler_toggle.click();
expect(_.includes(spoiler_msg_el.classList, 'collapsed')).toBeTruthy();
done(); done();
})); }));
...@@ -96,10 +162,53 @@ ...@@ -96,10 +162,53 @@
var spoiler_toggle = view.el.querySelector('.toggle-spoiler-edit'); var spoiler_toggle = view.el.querySelector('.toggle-spoiler-edit');
spoiler_toggle.click(); spoiler_toggle.click();
var hint_input = view.el.querySelector('.chat-textarea-hint'); spyOn(view, 'onMessageSubmitted').and.callThrough();
spyOn(_converse.connection, 'send');
var textarea = view.el.querySelector('.chat-textarea');
textarea.value = 'This is the spoiler';
var hint_input = view.el.querySelector('.spoiler-hint');
hint_input.value = 'This is the hint';
view.keyPressed({
target: textarea,
preventDefault: _.noop,
keyCode: 13
});
expect(view.onMessageSubmitted).toHaveBeenCalled();
/* Test the XML stanza
*
* <message from="dummy@localhost/resource"
* to="max.frankfurter@localhost"
* type="chat"
* id="4547c38b-d98b-45a5-8f44-b4004dbc335e"
* xmlns="jabber:client">
* <body>This is the spoiler</body>
* <active xmlns="http://jabber.org/protocol/chatstates"/>
* <spoiler xmlns="urn:xmpp:spoiler:0">This is the hint</spoiler>
* </message>"
*/
var stanza = _converse.connection.send.calls.argsFor(0)[0].tree();
var spoiler_el = stanza.querySelector('spoiler[xmlns="urn:xmpp:spoiler:0"]');
expect(_.isNull(spoiler_el)).toBeFalsy();
expect(spoiler_el.textContent).toBe('This is the hint');
var body_el = stanza.querySelector('body');
expect(body_el.textContent).toBe('This is the spoiler');
// TODO /* Test the HTML spoiler message */
var spoiler_msg_el = view.el.querySelector('.chat-msg-content.spoiler');
expect(spoiler_msg_el.textContent).toBe('This is the spoiler');
expect(_.includes(spoiler_msg_el.classList, 'collapsed')).toBeTruthy();
spoiler_toggle = view.el.querySelector('.toggle-spoiler');
expect(spoiler_toggle.textContent).toBe('Show spoiler');
spoiler_toggle.click();
expect(_.includes(spoiler_msg_el.classList, 'collapsed')).toBeFalsy();
expect(spoiler_toggle.textContent).toBe('Hide spoiler');
spoiler_toggle.click();
expect(_.includes(spoiler_msg_el.classList, 'collapsed')).toBeTruthy();
done(); done();
})); }));
}); });
......
...@@ -171,7 +171,7 @@ ...@@ -171,7 +171,7 @@
'is_spoiler': !_.isNull(spoiler) 'is_spoiler': !_.isNull(spoiler)
}; };
if (spoiler) { if (spoiler) {
attrs.spoiler_hint = spoiler.textContent.length > 0 ? spoiler.textContent : __('Spoiler'); attrs.spoiler_hint = spoiler.textContent.length > 0 ? spoiler.textContent : '';
} }
return attrs; return attrs;
}, },
......
...@@ -853,6 +853,25 @@ ...@@ -853,6 +853,25 @@
} }
}, },
parseMessageForCommands (text) {
const match = text.replace(/^\s*/, "").match(/^\/(.*)\s*$/);
if (match) {
if (match[1] === "clear") {
this.clearMessages();
return true;
}
else if (match[1] === "help") {
const msgs = [
`<strong>/clear</strong>: ${__('Remove messages')}`,
`<strong>/me</strong>: ${__('Write in the third person')}`,
`<strong>/help</strong>: ${__('Show this menu')}`
];
this.showHelpMessages(msgs);
return true;
}
}
},
onMessageSubmitted (text, spoiler_hint) { onMessageSubmitted (text, spoiler_hint) {
/* This method gets called once the user has typed a message /* This method gets called once the user has typed a message
* and then pressed enter in a chat box. * and then pressed enter in a chat box.
...@@ -869,20 +888,8 @@ ...@@ -869,20 +888,8 @@
'error' 'error'
); );
} }
const match = text.replace(/^\s*/, "").match(/^\/(.*)\s*$/); if (this.parseMessageForCommands(text)) {
if (match) { return;
if (match[1] === "clear") {
return this.clearMessages();
}
else if (match[1] === "help") {
const msgs = [
`<strong>/clear</strong>: ${__('Remove messages')}`,
`<strong>/me</strong>: ${__('Write in the third person')}`,
`<strong>/help</strong>: ${__('Show this menu')}`
];
this.showHelpMessages(msgs);
return;
}
} }
const attrs = this.getOutgoingMessageAttributes(text, spoiler_hint) const attrs = this.getOutgoingMessageAttributes(text, spoiler_hint)
const message = this.model.messages.create(attrs); const message = this.model.messages.create(attrs);
...@@ -962,7 +969,7 @@ ...@@ -962,7 +969,7 @@
message = textarea.value; message = textarea.value;
let spoiler_hint; let spoiler_hint;
if (this.model.get('sending_spoiler')) { if (this.message_form_view.model.get('sending_spoiler')) {
const hint_el = this.el.querySelector('form.sendXMPPMessage input.spoiler-hint'); const hint_el = this.el.querySelector('form.sendXMPPMessage input.spoiler-hint');
spoiler_hint = hint_el.value; spoiler_hint = hint_el.value;
hint_el.value = ''; hint_el.value = '';
......
...@@ -283,23 +283,29 @@ ...@@ -283,23 +283,29 @@
return stanza; return stanza;
}, },
onMessageSubmitted (text) { parseMessageForCommands (text) {
const { _converse } = this.__super__; const { _converse } = this.__super__;
if (!_converse.connection.authenticated) {
return this.showHelpMessages(
['Sorry, the connection has been lost, '+
'and your message could not be sent'],
'error'
);
}
const match = text.replace(/^\s*/, "").match(/^\/(.*)\s*$/); const match = text.replace(/^\s*/, "").match(/^\/(.*)\s*$/);
if (match) { if (match) {
if ((_converse.allow_otr) && (match[1] === "endotr")) { if ((_converse.allow_otr) && (match[1] === "endotr")) {
return this.endOTR(); this.endOTR();
return true;
} else if ((_converse.allow_otr) && (match[1] === "otr")) { } else if ((_converse.allow_otr) && (match[1] === "otr")) {
return this.model.initiateOTR(); this.model.initiateOTR();
return true;
} }
} }
return this.__super__.parseMessageForCommands.apply(this, arguments);
},
onMessageSubmitted (text, spoiler_hint) {
const { _converse } = this.__super__;
if (!_converse.connection.authenticated) {
this.__super__.onMessageSubmitted.apply(this, arguments);
}
if (this.parseMessageForCommands(text)) {
return;
}
if (_.includes([UNVERIFIED, VERIFIED], this.model.get('otr_status'))) { if (_.includes([UNVERIFIED, VERIFIED], this.model.get('otr_status'))) {
// Off-the-record encryption is active // Off-the-record encryption is active
this.model.otr.sendMsg(text); this.model.otr.sendMsg(text);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment