summaryrefslogtreecommitdiff
path: root/addons/mail/static/src/components/message/message_tests.js
diff options
context:
space:
mode:
Diffstat (limited to 'addons/mail/static/src/components/message/message_tests.js')
-rw-r--r--addons/mail/static/src/components/message/message_tests.js124
1 files changed, 124 insertions, 0 deletions
diff --git a/addons/mail/static/src/components/message/message_tests.js b/addons/mail/static/src/components/message/message_tests.js
index 3d7bf1da396..df964458fea 100644
--- a/addons/mail/static/src/components/message/message_tests.js
+++ b/addons/mail/static/src/components/message/message_tests.js
@@ -9,6 +9,7 @@ const {
afterNextRender,
beforeEach,
createRootComponent,
+ nextAnimationFrame,
start,
} = require('mail/static/src/utils/test_utils.js');
@@ -829,6 +830,129 @@ QUnit.test('data-oe-id & data-oe-model link redirection on click', async functio
);
});
+QUnit.test('chat with author should be opened after clicking on his avatar', async function (assert) {
+ assert.expect(4);
+
+ this.data['res.partner'].records.push({ id: 10 });
+ this.data['res.users'].records.push({ partner_id: 10 });
+ await this.start({
+ hasChatWindow: true,
+ });
+ const message = this.env.models['mail.message'].create({
+ author: [['insert', { id: 10 }]],
+ id: 10,
+ });
+ await this.createMessageComponent(message);
+ assert.containsOnce(
+ document.body,
+ '.o_Message_authorAvatar',
+ "message should have the author avatar"
+ );
+ assert.hasClass(
+ document.querySelector('.o_Message_authorAvatar'),
+ 'o_redirect',
+ "author avatar should have the redirect style"
+ );
+
+ await afterNextRender(() =>
+ document.querySelector('.o_Message_authorAvatar').click()
+ );
+ assert.containsOnce(
+ document.body,
+ '.o_ChatWindow_thread',
+ "chat window with thread should be opened after clicking on author avatar"
+ );
+ assert.strictEqual(
+ document.querySelector('.o_ChatWindow_thread').dataset.correspondentId,
+ message.author.id.toString(),
+ "chat with author should be opened after clicking on his avatar"
+ );
+});
+
+QUnit.test('chat with author should be opened after clicking on his im status icon', async function (assert) {
+ assert.expect(4);
+
+ this.data['res.partner'].records.push({ id: 10 });
+ this.data['res.users'].records.push({ partner_id: 10 });
+ await this.start({
+ hasChatWindow: true,
+ });
+ const message = this.env.models['mail.message'].create({
+ author: [['insert', { id: 10, im_status: 'online' }]],
+ id: 10,
+ });
+ await this.createMessageComponent(message);
+ assert.containsOnce(
+ document.body,
+ '.o_Message_partnerImStatusIcon',
+ "message should have the author im status icon"
+ );
+ assert.hasClass(
+ document.querySelector('.o_Message_partnerImStatusIcon'),
+ 'o-has-open-chat',
+ "author im status icon should have the open chat style"
+ );
+
+ await afterNextRender(() =>
+ document.querySelector('.o_Message_partnerImStatusIcon').click()
+ );
+ assert.containsOnce(
+ document.body,
+ '.o_ChatWindow_thread',
+ "chat window with thread should be opened after clicking on author im status icon"
+ );
+ assert.strictEqual(
+ document.querySelector('.o_ChatWindow_thread').dataset.correspondentId,
+ message.author.id.toString(),
+ "chat with author should be opened after clicking on his im status icon"
+ );
+});
+
+QUnit.test('open chat with author on avatar click should be disabled when currently chatting with the author', async function (assert) {
+ assert.expect(3);
+
+ this.data['mail.channel'].records.push({
+ channel_type: 'chat',
+ members: [this.data.currentPartnerId, 10],
+ public: 'private',
+ });
+ this.data['res.partner'].records.push({ id: 10 });
+ this.data['res.users'].records.push({ partner_id: 10 });
+ await this.start({
+ hasChatWindow: true,
+ });
+ const correspondent = this.env.models['mail.partner'].insert({ id: 10 });
+ const message = this.env.models['mail.message'].create({
+ author: [['link', correspondent]],
+ id: 10,
+ });
+ const thread = await correspondent.getChat();
+ const threadView = this.env.models['mail.thread_view'].create({
+ thread: [['link', thread]],
+ });
+ await this.createMessageComponent(message, {
+ threadViewLocalId: threadView.localId,
+ });
+ assert.containsOnce(
+ document.body,
+ '.o_Message_authorAvatar',
+ "message should have the author avatar"
+ );
+ assert.doesNotHaveClass(
+ document.querySelector('.o_Message_authorAvatar'),
+ 'o_redirect',
+ "author avatar should not have the redirect style"
+ );
+
+ document.querySelector('.o_Message_authorAvatar').click();
+ await nextAnimationFrame();
+ assert.containsNone(
+ document.body,
+ '.o_ChatWindow',
+ "should have no thread opened after clicking on author avatar when currently chatting with the author"
+ );
+});
+
});
});
});