diff options
| author | Sébastien Theys <seb@odoo.com> | 2020-08-13 16:26:35 +0000 |
|---|---|---|
| committer | Sébastien Theys <seb@odoo.com> | 2020-08-13 16:26:35 +0000 |
| commit | c2918c139b8f1026b57a257fbb74570d7a224c98 (patch) | |
| tree | 6b1a5cbf5b048dd86048119cd66f5fa382595a7b /addons/mail/static/src/models/messaging_initializer/messaging_initializer.js | |
| parent | 41527531b7b6f727e25a5a68aedb49609fbb1d3a (diff) | |
[IMP] web, *: improve mock server and replace most mail mockRPC
Improve mock server:
- add support for mocked `fetch`
- add support for `active_test`
- add support for x2m `in` in domains
- add support for default values computed from a function
- implement a more natural "next id" compute
- allow initial data without ids
- ensure write and x2m commands integrity
- improve bad data/bad commands error messages
- always warn for failing RPC, not only in debug mode
- fix all existing tests that had inconsistency data
Other changes done in mail (or dependents) that are not just related to tests:
- remove `direct_partner` from formatter result
->`correspondent` can be computed from other keys, especially `members`
- fix `livechat_visitor` convertData
-> only process if there is value
- add `current_partner` and `current_user_id` as `init_messaging` result
-> easier to mock than session
- remove usage of `need_moderation`
-> that was just a search indirection to `moderation_status`
- adapt `partner_id` -> `res_partner_id` key in `_notification_format`
-> to be consistent with field name
- add name in result of `mail_partner_format`
-> sometimes display_name is not the same
- remove usage of `is_moderator`
-> that was just an indirection to `moderation_channel_ids`
Enterprise counterpart: https://github.com/odoo/enterprise/pull/11523
task-2287171
closes odoo/odoo#55854
X-original-commit: 7ba3fecb3377a720d1eb70e7515a0c45da73836d
Related: odoo/enterprise#12391
Signed-off-by: Sébastien Theys (seb) <seb@odoo.com>
Diffstat (limited to 'addons/mail/static/src/models/messaging_initializer/messaging_initializer.js')
| -rw-r--r-- | addons/mail/static/src/models/messaging_initializer/messaging_initializer.js | 70 |
1 files changed, 54 insertions, 16 deletions
diff --git a/addons/mail/static/src/models/messaging_initializer/messaging_initializer.js b/addons/mail/static/src/models/messaging_initializer/messaging_initializer.js index 38d72b4bdf0..1fc042503be 100644 --- a/addons/mail/static/src/models/messaging_initializer/messaging_initializer.js +++ b/addons/mail/static/src/models/messaging_initializer/messaging_initializer.js @@ -68,20 +68,23 @@ function factory(dependencies) { * @param {Object} param0 * @param {Object} param0.channel_slots * @param {Array} [param0.commands=[]] - * @param {boolean} [param0.is_moderator=false] + * @param {Object} param0.current_partner + * @param {integer} param0.current_user_id * @param {Object} [param0.mail_failures={}] * @param {Object[]} [param0.mention_partner_suggestions=[]] * @param {Object[]} [param0.moderation_channel_ids=[]] * @param {integer} [param0.moderation_counter=0] * @param {integer} [param0.needaction_inbox_counter=0] - * @param {Array} param0.partner_root + * @param {Object} param0.partner_root + * @param {Object} param0.public_partner * @param {Object[]} [param0.shortcodes=[]] * @param {integer} [param0.starred_counter=0] */ async _init({ channel_slots, commands = [], - is_moderator = false, + current_partner, + current_user_id, mail_failures = {}, mention_partner_suggestions = [], menu_id, @@ -96,6 +99,8 @@ function factory(dependencies) { const discuss = this.messaging.discuss; // partners first because the rest of the code relies on them this._initPartners({ + current_partner, + current_user_id, moderation_channel_ids, partner_root, public_partner, @@ -103,7 +108,7 @@ function factory(dependencies) { // mailboxes after partners and before other initializers that might // manipulate threads or messages this._initMailboxes({ - is_moderator, + moderation_channel_ids, moderation_counter, needaction_inbox_counter, starred_counter, @@ -182,20 +187,20 @@ function factory(dependencies) { /** * @private * @param {Object} param0 - * @param {boolean} param0.is_moderator + * @param {Object[]} [param0.moderation_channel_ids=[]] * @param {integer} param0.moderation_counter * @param {integer} param0.needaction_inbox_counter * @param {integer} param0.starred_counter */ _initMailboxes({ - is_moderator, + moderation_channel_ids, moderation_counter, needaction_inbox_counter, starred_counter, }) { this.env.messaging.inbox.update({ counter: needaction_inbox_counter }); this.env.messaging.starred.update({ counter: starred_counter }); - if (is_moderator) { + if (moderation_channel_ids.length > 0) { this.messaging.update({ moderation: [['create', { counter: moderation_counter, @@ -246,41 +251,74 @@ function factory(dependencies) { /** * @private - * @param {Array} param0 partner root name get - * @param {integer} param0[0] partner root id - * @param {string} param0[1] partner root display_name + * @param {Object} current_partner + * @param {boolean} current_partner.active + * @param {string} current_partner.display_name + * @param {integer} current_partner.id + * @param {string} current_partner.name + * @param {integer} current_user_id + * @param {integer[]} moderation_channel_ids + * @param {Object} partner_root + * @param {boolean} partner_root.active + * @param {string} partner_root.display_name + * @param {integer} partner_root.id + * @param {string} partner_root.name + * @param {Object} public_partner + * @param {boolean} public_partner.active + * @param {string} public_partner.display_name + * @param {integer} public_partner.id + * @param {string} public_partner.name */ _initPartners({ + current_partner: { + active: currentPartnerIsActive, + display_name: currentPartnerDisplayName, + id: currentPartnerId, + name: currentPartnerName, + }, + current_user_id: currentUserId, moderation_channel_ids = [], partner_root: { active: partnerRootIsActive, display_name: partnerRootDisplayName, id: partnerRootId, + name: partnerRootName, }, public_partner: { active: publicPartnerIsActive, display_name: publicPartnerDisplayName, id: publicPartnerId, + name: publicPartnerName, }, }) { this.messaging.update({ currentPartner: [['insert', { - display_name: this.env.session.partner_display_name, - id: this.env.session.partner_id, - moderatedChannelIds: moderation_channel_ids, - name: this.env.session.name, - user: [['insert', { id: this.env.session.uid }]], + active: currentPartnerIsActive, + display_name: currentPartnerDisplayName, + id: currentPartnerId, + moderatedChannels: [ + ['insert', moderation_channel_ids.map(id => { + return { + id, + model: 'mail.channel', + }; + })], + ], + name: currentPartnerName, + user: [['insert', { id: currentUserId }]], }]], - currentUser: [['insert', { id: this.env.session.uid }]], + currentUser: [['insert', { id: currentUserId }]], partnerRoot: [['insert', { active: partnerRootIsActive, display_name: partnerRootDisplayName, id: partnerRootId, + name: partnerRootName, }]], publicPartner: [['insert', { active: publicPartnerIsActive, display_name: publicPartnerDisplayName, id: publicPartnerId, + name: publicPartnerName, }]], }); } |
