Files
odoo_source/addons/mail/static/tests/helpers/test_utils.js
T
Christophe Matthieu 6448420c5d [IMP] bus: re-factoring of bus.bus (Longpolling and CrossTab)
The purpose of this change is to make the code clearer and testable.

In this change, the 'tab_manager' static object was merged with the bus
cross tab.

Cleaning was done to clearly define private and public functions as well
as handlers. The methods are documented and the constants are now defined
on the class. The bus use the service behavior with 'trigger_up'.

'bus.CrossTab' who extend 'bus.Longpolling' are instantiated by the
bus service.

The class is always instantiated with a parent, or root in the case of the website
(im_livechat), to use the ajax and localstorage services. So the behavior, perhaps
logger or redefined by the parents.
2018-08-09 02:31:59 +02:00

107 lines
3.1 KiB
JavaScript

odoo.define('mail.testUtils', function (require) {
"use strict";
var BusService = require('bus.BusService');
var Discuss = require('mail.Discuss');
var MailService = require('mail.Service');
var AbstractService = require('web.AbstractService');
var AbstractStorageService = require('web.AbstractStorageService');
var Class = require('web.Class');
var ControlPanel = require('web.ControlPanel');
var RamStorage = require('web.RamStorage');
var testUtils = require('web.test_utils');
var Widget = require('web.Widget');
/**
* Test Utils
*
* In this module, we define some utility functions to create mock objects
* in the mail module, such as the BusService or Discuss.
*/
/**
* Create asynchronously a discuss widget.
* This is async due to mail_manager/mail_service that needs to be ready.
*
* @param {Object} params
* @return {$.Promise} resolved with the discuss widget
*/
function createDiscuss(params) {
var Parent = Widget.extend({
do_push_state: function () {},
});
var parent = new Parent();
testUtils.addMockEnvironment(parent, _.extend(params, {
archs: {
'mail.message,false,search': '<search/>',
},
}));
var discuss = new Discuss(parent, params);
discuss.set_cp_bus(new Widget());
var selector = params.debug ? 'body' : '#qunit-fixture';
var controlPanel = new ControlPanel(parent);
controlPanel.appendTo($(selector));
// override 'destroy' of discuss so that it calls 'destroy' on the parent
// instead, which is the parent of discuss and the mockServer.
discuss.destroy = function () {
// remove the override to properly destroy discuss and its children
// when it will be called the second time (by its parent)
delete discuss.destroy;
parent.destroy();
};
// link the view to the control panel
discuss.set_cp_bus(controlPanel.get_bus());
return discuss.appendTo($(selector)).then(function () {
return discuss;
});
}
var MockMailService = Class.extend({
bus_service: function () {
return BusService.extend({
_poll: function () {}, // Do nothing
isOdooFocused: function () { return true; },
});
},
mail_service: function () {
return MailService;
},
local_storage: function () {
return AbstractStorageService.extend({
storage: new RamStorage(),
});
},
getServices: function () {
return {
mail_service: this.mail_service(),
bus_service: this.bus_service(),
local_storage: this.local_storage(),
};
},
});
/**
* Returns the list of mail services required by the mail components: a
* mail_service, and its two dependencies bus_service and local_storage.
*
* @return {AbstractService[]} an array of 3 services: mail_service, bus_service
* and local_storage, in that order
*/
function getMailServices() {
return new MockMailService().getServices();
}
return {
MockMailService: MockMailService,
createDiscuss: createDiscuss,
getMailServices: getMailServices,
};
});