Add tests for rendering of error messages.
This commit is contained in:
parent
e06a34a905
commit
be122af3ed
@ -6,7 +6,8 @@
|
|||||||
- Made requesting contacts more visible, by placing them at the top of the roster. [jcbrand]
|
- Made requesting contacts more visible, by placing them at the top of the roster. [jcbrand]
|
||||||
- `insertIntoPage` method of `ChatBoxView` has been renamed to `insertIntoDOM`,
|
- `insertIntoPage` method of `ChatBoxView` has been renamed to `insertIntoDOM`,
|
||||||
to make it the same as the method of `ChatRoomView`. [jcbrand]
|
to make it the same as the method of `ChatRoomView`. [jcbrand]
|
||||||
|
- Render error messages received from the server (for undelivered chat
|
||||||
|
messages). [jcbrand]
|
||||||
|
|
||||||
## 1.0.3 (2016-06-20)
|
## 1.0.3 (2016-06-20)
|
||||||
|
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
"test_utils"
|
"test_utils"
|
||||||
], factory);
|
], factory);
|
||||||
} (this, function ($, _, utils, mock, test_utils) {
|
} (this, function ($, _, utils, mock, test_utils) {
|
||||||
|
"use strict";
|
||||||
var $msg = converse_api.env.$msg;
|
var $msg = converse_api.env.$msg;
|
||||||
var Strophe = converse_api.env.Strophe;
|
var Strophe = converse_api.env.Strophe;
|
||||||
var moment = converse_api.env.moment;
|
var moment = converse_api.env.moment;
|
||||||
@ -459,6 +460,102 @@
|
|||||||
}.bind(converse));
|
}.bind(converse));
|
||||||
}.bind(converse));
|
}.bind(converse));
|
||||||
|
|
||||||
|
describe("and for which then an error message is received from the server", function () {
|
||||||
|
it("will have the error message displayed after itself", function () {
|
||||||
|
// TODO: what could still be done for error
|
||||||
|
// messages... if the <error> element has type
|
||||||
|
// "cancel", then we know the messages wasn't sent,
|
||||||
|
// and can give the user a nicer indication of
|
||||||
|
// that.
|
||||||
|
|
||||||
|
/* <message from="scotty@enterprise.com/converse.js-84843526"
|
||||||
|
* to="kirk@enterprise.com.com"
|
||||||
|
* type="chat"
|
||||||
|
* id="82bc02ce-9651-4336-baf0-fa04762ed8d2"
|
||||||
|
* xmlns="jabber:client">
|
||||||
|
* <body>yo</body>
|
||||||
|
* <active xmlns="http://jabber.org/protocol/chatstates"/>
|
||||||
|
* </message>
|
||||||
|
*/
|
||||||
|
var sender_jid = mock.cur_names[5].replace(/ /g,'.').toLowerCase() + '@localhost';
|
||||||
|
var fullname = converse.xmppstatus.get('fullname');
|
||||||
|
fullname = _.isEmpty(fullname)? converse.bare_jid: fullname;
|
||||||
|
converse_api.chats.open(sender_jid);
|
||||||
|
var msg_text = 'This message will not be sent, due to an error';
|
||||||
|
var view = converse.chatboxviews.get(sender_jid);
|
||||||
|
var message = view.model.messages.create({
|
||||||
|
'msgid': '82bc02ce-9651-4336-baf0-fa04762ed8d2',
|
||||||
|
'fullname': fullname,
|
||||||
|
'sender': 'me',
|
||||||
|
'time': moment().format(),
|
||||||
|
'message': msg_text
|
||||||
|
});
|
||||||
|
view.sendMessage(message);
|
||||||
|
var $chat_content = view.$el.find('.chat-content');
|
||||||
|
var msg_txt = $chat_content.find('.chat-message:last').find('.chat-msg-content').text();
|
||||||
|
expect(msg_txt).toEqual(msg_text);
|
||||||
|
|
||||||
|
// We send another message, for which an error will
|
||||||
|
// not be received, to test that errors appear
|
||||||
|
// after the relevant message.
|
||||||
|
msg_text = 'This message will be sent, and not receive an error';
|
||||||
|
message = view.model.messages.create({
|
||||||
|
'msgid': '6fcdeee3-000f-4ce8-a17e-9ce28f0ae104',
|
||||||
|
'fullname': fullname,
|
||||||
|
'sender': 'me',
|
||||||
|
'time': moment().format(),
|
||||||
|
'message': msg_text
|
||||||
|
});
|
||||||
|
view.sendMessage(message);
|
||||||
|
msg_txt = $chat_content.find('.chat-message:last').find('.chat-msg-content').text();
|
||||||
|
expect(msg_txt).toEqual(msg_text);
|
||||||
|
|
||||||
|
/* <message xmlns="jabber:client"
|
||||||
|
* to="scotty@enterprise.com/converse.js-84843526"
|
||||||
|
* type="error"
|
||||||
|
* id="82bc02ce-9651-4336-baf0-fa04762ed8d2"
|
||||||
|
* from="kirk@enterprise.com.com">
|
||||||
|
* <error type="cancel">
|
||||||
|
* <remote-server-not-found xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/>
|
||||||
|
* <text xmlns="urn:ietf:params:xml:ns:xmpp-stanzas">Server-to-server connection failed: Connecting failed: connection timeout</text>
|
||||||
|
* </error>
|
||||||
|
* </message>
|
||||||
|
*/
|
||||||
|
var error_txt = 'Server-to-server connection failed: Connecting failed: connection timeout';
|
||||||
|
var stanza = $msg({
|
||||||
|
'to': converse.connection.jid,
|
||||||
|
'type':'error',
|
||||||
|
'id':'82bc02ce-9651-4336-baf0-fa04762ed8d2',
|
||||||
|
'from': sender_jid
|
||||||
|
})
|
||||||
|
.c('error', {'type': 'cancel'})
|
||||||
|
.c('remote-server-not-found', { 'xmlns': "urn:ietf:params:xml:ns:xmpp-stanzas" }).up()
|
||||||
|
.c('text', { 'xmlns': "urn:ietf:params:xml:ns:xmpp-stanzas" })
|
||||||
|
.t('Server-to-server connection failed: Connecting failed: connection timeout');
|
||||||
|
converse.connection._dataRecv(test_utils.createRequest(stanza));
|
||||||
|
expect($chat_content.find('.chat-error').text()).toEqual(error_txt);
|
||||||
|
|
||||||
|
/* Incoming error messages that are not tied to a
|
||||||
|
* certain show message (via the msgid attribute),
|
||||||
|
* are not shown at all. The reason for this is
|
||||||
|
* that we may get error messages for chat state
|
||||||
|
* notifications as well.
|
||||||
|
*/
|
||||||
|
stanza = $msg({
|
||||||
|
'to': converse.connection.jid,
|
||||||
|
'type':'error',
|
||||||
|
'id':'some-other-unused-id',
|
||||||
|
'from': sender_jid
|
||||||
|
})
|
||||||
|
.c('error', {'type': 'cancel'})
|
||||||
|
.c('remote-server-not-found', { 'xmlns': "urn:ietf:params:xml:ns:xmpp-stanzas" }).up()
|
||||||
|
.c('text', { 'xmlns': "urn:ietf:params:xml:ns:xmpp-stanzas" })
|
||||||
|
.t('Server-to-server connection failed: Connecting failed: connection timeout');
|
||||||
|
converse.connection._dataRecv(test_utils.createRequest(stanza));
|
||||||
|
expect($chat_content.find('.chat-error').length).toEqual(1);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
it("will cause the chat area to be scrolled down only if it was at the bottom already", function () {
|
it("will cause the chat area to be scrolled down only if it was at the bottom already", function () {
|
||||||
var message = 'This message is received while the chat area is scrolled up';
|
var message = 'This message is received while the chat area is scrolled up';
|
||||||
var sender_jid = mock.cur_names[0].replace(/ /g,'.').toLowerCase() + '@localhost';
|
var sender_jid = mock.cur_names[0].replace(/ /g,'.').toLowerCase() + '@localhost';
|
||||||
|
@ -369,7 +369,7 @@
|
|||||||
handleErrorMessage: function (message) {
|
handleErrorMessage: function (message) {
|
||||||
var $message = $('[data-msgid='+message.get('msgid')+']');
|
var $message = $('[data-msgid='+message.get('msgid')+']');
|
||||||
if ($message.length) {
|
if ($message.length) {
|
||||||
$message.after($('<div class="chat-error"></div>').text(message.get('message')));
|
$message.after($('<div class="chat-info chat-error"></div>').text(message.get('message')));
|
||||||
this.scrollDown();
|
this.scrollDown();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
Loading…
Reference in New Issue
Block a user