Files
odoo_source/addons/mail/static/tests/helpers/mock_server.js
T
XavierDo 133eeb1bbf [ADD] mail, mass_mailing: allow a user to resend a mail with failures
When a mail is in failure state, a red envelope appears next to the message
in a thread but it was difficult to send the mail again.
This tasks will allow users to send mail again easily, or mark notification
as cancelled if the user want to ignore this failure.
A notification will appear in sender systray while mail are in failure.

Task: #46158
PR: #24628
2018-06-07 11:46:28 +02:00

104 lines
3.1 KiB
JavaScript

odoo.define('mail.MockServer', function (require) {
"use strict";
var MockServer = require('web.MockServer');
MockServer.include({
/**
* Param 'data' may have a key 'initMessaging' which contains
* a partial overwrite of the result from mockInitMessaging.
*
* Note: we must delete this key, so that this is not
* handled as a model definition.
*
* @override
* @param {Object} [data.initMessaging]
*/
init: function (data, options) {
if (data && data.initMessaging) {
this.initMessagingData = data.initMessaging;
delete data.initMessaging;
}
this._super.apply(this, arguments);
},
/**
* Simulate the '/mail.channel/channel_fetch_preview' route
*
* @private
* @return {$.Promise<Object[]>} resolved with list of channels previews
*/
_mockChannelFetchPreview: function (args) {
var self = this;
var ids = args.args[0]; // list of channel ids to fetch preview
var model = args.model;
var channels = this._getRecords(model, [['id', 'in', ids]]);
var previews = _.map(channels, function (channel) {
var maxMessageID = _.max(channel.channel_message_ids);
var lastMessage = self._getRecords('mail.message', [['id', '=', maxMessageID]])[0];
channel.last_message = lastMessage;
return channel;
});
return $.when(previews);
},
/**
* Simulate the '/mail/init_messaging' route
*
* @private
* @return {Object}
*/
_mockInitMessaging: function () {
return _.defaults(this.initMessagingData || {}, {
'needaction_inbox_counter': 0,
'starred_counter': 0,
'channel_slots': [],
'commands': [],
'mention_partner_suggestions': [],
'shortcodes': [],
'menu_id': false,
'mail_failures': [],
});
},
/**
* Simulate the 'message_fetch' Python method
*
* @return {Object}
*/
_mockMessageFetch: function (args) {
var domain = args.args[0];
var model = args.model;
var messages = this._getRecords(model, domain);
// sorted from highest ID to lowest ID (i.e. from youngest to oldest)
messages.sort(function (m1, m2) {
return m1.id < m2.id ? 1 : -1;
});
// pick at most 'limit' messages
return $.when(messages.slice(0, args.kwargs.limit));
},
/**
* @override
*/
_performRpc: function (route, args) {
if (route === '/mail/init_messaging') {
return $.when(this._mockInitMessaging(args));
}
if (args.method === 'message_fetch') {
return $.when(this._mockMessageFetch(args));
}
if (args.method === 'channel_fetch_listeners') {
return $.when([]);
}
if (args.method === 'channel_seen') {
return $.when();
}
if (args.method === 'channel_fetch_preview') {
return this._mockChannelFetchPreview(args);
}
return this._super(route, args);
},
});
});