|
@@ -0,0 +1,109 @@
|
|
|
+/*global converse */
|
|
|
+(function (root, factory) {
|
|
|
+ define([
|
|
|
+ "jquery",
|
|
|
+ "underscore",
|
|
|
+ "mock",
|
|
|
+ "test_utils"
|
|
|
+ ], function ($, _, mock, test_utils) {
|
|
|
+ return factory($, _, mock, test_utils);
|
|
|
+ }
|
|
|
+ );
|
|
|
+} (this, function ($, _, mock, test_utils) {
|
|
|
+ "use strict";
|
|
|
+ var $msg = converse_api.env.$msg;
|
|
|
+
|
|
|
+ describe("Notifications", function () {
|
|
|
+ // Implement the protocol defined in https://xmpp.org/extensions/xep-0313.html#config
|
|
|
+ beforeEach(function () {
|
|
|
+ runs(function () {
|
|
|
+ test_utils.closeAllChatBoxes();
|
|
|
+ test_utils.createContacts('current');
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+ describe("When show_desktop_notifications is set to true", function () {
|
|
|
+ describe("And the desktop is not focused", function () {
|
|
|
+ describe("an HTML5 Notification", function () {
|
|
|
+
|
|
|
+ it("is shown when a new message is received", function () {
|
|
|
+ // TODO: not yet testing show_desktop_notifications setting
|
|
|
+ spyOn(converse, 'showMessageNotification');
|
|
|
+ spyOn(converse, 'areDesktopNotificationsEnabled').andReturn(true);
|
|
|
+
|
|
|
+ var message = 'This message will show a desktop notification';
|
|
|
+ var sender_jid = mock.cur_names[0].replace(/ /g,'.').toLowerCase() + '@localhost',
|
|
|
+ msg = $msg({
|
|
|
+ from: sender_jid,
|
|
|
+ to: converse.connection.jid,
|
|
|
+ type: 'chat',
|
|
|
+ id: (new Date()).getTime()
|
|
|
+ }).c('body').t(message).up()
|
|
|
+ .c('active', {'xmlns': 'http://jabber.org/protocol/chatstates'}).tree();
|
|
|
+ converse.chatboxes.onMessage(msg); // This will emit 'message'
|
|
|
+ expect(converse.showMessageNotification).toHaveBeenCalled();
|
|
|
+ });
|
|
|
+
|
|
|
+ it("is shown when a user changes their chat state", function () {
|
|
|
+ // TODO: not yet testing show_desktop_notifications setting
|
|
|
+ spyOn(converse, 'areDesktopNotificationsEnabled').andReturn(true);
|
|
|
+ spyOn(converse, 'showChatStateNotification');
|
|
|
+ var jid = mock.cur_names[2].replace(/ /g,'.').toLowerCase() + '@localhost';
|
|
|
+ converse.roster.get(jid).set('chat_status', 'busy'); // This will emit 'contactStatusChanged'
|
|
|
+ expect(converse.showChatStateNotification).toHaveBeenCalled();
|
|
|
+ });
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+ describe("When a new contact request is received", function () {
|
|
|
+ it("an HTML5 Notification is received", function () {
|
|
|
+ // TODO
|
|
|
+ });
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+ describe("When play_sounds is set to true", function () {
|
|
|
+ describe("A notification sound", function () {
|
|
|
+
|
|
|
+ it("is played when the current user is mentioned in a chat room", function () {
|
|
|
+ test_utils.openChatRoom('lounge', 'localhost', 'dummy');
|
|
|
+ converse.play_sounds = true;
|
|
|
+ spyOn(converse, 'playSoundNotification');
|
|
|
+ var view = this.chatboxviews.get('lounge@localhost');
|
|
|
+ if (!view.$el.find('.chat-area').length) { view.renderChatArea(); }
|
|
|
+ var text = 'This message will play a sound because it mentions dummy';
|
|
|
+ var message = $msg({
|
|
|
+ from: 'lounge@localhost/otheruser',
|
|
|
+ id: '1',
|
|
|
+ to: 'dummy@localhost',
|
|
|
+ type: 'groupchat'
|
|
|
+ }).c('body').t(text);
|
|
|
+ view.onChatRoomMessage(message.nodeTree);
|
|
|
+ expect(converse.playSoundNotification).toHaveBeenCalled();
|
|
|
+
|
|
|
+ text = "This message won't play a sound";
|
|
|
+ message = $msg({
|
|
|
+ from: 'lounge@localhost/otheruser',
|
|
|
+ id: '2',
|
|
|
+ to: 'dummy@localhost',
|
|
|
+ type: 'groupchat'
|
|
|
+ }).c('body').t(text);
|
|
|
+ view.onChatRoomMessage(message.nodeTree);
|
|
|
+ expect(converse.playSoundNotification, 1);
|
|
|
+ converse.play_sounds = false;
|
|
|
+
|
|
|
+ text = "This message won't play a sound because it is sent by dummy";
|
|
|
+ message = $msg({
|
|
|
+ from: 'lounge@localhost/dummy',
|
|
|
+ id: '3',
|
|
|
+ to: 'dummy@localhost',
|
|
|
+ type: 'groupchat'
|
|
|
+ }).c('body').t(text);
|
|
|
+ view.onChatRoomMessage(message.nodeTree);
|
|
|
+ expect(converse.playSoundNotification, 1);
|
|
|
+ converse.play_sounds = false;
|
|
|
+ }.bind(converse));
|
|
|
+ });
|
|
|
+ });
|
|
|
+ });
|
|
|
+}));
|