[FIX] mail: prevent messaging menu mark as read from opening thread
task-2278759 closes odoo/odoo#53619 X-original-commit: 6af057b087bb66af70ed93d7f82521b56e3b1aa5 Signed-off-by: Alexandre Kühn (aku) <aku@odoo.com>
This commit is contained in:
+1
-1
@@ -48,7 +48,7 @@
|
||||
<t t-raw="inlineLastNeedactionMessageBody"/>
|
||||
</span>
|
||||
<span class="o-autogrow"/>
|
||||
<span class="o_ThreadNeedactionPreview_coreItem o_ThreadNeedactionPreview_markAsRead fa fa-check" title="Mark as Read" t-on-click="_onClickMarkAsRead"/>
|
||||
<span class="o_ThreadNeedactionPreview_coreItem o_ThreadNeedactionPreview_markAsRead fa fa-check" title="Mark as Read" t-on-click="_onClickMarkAsRead" t-ref="markAsRead"/>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
|
||||
+100
@@ -0,0 +1,100 @@
|
||||
odoo.define('mail/static/src/components/thread_needaction_preview/thread_needaction_preview_tests.js', function (require) {
|
||||
'use strict';
|
||||
|
||||
const components = {
|
||||
ThreadNeedactionPreview: require('mail/static/src/components/thread_needaction_preview/thread_needaction_preview.js'),
|
||||
};
|
||||
|
||||
const {
|
||||
afterEach: utilsAfterEach,
|
||||
afterNextRender,
|
||||
beforeEach: utilsBeforeEach,
|
||||
start: utilsStart,
|
||||
} = require('mail/static/src/utils/test_utils.js');
|
||||
|
||||
QUnit.module('mail', {}, function () {
|
||||
QUnit.module('components', {}, function () {
|
||||
QUnit.module('thread_needaction_preview', {}, function () {
|
||||
QUnit.module('thread_needaction_preview_tests.js', {
|
||||
beforeEach() {
|
||||
utilsBeforeEach(this);
|
||||
|
||||
this.createThreadNeedactionPreviewComponent = async props => {
|
||||
const ThreadNeedactionPreviewComponent = components.ThreadNeedactionPreview;
|
||||
ThreadNeedactionPreviewComponent.env = this.env;
|
||||
this.component = new ThreadNeedactionPreviewComponent(null, props);
|
||||
delete ThreadNeedactionPreviewComponent.env;
|
||||
await afterNextRender(() => this.component.mount(this.widget.el));
|
||||
};
|
||||
|
||||
this.start = async params => {
|
||||
let { env, widget } = await utilsStart(Object.assign({}, params, {
|
||||
data: this.data,
|
||||
}));
|
||||
this.env = env;
|
||||
this.widget = widget;
|
||||
};
|
||||
},
|
||||
afterEach() {
|
||||
utilsAfterEach(this);
|
||||
if (this.component) {
|
||||
this.component.destroy();
|
||||
this.component = undefined;
|
||||
}
|
||||
if (this.widget) {
|
||||
this.widget.destroy();
|
||||
this.widget = undefined;
|
||||
}
|
||||
this.env = undefined;
|
||||
},
|
||||
});
|
||||
|
||||
QUnit.test('mark as read', async function (assert) {
|
||||
assert.expect(4);
|
||||
|
||||
await this.start({
|
||||
hasChatWindow: true,
|
||||
async mockRPC(route, args) {
|
||||
if (route.includes('set_message_done')) {
|
||||
assert.step('set_message_done');
|
||||
}
|
||||
return this._super(...arguments);
|
||||
},
|
||||
});
|
||||
const thread = this.env.models['mail.thread'].create({
|
||||
id: 11,
|
||||
model: 'mail.channel',
|
||||
});
|
||||
this.env.models['mail.message'].create({
|
||||
id: 21,
|
||||
isNeedaction: true,
|
||||
originThread: [['link', thread]],
|
||||
});
|
||||
await this.createThreadNeedactionPreviewComponent({
|
||||
threadLocalId: thread.localId,
|
||||
});
|
||||
assert.containsOnce(
|
||||
document.body,
|
||||
'.o_ThreadNeedactionPreview_markAsRead',
|
||||
"should have 1 mark as read button"
|
||||
);
|
||||
|
||||
await afterNextRender(() =>
|
||||
document.querySelector('.o_ThreadNeedactionPreview_markAsRead').click()
|
||||
);
|
||||
assert.verifySteps(
|
||||
['set_message_done'],
|
||||
"should have marked the message as read"
|
||||
);
|
||||
assert.containsNone(
|
||||
document.body,
|
||||
'.o_ChatWindow',
|
||||
"should not have opened the thread"
|
||||
);
|
||||
});
|
||||
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
@@ -52,7 +52,7 @@
|
||||
</span>
|
||||
<span class="o-autogrow"/>
|
||||
<t t-if="thread.message_unread_counter > 0">
|
||||
<span class="o_ThreadPreview_coreItem o_ThreadPreview_markAsRead fa fa-check" title="Mark as Read" t-on-click="_onClickMarkAsRead"/>
|
||||
<span class="o_ThreadPreview_coreItem o_ThreadPreview_markAsRead fa fa-check" title="Mark as Read" t-on-click="_onClickMarkAsRead" t-ref="markAsRead"/>
|
||||
</t>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -0,0 +1,94 @@
|
||||
odoo.define('mail/static/src/components/thread_preview/thread_preview_tests.js', function (require) {
|
||||
'use strict';
|
||||
|
||||
const components = {
|
||||
ThreadPreview: require('mail/static/src/components/thread_preview/thread_preview.js'),
|
||||
};
|
||||
|
||||
const {
|
||||
afterEach: utilsAfterEach,
|
||||
afterNextRender,
|
||||
beforeEach: utilsBeforeEach,
|
||||
start: utilsStart,
|
||||
} = require('mail/static/src/utils/test_utils.js');
|
||||
|
||||
QUnit.module('mail', {}, function () {
|
||||
QUnit.module('components', {}, function () {
|
||||
QUnit.module('thread_preview', {}, function () {
|
||||
QUnit.module('thread_preview_tests.js', {
|
||||
beforeEach() {
|
||||
utilsBeforeEach(this);
|
||||
|
||||
this.createThreadPreviewComponent = async props => {
|
||||
const ThreadPreviewComponent = components.ThreadPreview;
|
||||
ThreadPreviewComponent.env = this.env;
|
||||
this.component = new ThreadPreviewComponent(null, props);
|
||||
delete ThreadPreviewComponent.env;
|
||||
await afterNextRender(() => this.component.mount(this.widget.el));
|
||||
};
|
||||
|
||||
this.start = async params => {
|
||||
let { env, widget } = await utilsStart(Object.assign({}, params, {
|
||||
data: this.data,
|
||||
}));
|
||||
this.env = env;
|
||||
this.widget = widget;
|
||||
};
|
||||
},
|
||||
afterEach() {
|
||||
utilsAfterEach(this);
|
||||
if (this.component) {
|
||||
this.component.destroy();
|
||||
this.component = undefined;
|
||||
}
|
||||
if (this.widget) {
|
||||
this.widget.destroy();
|
||||
this.widget = undefined;
|
||||
}
|
||||
this.env = undefined;
|
||||
},
|
||||
});
|
||||
|
||||
QUnit.test('mark as read', async function (assert) {
|
||||
assert.expect(4);
|
||||
|
||||
await this.start({
|
||||
hasChatWindow: true,
|
||||
async mockRPC(route, args) {
|
||||
if (route.includes('channel_seen')) {
|
||||
assert.step('channel_seen');
|
||||
}
|
||||
return this._super(...arguments);
|
||||
},
|
||||
});
|
||||
const thread = this.env.models['mail.thread'].create({
|
||||
id: 11,
|
||||
message_unread_counter: 1,
|
||||
model: 'mail.channel',
|
||||
});
|
||||
await this.createThreadPreviewComponent({ threadLocalId: thread.localId });
|
||||
assert.containsOnce(
|
||||
document.body,
|
||||
'.o_ThreadPreview_markAsRead',
|
||||
"should have 1 mark as read button"
|
||||
);
|
||||
|
||||
await afterNextRender(() =>
|
||||
document.querySelector('.o_ThreadPreview_markAsRead').click()
|
||||
);
|
||||
assert.verifySteps(
|
||||
['channel_seen'],
|
||||
"should have marked the thread as seen"
|
||||
);
|
||||
assert.containsNone(
|
||||
document.body,
|
||||
'.o_ChatWindow',
|
||||
"should not have opened the thread"
|
||||
);
|
||||
});
|
||||
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
@@ -258,6 +258,8 @@
|
||||
<script type="text/javascript" src="/mail/static/src/components/partner_im_status_icon/partner_im_status_icon_tests.js"></script>
|
||||
<script type="text/javascript" src="/mail/static/src/components/partner_mention_suggestion/partner_mention_suggestion_tests.js"></script>
|
||||
<script type="text/javascript" src="/mail/static/src/components/thread_icon/thread_icon_tests.js"></script>
|
||||
<script type="text/javascript" src="/mail/static/src/components/thread_preview/thread_preview_tests.js"></script>
|
||||
<script type="text/javascript" src="/mail/static/src/components/thread_needaction_preview/thread_needaction_preview_tests.js"></script>
|
||||
<script type="text/javascript" src="/mail/static/src/components/thread_textual_typing_status/thread_textual_typing_status_tests.js"></script>
|
||||
<script type="text/javascript" src="/mail/static/src/components/thread_viewer/thread_viewer_tests.js"></script>
|
||||
<script type="text/javascript" src="/mail/static/src/models/attachment/attachment_tests.js"></script>
|
||||
|
||||
Reference in New Issue
Block a user