diff options
| author | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
|---|---|---|
| committer | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
| commit | 3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch) | |
| tree | a44932296ef4a9b71d5f010906253d8c53727726 /addons/website_livechat/static/tests/helpers | |
| parent | 0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff) | |
initial commit 2
Diffstat (limited to 'addons/website_livechat/static/tests/helpers')
| -rw-r--r-- | addons/website_livechat/static/tests/helpers/mock_models.js | 45 | ||||
| -rw-r--r-- | addons/website_livechat/static/tests/helpers/mock_server.js | 78 |
2 files changed, 123 insertions, 0 deletions
diff --git a/addons/website_livechat/static/tests/helpers/mock_models.js b/addons/website_livechat/static/tests/helpers/mock_models.js new file mode 100644 index 00000000..bc407959 --- /dev/null +++ b/addons/website_livechat/static/tests/helpers/mock_models.js @@ -0,0 +1,45 @@ +odoo.define('website_livechat/static/tests/helpers/mock_models.js', function (require) { +'use strict'; + +const MockModels = require('mail/static/tests/helpers/mock_models.js'); + +MockModels.patch('website_livechat/static/tests/helpers/mock_models.js', T => + class extends T { + + //---------------------------------------------------------------------- + // Public + //---------------------------------------------------------------------- + + /** + * @override + */ + static generateData() { + const data = super.generateData(...arguments); + Object.assign(data, { + 'website.visitor': { + fields: { + country_id: { string: "Country", type: 'many2one', relation: 'res.country' }, + display_name: { string: "Display name", type: 'string' }, + // Represent the browsing history of the visitor as a string. + // To ease testing this allows tests to set it directly instead + // of implementing the computation made on server. + // This should normally not be a field. + history: { string: "History", type: 'string'}, + is_connected: { string: "Is connected", type: 'boolean' }, + lang: { string: "Language", type: 'string'}, + partner_id: {string: "partner", type: "many2one", relation: 'res.partner'}, + website: { string: "Website", type: 'string' }, + }, + records: [], + }, + }); + Object.assign(data['mail.channel'].fields, { + livechat_visitor_id: { string: "Visitor", type: 'many2one', relation: 'website.visitor' }, + }); + return data; + } + + } +); + +}); diff --git a/addons/website_livechat/static/tests/helpers/mock_server.js b/addons/website_livechat/static/tests/helpers/mock_server.js new file mode 100644 index 00000000..1383e521 --- /dev/null +++ b/addons/website_livechat/static/tests/helpers/mock_server.js @@ -0,0 +1,78 @@ +odoo.define('website_livechat/static/tests/helpers/mock_server.js', function (require) { +'use strict'; + +require('im_livechat/static/tests/helpers/mock_server.js'); // ensure mail overrides are applied first + +const MockServer = require('web.MockServer'); + +MockServer.include({ + /** + * Simulate a 'call_button' operation from a view. + * + * @override + */ + _mockCallButton({ args, kwargs, method, model }) { + if (model === 'website.visitor' && method === 'action_send_chat_request') { + return this._mockWebsiteVisitorActionSendChatRequest(args[0]); + } + return this._super(...arguments); + }, + /** + * Overrides to add visitor information to livechat channels. + * + * @override + */ + _mockMailChannelChannelInfo(ids, extra_info) { + const channelInfos = this._super(...arguments); + for (const channelInfo of channelInfos) { + const channel = this._getRecords('mail.channel', [['id', '=', channelInfo.id]])[0]; + if (channel.channel_type === 'livechat' && channelInfo.livechat_visitor_id) { + const visitor = this._getRecords('website.visitor', [['id', '=', channelInfo.livechat_visitor_id]])[0]; + const country = this._getRecords('res.country', [['id', '=', visitor.country_id]])[0]; + channelInfo.visitor = { + name: visitor.display_name, + country_code: country && country.code, + country_id: country && country.id, + is_connected: visitor.is_connected, + history: visitor.history, // TODO should be computed + website: visitor.website, + lang: visitor.lang, + partner_id: visitor.partner_id, + } + } + } + return channelInfos; + }, + /** + * @private + * @param {integer[]} ids + */ + _mockWebsiteVisitorActionSendChatRequest(ids) { + const visitors = this._getRecords('website.visitor', [['id', 'in', ids]]); + for (const visitor of visitors) { + const country = visitor.country_id + ? this._getRecords('res.country', [['id', '=', visitor.country_id]]) + : undefined; + const visitor_name = `${visitor.display_name}${country ? `(${country.name})` : ''}`; + const members = [this.currentPartnerId]; + if (visitor.partner_id) { + members.push(visitor.partner_id); + } else { + members.push(this.publicPartnerId); + } + const livechatId = this._mockCreate('mail.channel', { + anonymous_name: visitor_name, + channel_type: 'livechat', + livechat_operator_id: this.currentPartnerId, + members, + public: 'private', + }); + // notify operator + const channelInfo = this._mockMailChannelChannelInfo([livechatId], 'send_chat_request')[0]; + const notification = [[false, 'res.partner', this.currentPartnerId], channelInfo]; + this._widget.call('bus_service', 'trigger', 'notification', [notification]); + } + }, +}); + +}); |
