From 3751379f1e9a4c215fb6eb898b4ccc67659b9ace Mon Sep 17 00:00:00 2001 From: stephanchrst Date: Tue, 10 May 2022 21:51:50 +0700 Subject: initial commit 2 --- .../messaging_initializer/messaging_initializer.js | 37 ++++++++++++++ .../messaging_initializer_tests.js | 56 ++++++++++++++++++++++ 2 files changed, 93 insertions(+) create mode 100644 addons/mail_bot/static/src/models/messaging_initializer/messaging_initializer.js create mode 100644 addons/mail_bot/static/src/models/messaging_initializer/messaging_initializer_tests.js (limited to 'addons/mail_bot/static/src/models/messaging_initializer') 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 new file mode 100644 index 00000000..9b06fbba --- /dev/null +++ b/addons/mail_bot/static/src/models/messaging_initializer/messaging_initializer.js @@ -0,0 +1,37 @@ +odoo.define('mail_bot/static/src/models/messaging_initializer/messaging_initializer.js', function (require) { +'use strict'; + +const { registerInstancePatchModel } = require('mail/static/src/model/model_core.js'); + +registerInstancePatchModel('mail.messaging_initializer', 'mail_bot/static/src/models/messaging_initializer/messaging_initializer.js', { + //-------------------------------------------------------------------------- + // Private + //-------------------------------------------------------------------------- + + /** + * @private + */ + async _initializeOdooBot() { + 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() { + await this.async(() => this._super()); + + if ('odoobot_initialized' in this.env.session && !this.env.session.odoobot_initialized) { + 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 00000000..bfb97067 --- /dev/null +++ b/addons/mail_bot/static/src/models/messaging_initializer/messaging_initializer_tests.js @@ -0,0 +1,56 @@ +odoo.define('mail_bot/static/src/models/messaging_initializer/messaging_initializer_tests.js', function (require) { +"use strict"; + +const { afterEach, beforeEach, start } = 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() { + beforeEach(this); + + this.start = async params => { + const { env, widget } = await start(Object.assign({}, params, { + data: this.data, + })); + this.env = env; + this.widget = widget; + }; + }, + afterEach() { + afterEach(this); + }, +}); + + +QUnit.test('OdooBot initialized at init', async function (assert) { + // TODO this test should be completed in combination with + // implementing _mockMailChannelInitOdooBot task-2300480 + assert.expect(2); + + await this.start({ + env: { + session: { + odoobot_initialized: false, + }, + }, + async mockRPC(route, args) { + if (args.method === 'init_odoobot') { + assert.step('init_odoobot'); + } + return this._super(...arguments); + }, + }); + + assert.verifySteps( + ['init_odoobot'], + "should have initialized OdooBot at init" + ); +}); + +}); +}); +}); + +}); -- cgit v1.2.3