|
@@ -19,6 +19,97 @@
|
|
|
|
|
|
describe("A Chat Message", function () {
|
|
|
|
|
|
+ it("can be sent as a correction",
|
|
|
+ mock.initConverseWithPromises(
|
|
|
+ null, ['rosterGroupsFetched'], {},
|
|
|
+ function (done, _converse) {
|
|
|
+
|
|
|
+ test_utils.createContacts(_converse, 'current', 1);
|
|
|
+ test_utils.openControlBox();
|
|
|
+ const contact_jid = mock.cur_names[0].replace(/ /g,'.').toLowerCase() + '@localhost';
|
|
|
+ test_utils.openChatBoxFor(_converse, contact_jid);
|
|
|
+
|
|
|
+ const view = _converse.chatboxviews.get(contact_jid);
|
|
|
+ const textarea = view.el.querySelector('textarea.chat-textarea');
|
|
|
+ expect(textarea.value).toBe('');
|
|
|
+ view.keyPressed({
|
|
|
+ target: textarea,
|
|
|
+ keyCode: 38 // Up arrow
|
|
|
+ });
|
|
|
+ expect(textarea.value).toBe('');
|
|
|
+
|
|
|
+ textarea.value = 'But soft, what light through yonder airlock breaks?';
|
|
|
+ view.keyPressed({
|
|
|
+ target: textarea,
|
|
|
+ preventDefault: _.noop,
|
|
|
+ keyCode: 13 // Enter
|
|
|
+ });
|
|
|
+ expect(view.el.querySelectorAll('.chat-msg').length).toBe(1);
|
|
|
+ expect(view.el.querySelector('.chat-msg-text').textContent)
|
|
|
+ .toBe('But soft, what light through yonder airlock breaks?');
|
|
|
+
|
|
|
+ const first_msg = view.model.messages.findWhere({'message': 'But soft, what light through yonder airlock breaks?'});
|
|
|
+ expect(textarea.value).toBe('');
|
|
|
+ view.keyPressed({
|
|
|
+ target: textarea,
|
|
|
+ keyCode: 38 // Up arrow
|
|
|
+ });
|
|
|
+ expect(textarea.value).toBe('But soft, what light through yonder airlock breaks?');
|
|
|
+ expect(view.model.messages.at(0).get('correcting')).toBe(true);
|
|
|
+ expect(view.el.querySelectorAll('.chat-msg').length).toBe(1);
|
|
|
+ expect(u.hasClass('correcting', view.el.querySelector('.chat-msg'))).toBe(true);
|
|
|
+
|
|
|
+ spyOn(_converse.connection, 'send');
|
|
|
+ textarea.value = 'But soft, what light through yonder window breaks?';
|
|
|
+ view.keyPressed({
|
|
|
+ target: textarea,
|
|
|
+ preventDefault: _.noop,
|
|
|
+ keyCode: 13 // Enter
|
|
|
+ });
|
|
|
+ expect(_converse.connection.send).toHaveBeenCalled();
|
|
|
+
|
|
|
+ const msg = _converse.connection.send.calls.all()[0].args[0];
|
|
|
+ expect(msg.toLocaleString())
|
|
|
+ .toBe(`<message from='dummy@localhost/resource' `+
|
|
|
+ `to='max.frankfurter@localhost' type='chat' id='${msg.nodeTree.getAttribute('id')}' `+
|
|
|
+ `xmlns='jabber:client'>`+
|
|
|
+ `<body>But soft, what light through yonder window breaks?</body>`+
|
|
|
+ `<active xmlns='http://jabber.org/protocol/chatstates'/>`+
|
|
|
+ `<replace xmlns='urn:xmpp:message-correct:0' id='${first_msg.get('msgid')}'/>`+
|
|
|
+ `</message>`);
|
|
|
+ expect(view.model.messages.models.length).toBe(1);
|
|
|
+ const corrected_message = view.model.messages.at(0);
|
|
|
+ expect(corrected_message.get('msgid')).toBe(first_msg.get('msgid'));
|
|
|
+ expect(corrected_message.get('correcting')).toBe(false);
|
|
|
+ expect(corrected_message.get('older_versions').length).toBe(1);
|
|
|
+ expect(corrected_message.get('older_versions')[0]).toBe('But soft, what light through yonder airlock breaks?');
|
|
|
+
|
|
|
+ expect(view.el.querySelectorAll('.chat-msg').length).toBe(1);
|
|
|
+ expect(u.hasClass('correcting', view.el.querySelector('.chat-msg'))).toBe(false);
|
|
|
+
|
|
|
+ // Test that pressing the down arrow cancels message correction
|
|
|
+ expect(textarea.value).toBe('');
|
|
|
+ view.keyPressed({
|
|
|
+ target: textarea,
|
|
|
+ keyCode: 38 // Up arrow
|
|
|
+ });
|
|
|
+ expect(textarea.value).toBe('But soft, what light through yonder window breaks?');
|
|
|
+ expect(view.model.messages.at(0).get('correcting')).toBe(true);
|
|
|
+ expect(view.el.querySelectorAll('.chat-msg').length).toBe(1);
|
|
|
+ expect(u.hasClass('correcting', view.el.querySelector('.chat-msg'))).toBe(true);
|
|
|
+ expect(textarea.value).toBe('But soft, what light through yonder window breaks?');
|
|
|
+ view.keyPressed({
|
|
|
+ target: textarea,
|
|
|
+ keyCode: 40 // Down arrow
|
|
|
+ });
|
|
|
+ expect(textarea.value).toBe('');
|
|
|
+ expect(view.model.messages.at(0).get('correcting')).toBe(false);
|
|
|
+ expect(view.el.querySelectorAll('.chat-msg').length).toBe(1);
|
|
|
+ expect(u.hasClass('correcting', view.el.querySelector('.chat-msg'))).toBe(false);
|
|
|
+ done();
|
|
|
+ }));
|
|
|
+
|
|
|
+
|
|
|
describe("when received from someone else", function () {
|
|
|
|
|
|
it("will open a chatbox and be displayed inside it",
|
|
@@ -136,70 +227,6 @@
|
|
|
});
|
|
|
}));
|
|
|
|
|
|
- it("can be sent as a correction",
|
|
|
- mock.initConverseWithPromises(
|
|
|
- null, ['rosterGroupsFetched'], {},
|
|
|
- function (done, _converse) {
|
|
|
-
|
|
|
- test_utils.createContacts(_converse, 'current', 1);
|
|
|
- test_utils.openControlBox();
|
|
|
- const message = 'This is a received message';
|
|
|
- const contact_jid = mock.cur_names[0].replace(/ /g,'.').toLowerCase() + '@localhost';
|
|
|
- test_utils.openChatBoxFor(_converse, contact_jid);
|
|
|
-
|
|
|
- const view = _converse.chatboxviews.get(contact_jid);
|
|
|
- const textarea = view.el.querySelector('textarea.chat-textarea');
|
|
|
- expect(textarea.value).toBe('');
|
|
|
- view.keyPressed({
|
|
|
- target: textarea,
|
|
|
- keyCode: 38
|
|
|
- });
|
|
|
- expect(textarea.value).toBe('');
|
|
|
-
|
|
|
- textarea.value = 'But soft, what light through yonder airlock breaks?';
|
|
|
- view.keyPressed({
|
|
|
- target: textarea,
|
|
|
- preventDefault: _.noop,
|
|
|
- keyCode: 13
|
|
|
- });
|
|
|
- expect(view.el.querySelectorAll('.chat-msg').length).toBe(1);
|
|
|
- expect(view.el.querySelector('.chat-msg-text').textContent)
|
|
|
- .toBe('But soft, what light through yonder airlock breaks?');
|
|
|
-
|
|
|
- const first_msg = view.model.messages.findWhere({'message': 'But soft, what light through yonder airlock breaks?'});
|
|
|
- expect(textarea.value).toBe('');
|
|
|
- view.keyPressed({
|
|
|
- target: textarea,
|
|
|
- keyCode: 38
|
|
|
- });
|
|
|
- expect(textarea.value).toBe('But soft, what light through yonder airlock breaks?');
|
|
|
-
|
|
|
- spyOn(_converse.connection, 'send');
|
|
|
- textarea.value = 'But soft, what light through yonder window breaks?';
|
|
|
- view.keyPressed({
|
|
|
- target: textarea,
|
|
|
- preventDefault: _.noop,
|
|
|
- keyCode: 13
|
|
|
- });
|
|
|
- expect(_converse.connection.send).toHaveBeenCalled();
|
|
|
-
|
|
|
- const msg = _converse.connection.send.calls.all()[0].args[0];
|
|
|
- expect(msg.toLocaleString())
|
|
|
- .toBe(`<message from='dummy@localhost/resource' `+
|
|
|
- `to='max.frankfurter@localhost' type='chat' id='${msg.nodeTree.getAttribute('id')}' `+
|
|
|
- `xmlns='jabber:client'>`+
|
|
|
- `<body>But soft, what light through yonder window breaks?</body>`+
|
|
|
- `<active xmlns='http://jabber.org/protocol/chatstates'/>`+
|
|
|
- `<replace xmlns='urn:xmpp:message-correct:0' id='${first_msg.get('msgid')}'/>`+
|
|
|
- `</message>`);
|
|
|
- expect(view.model.messages.models.length).toBe(1);
|
|
|
- const corrected_message = view.model.messages.at(0);
|
|
|
- expect(corrected_message.get('msgid')).toBe(first_msg.get('msgid'));
|
|
|
- expect(corrected_message.get('older_versions').length).toBe(1);
|
|
|
- expect(corrected_message.get('older_versions')[0]).toBe('But soft, what light through yonder airlock breaks?');
|
|
|
- done();
|
|
|
- }));
|
|
|
-
|
|
|
describe("when a chatbox is opened for someone who is not in the roster", function () {
|
|
|
|
|
|
it("the VCard for that user is fetched and the chatbox updated with the results",
|
|
@@ -1663,7 +1690,6 @@
|
|
|
function (done, _converse) {
|
|
|
|
|
|
let msg_id, view;
|
|
|
-
|
|
|
test_utils.openAndEnterChatRoom(_converse, 'lounge', 'localhost', 'dummy')
|
|
|
.then(() => {
|
|
|
const jid = 'lounge@localhost';
|
|
@@ -1733,5 +1759,98 @@
|
|
|
done();
|
|
|
});
|
|
|
}));
|
|
|
+
|
|
|
+ it("can be sent as a correction",
|
|
|
+ mock.initConverseWithPromises(
|
|
|
+ null, ['rosterGroupsFetched'], {},
|
|
|
+ function (done, _converse) {
|
|
|
+
|
|
|
+ let msg_id, view;
|
|
|
+ test_utils.openAndEnterChatRoom(_converse, 'lounge', 'localhost', 'dummy')
|
|
|
+ .then(() => {
|
|
|
+ const jid = 'lounge@localhost';
|
|
|
+ const room = _converse.api.rooms.get(jid);
|
|
|
+ view = _converse.chatboxviews.get(jid);
|
|
|
+
|
|
|
+ const textarea = view.el.querySelector('textarea.chat-textarea');
|
|
|
+ expect(textarea.value).toBe('');
|
|
|
+ view.keyPressed({
|
|
|
+ target: textarea,
|
|
|
+ keyCode: 38 // Up arrow
|
|
|
+ });
|
|
|
+ expect(textarea.value).toBe('');
|
|
|
+
|
|
|
+ textarea.value = 'But soft, what light through yonder airlock breaks?';
|
|
|
+ view.keyPressed({
|
|
|
+ target: textarea,
|
|
|
+ preventDefault: _.noop,
|
|
|
+ keyCode: 13 // Enter
|
|
|
+ });
|
|
|
+ expect(view.el.querySelectorAll('.chat-msg').length).toBe(1);
|
|
|
+ expect(view.el.querySelector('.chat-msg-text').textContent)
|
|
|
+ .toBe('But soft, what light through yonder airlock breaks?');
|
|
|
+
|
|
|
+ const first_msg = view.model.messages.findWhere({'message': 'But soft, what light through yonder airlock breaks?'});
|
|
|
+ expect(textarea.value).toBe('');
|
|
|
+ view.keyPressed({
|
|
|
+ target: textarea,
|
|
|
+ keyCode: 38 // Up arrow
|
|
|
+ });
|
|
|
+ expect(textarea.value).toBe('But soft, what light through yonder airlock breaks?');
|
|
|
+ expect(view.model.messages.at(0).get('correcting')).toBe(true);
|
|
|
+ expect(view.el.querySelectorAll('.chat-msg').length).toBe(1);
|
|
|
+ expect(u.hasClass('correcting', view.el.querySelector('.chat-msg'))).toBe(true);
|
|
|
+
|
|
|
+ spyOn(_converse.connection, 'send');
|
|
|
+ textarea.value = 'But soft, what light through yonder window breaks?';
|
|
|
+ view.keyPressed({
|
|
|
+ target: textarea,
|
|
|
+ preventDefault: _.noop,
|
|
|
+ keyCode: 13 // Enter
|
|
|
+ });
|
|
|
+ expect(_converse.connection.send).toHaveBeenCalled();
|
|
|
+
|
|
|
+ const msg = _converse.connection.send.calls.all()[0].args[0];
|
|
|
+ expect(msg.toLocaleString())
|
|
|
+ .toBe(`<message from='dummy@localhost/resource' `+
|
|
|
+ `to='lounge@localhost' type='groupchat' id='${msg.nodeTree.getAttribute('id')}' `+
|
|
|
+ `xmlns='jabber:client'>`+
|
|
|
+ `<body>But soft, what light through yonder window breaks?</body>`+
|
|
|
+ `<active xmlns='http://jabber.org/protocol/chatstates'/>`+
|
|
|
+ `<replace xmlns='urn:xmpp:message-correct:0' id='${first_msg.get('msgid')}'/>`+
|
|
|
+ `</message>`);
|
|
|
+
|
|
|
+ expect(view.model.messages.models.length).toBe(1);
|
|
|
+ const corrected_message = view.model.messages.at(0);
|
|
|
+ expect(corrected_message.get('msgid')).toBe(first_msg.get('msgid'));
|
|
|
+ expect(corrected_message.get('correcting')).toBe(false);
|
|
|
+ expect(corrected_message.get('older_versions').length).toBe(1);
|
|
|
+ expect(corrected_message.get('older_versions')[0]).toBe('But soft, what light through yonder airlock breaks?');
|
|
|
+
|
|
|
+ expect(view.el.querySelectorAll('.chat-msg').length).toBe(1);
|
|
|
+ expect(u.hasClass('correcting', view.el.querySelector('.chat-msg'))).toBe(false);
|
|
|
+
|
|
|
+ // Test that pressing the down arrow cancels message correction
|
|
|
+ expect(textarea.value).toBe('');
|
|
|
+ view.keyPressed({
|
|
|
+ target: textarea,
|
|
|
+ keyCode: 38 // Up arrow
|
|
|
+ });
|
|
|
+ expect(textarea.value).toBe('But soft, what light through yonder window breaks?');
|
|
|
+ expect(view.model.messages.at(0).get('correcting')).toBe(true);
|
|
|
+ expect(view.el.querySelectorAll('.chat-msg').length).toBe(1);
|
|
|
+ expect(u.hasClass('correcting', view.el.querySelector('.chat-msg'))).toBe(true);
|
|
|
+ expect(textarea.value).toBe('But soft, what light through yonder window breaks?');
|
|
|
+ view.keyPressed({
|
|
|
+ target: textarea,
|
|
|
+ keyCode: 40 // Down arrow
|
|
|
+ });
|
|
|
+ expect(textarea.value).toBe('');
|
|
|
+ expect(view.model.messages.at(0).get('correcting')).toBe(false);
|
|
|
+ expect(view.el.querySelectorAll('.chat-msg').length).toBe(1);
|
|
|
+ expect(u.hasClass('correcting', view.el.querySelector('.chat-msg'))).toBe(false);
|
|
|
+ done();
|
|
|
+ });
|
|
|
+ }));
|
|
|
});
|
|
|
}));
|