diff options
Diffstat (limited to 'addons/mail_bot/static/src/models/messaging_initializer')
| -rw-r--r-- | addons/mail_bot/static/src/models/messaging_initializer/messaging_initializer.js | 25 | ||||
| -rw-r--r-- | addons/mail_bot/static/src/models/messaging_initializer/messaging_initializer_tests.js | 71 |
2 files changed, 86 insertions, 10 deletions
diff --git a/addons/mail_bot/static/src/models/messaging_initializer/messaging_initializer.js b/addons/mail_bot/static/src/models/messaging_initializer/messaging_initializer.js index 05ee8196b2c..4118b5228ef 100644 --- a/addons/mail_bot/static/src/models/messaging_initializer/messaging_initializer.js +++ b/addons/mail_bot/static/src/models/messaging_initializer/messaging_initializer.js @@ -11,23 +11,28 @@ registerInstancePatchModel('mail.messaging_initializer', 'mail_bot/static/src/mo /** * @private */ - _showOdoobotTimeout() { - setTimeout(() => { - this.env.session.odoobot_initialized = true; - this.env.services.rpc({ - model: 'mail.channel', - method: 'init_odoobot', - }); - }, 2 * 60 * 1000); + async _initializeOdooBot() { + await this.async(() => new Promise(resolve => + this.env.browser.setTimeout(resolve, 2 * 60 * 1000) + )); + const data = await this.async(() => this.env.services.rpc({ + model: 'mail.channel', + method: 'init_odoobot', + })); + if (!data) { + return; + } + this.env.session.odoobot_initialized = true; }, + /** * @override */ - async _start() { + async start() { await this.async(() => this._super()); if ('odoobot_initialized' in this.env.session && !this.env.session.odoobot_initialized) { - this._showOdoobotTimeout(); + this._initializeOdooBot(); } }, }); diff --git a/addons/mail_bot/static/src/models/messaging_initializer/messaging_initializer_tests.js b/addons/mail_bot/static/src/models/messaging_initializer/messaging_initializer_tests.js new file mode 100644 index 00000000000..ac54efa2a39 --- /dev/null +++ b/addons/mail_bot/static/src/models/messaging_initializer/messaging_initializer_tests.js @@ -0,0 +1,71 @@ +odoo.define('mail_bot/static/src/models/messaging_initializer/messaging_initializer_tests.js', function (require) { +"use strict"; + +const { + afterEach: utilsAfterEach, + beforeEach: utilsBeforeEach, + start: utilsStart, +} = require('mail/static/src/utils/test_utils.js'); + +QUnit.module('mail_bot', {}, function () { +QUnit.module('models', {}, function () { +QUnit.module('messaging_initializer', {}, function () { +QUnit.module('messaging_initializer_tests.js', { + beforeEach() { + utilsBeforeEach(this); + + this.start = async params => { + let { env, widget } = await utilsStart(Object.assign({}, params, { + data: this.data, + })); + this.env = env; + this.widget = widget; + }; + }, + afterEach() { + if (this.widget) { + this.widget.destroy(); + } + this.env = undefined; + utilsAfterEach(this); + }, +}); + + +QUnit.test('OdooBot initialized after 2 minutes', async function (assert) { + assert.expect(3); + + await this.start({ + env: { + session: { + odoobot_initialized: false, + }, + }, + hasTimeControl: true, + async mockRPC(route, args) { + if (args.method === 'init_odoobot') { + assert.step('init_odoobot'); + return; + } + return this._super(...arguments); + }, + }); + + await this.env.testUtils.advanceTime(119 * 1000); + assert.verifySteps( + [], + "should not have initialized OdooBot after 1 minute 59 seconds" + ); + + await this.env.testUtils.advanceTime(1 * 1000); + assert.verifySteps( + ['init_odoobot'], + "should have initialized OdooBot after 2 minutes" + ); +}); + +}); +}); +}); + +}); |
