If document viewer is opened from chat window and when document viewer is opened then focus remains on it's modal, pressing escape should set focus back to chat window's input element, if file selecor dialog is opened and if user press ESCAPE on file selector dialog to cancel file selector dialog then it should not close chat window instead it should set focus on chat window input and on second ESCAPE key chat window should be closed also increase z-index of document viewer dialog so image remain on top of cht window OPW: 1777937
201 lines
7.3 KiB
JavaScript
201 lines
7.3 KiB
JavaScript
odoo.define('mail.chat_window_test', function (require) {
|
|
"use strict";
|
|
|
|
var framework = require('web.framework');
|
|
var testUtils = require('web.test_utils');
|
|
var Widget = require('web.Widget');
|
|
var ChatWindow = require('mail.ExtendedChatWindow');
|
|
|
|
QUnit.module('mail', {}, function () {
|
|
|
|
QUnit.module('chat_window');
|
|
|
|
QUnit.test('close chat window using ESCAPE key', function (assert) {
|
|
assert.expect(3);
|
|
|
|
function createParent(params) {
|
|
var widget = new Widget();
|
|
|
|
testUtils.addMockEnvironment(widget, params);
|
|
return widget;
|
|
}
|
|
var messages = [{
|
|
attachment_ids: [],
|
|
author_id: ["1", "John Doe"],
|
|
body: "A message",
|
|
date: moment("2016-12-20 09:35:40"),
|
|
displayed_author: "John Doe",
|
|
id: 1,
|
|
is_note: false,
|
|
is_starred: false,
|
|
model: 'partner',
|
|
res_id: 2
|
|
}];
|
|
var parent = createParent({
|
|
data: {},
|
|
});
|
|
|
|
var chatWindow = new ChatWindow(parent, 1, "user", false, messages, {});
|
|
chatWindow.appendTo($('#qunit-fixture'));
|
|
|
|
chatWindow.on('close_chat_session', null, function () {
|
|
assert.ok(true, "chat window should trigger a close event");
|
|
});
|
|
chatWindow.thread.$el.trigger("click");
|
|
assert.strictEqual(document.activeElement, chatWindow.$input[0],
|
|
"input should be focused");
|
|
var upKeyEvent = jQuery.Event( "keyup", {which: 27});
|
|
chatWindow.$('.o_composer_input').trigger(upKeyEvent);
|
|
assert.strictEqual(chatWindow.folded, false, "Closed chat Window");
|
|
parent.destroy();
|
|
});
|
|
|
|
QUnit.test('open document viewer and close using ESCAPE key should reset focus to chat window', function (assert) {
|
|
assert.expect(6);
|
|
|
|
function createParent(params) {
|
|
var widget = new Widget();
|
|
|
|
testUtils.addMockEnvironment(widget, params);
|
|
return widget;
|
|
}
|
|
var messages = [{
|
|
attachment_ids: [{
|
|
filename: 'image1.jpg',
|
|
id:1,
|
|
mimetype: 'image/jpeg',
|
|
name: 'Test Image 1',
|
|
url: '/web/content/1?download=true'
|
|
}],
|
|
author_id: ["1", "John Doe"],
|
|
body: "A message",
|
|
date: moment("2016-12-20 09:35:40"),
|
|
displayed_author: "John Doe",
|
|
id: 1,
|
|
is_note: false,
|
|
is_starred: false,
|
|
model: 'partner',
|
|
res_id: 2
|
|
}];
|
|
var parent = createParent({
|
|
mockRPC: function (route, args) {
|
|
if(_.str.contains(route, '/mail/attachment/preview/') ||
|
|
_.str.contains(route, '/web/static/lib/pdfjs/web/viewer.html')){
|
|
var canvas = document.createElement('canvas');
|
|
return $.when(canvas.toDataURL());
|
|
}
|
|
return this._super.apply(this, arguments);
|
|
},
|
|
data: {},
|
|
});
|
|
|
|
var chatWindow = new ChatWindow(parent, 1, "user", false, messages.length, {});
|
|
chatWindow.appendTo($('#qunit-fixture'));
|
|
chatWindow.render(messages);
|
|
|
|
testUtils.intercept(chatWindow, 'get_messages', function(event) {
|
|
event.stopPropagation();
|
|
var requested_msgs = _.filter(messages, function (msg) {
|
|
return _.contains(event.data.options.ids, msg.id);
|
|
});
|
|
event.data.callback($.when(requested_msgs));
|
|
}, true);
|
|
|
|
testUtils.intercept(chatWindow, 'get_bus', function(event) {
|
|
event.stopPropagation();
|
|
event.data.callback(new Bus());
|
|
}, true);
|
|
|
|
chatWindow.on('document_viewer_closed', null, function () {
|
|
assert.ok(true, "chat window should trigger a close document viewer event");
|
|
});
|
|
assert.strictEqual(chatWindow.$('.o_thread_message .o_attachment').length, 1,
|
|
"there should be three attachment on message");
|
|
// click on first image attachement
|
|
chatWindow.$('.o_thread_message .o_attachment .o_image_box .o_image_overlay').first().click();
|
|
// check focus is on document viewer popup and then press escape to close it
|
|
assert.strictEqual(document.activeElement, $('.o_modal_fullscreen')[0], "Modal popup should have focus");
|
|
assert.strictEqual($('.o_modal_fullscreen img.o_viewer_img[src*="/web/image/1?unique=1"]').length, 1,
|
|
"Modal popup should open with first image src");
|
|
// trigger ESCAPE keyup on document viewer popup
|
|
var upKeyEvent = jQuery.Event("keyup", {which: 27});
|
|
$('.o_modal_fullscreen').trigger(upKeyEvent);
|
|
assert.strictEqual(document.activeElement, chatWindow.$input[0],
|
|
"input should be focused");
|
|
var upKeyEvent = jQuery.Event( "keyup", {which: 27});
|
|
chatWindow.$('.o_composer_input').trigger(upKeyEvent);
|
|
assert.strictEqual(chatWindow.folded, false, "Closed chat Window");
|
|
parent.destroy();
|
|
});
|
|
|
|
QUnit.test('chat window\'s input can still be focused when the UI is blocked', function (assert) {
|
|
assert.expect(2);
|
|
|
|
function createParent(params) {
|
|
var widget = new Widget();
|
|
|
|
testUtils.addMockEnvironment(widget, params);
|
|
return widget;
|
|
}
|
|
var parent = createParent({
|
|
data: {},
|
|
});
|
|
|
|
var $dom = $('#qunit-fixture');
|
|
|
|
var chatWindow = new ChatWindow(parent, 1, "user", false, [], {});
|
|
chatWindow.appendTo($dom);
|
|
var $input = $('<input/>', {type: 'text'}).appendTo($dom);
|
|
$input.focus().click();
|
|
assert.strictEqual(document.activeElement, $input[0],
|
|
"fake input should be focused");
|
|
|
|
framework.blockUI();
|
|
chatWindow.$input.click(); // cannot force focus here otherwise the test
|
|
// makes no sense, this test is just about
|
|
// making sure that the code which forces the
|
|
// focus on click is not removed
|
|
assert.strictEqual(document.activeElement, chatWindow.$input[0],
|
|
"chat window's input should now be focused");
|
|
|
|
framework.unblockUI();
|
|
parent.destroy();
|
|
});
|
|
|
|
QUnit.test('emoji popover should open correctly in chat windows', function (assert) {
|
|
assert.expect(1);
|
|
|
|
function createParent(params) {
|
|
var widget = new Widget();
|
|
|
|
widget.on('get_emojis', widget, function (ev) {
|
|
ev.data.callback([]);
|
|
});
|
|
|
|
testUtils.addMockEnvironment(widget, params);
|
|
return widget;
|
|
}
|
|
var parent = createParent({
|
|
data: {},
|
|
});
|
|
|
|
var $dom = $('#qunit-fixture');
|
|
|
|
var chatWindow = new ChatWindow(parent, 1, "user", false, [], {});
|
|
chatWindow.appendTo($dom);
|
|
|
|
var $emojiButton = chatWindow.$('.o_composer_button_emoji');
|
|
$emojiButton.trigger('focusin').focus().click();
|
|
var $popover = chatWindow.$('.o_mail_emoji_container');
|
|
|
|
var done = assert.async();
|
|
// Async is needed as the popover focusout hiding is deferred
|
|
setTimeout(function () {
|
|
assert.ok($popover.is(':visible'), "emoji popover should have stayed opened");
|
|
parent.destroy();
|
|
done();
|
|
}, 0);
|
|
});
|
|
});
|
|
});
|