summaryrefslogtreecommitdiff
path: root/addons/mail/static/src/components/composer/composer_tests.js
diff options
context:
space:
mode:
authorXavier Dubuc <xdu@odoo.com>2020-11-19 10:21:43 +0000
committerXavier Dubuc <xdu@odoo.com>2020-11-20 10:02:44 +0000
commit909b66883c1085c3eba59452fd89f1328948acab (patch)
tree52cca02074b03a2e4d2b228c4a9dcb980a31e0d1 /addons/mail/static/src/components/composer/composer_tests.js
parent34f2303327e8f2b9b7e95bc33c6246d52a633dc1 (diff)
[FIX] mail: prevent multiple send of message by spamming send button
task-2388702 closes odoo/odoo#61993 Signed-off-by: Sébastien Theys (seb) <seb@odoo.com>
Diffstat (limited to 'addons/mail/static/src/components/composer/composer_tests.js')
-rw-r--r--addons/mail/static/src/components/composer/composer_tests.js70
1 files changed, 70 insertions, 0 deletions
diff --git a/addons/mail/static/src/components/composer/composer_tests.js b/addons/mail/static/src/components/composer/composer_tests.js
index dbede3000f1..d8b369910b1 100644
--- a/addons/mail/static/src/components/composer/composer_tests.js
+++ b/addons/mail/static/src/components/composer/composer_tests.js
@@ -1973,6 +1973,76 @@ QUnit.test("basic rendering when sending a message to the followers and thread d
);
});
+QUnit.test('send message only once when button send is clicked twice quickly', async function (assert) {
+ assert.expect(2);
+
+ this.data['mail.channel'].records.push({ id: 20 });
+ await this.start({
+ async mockRPC(route, args) {
+ if (args.method === 'message_post') {
+ assert.step('message_post');
+ }
+ return this._super(...arguments);
+ },
+ });
+ const thread = this.env.models['mail.thread'].find(thread =>
+ thread.id === 20 &&
+ thread.model === 'mail.channel'
+ );
+ await this.createComposerComponent(thread.composer);
+ // Type message
+ await afterNextRender(() => {
+ document.querySelector(`.o_ComposerTextInput_textarea`).focus();
+ document.execCommand('insertText', false, "test message");
+ });
+
+ await afterNextRender(() => {
+ document.querySelector(`.o_Composer_buttonSend`).click();
+ document.querySelector(`.o_Composer_buttonSend`).click();
+ });
+ assert.verifySteps(
+ ['message_post'],
+ "The message has been posted only once"
+ )
+});
+
+QUnit.test('send message only once when enter is pressed twice quickly', async function (assert) {
+ assert.expect(2);
+
+ this.data['mail.channel'].records.push({ id: 20 });
+ await this.start({
+ async mockRPC(route, args) {
+ if (args.method === 'message_post') {
+ assert.step('message_post');
+ }
+ return this._super(...arguments);
+ },
+ });
+ const thread = this.env.models['mail.thread'].find(thread =>
+ thread.id === 20 &&
+ thread.model === 'mail.channel'
+ );
+ await this.createComposerComponent(thread.composer, {
+ textInputSendShortcuts: ['enter'],
+ });
+ // Type message
+ await afterNextRender(() => {
+ document.querySelector(`.o_ComposerTextInput_textarea`).focus();
+ document.execCommand('insertText', false, "test message");
+ });
+ await afterNextRender(() => {
+ const enterEvent = new window.KeyboardEvent('keydown', { key: 'Enter' });
+ document.querySelector(`.o_ComposerTextInput_textarea`)
+ .dispatchEvent(enterEvent);
+ document.querySelector(`.o_ComposerTextInput_textarea`)
+ .dispatchEvent(enterEvent);
+ });
+ assert.verifySteps(
+ ['message_post'],
+ "The message has been posted only once"
+ )
+});
+
});
});
});