Files
odoo_source/addons/mail/static/tests/helpers/test_utils.js
T

108 lines
2.9 KiB
JavaScript

odoo.define('mail.testUtils', function (require) {
"use strict";
var Discuss = require('mail.chat_discuss');
var AbstractService = require('web.AbstractService');
var Bus = require('web.Bus');
var ControlPanel = require('web.ControlPanel');
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 a mock bus_service, using 'bus' instead of bus.bus
*
* @param {web.bus} bus
* @return {AbstractService} the mock bus_service
*/
function createBusService(bus) {
var BusService = AbstractService.extend({
name: 'bus_service',
/**
* @override
*/
init: function () {
this._super.apply(this, arguments);
if (!bus) {
bus = new Bus();
}
this.bus = new _.extend(bus, {
/**
* Do nothing
*/
start_polling: function () {},
is_odoo_focused: function () {
return true;
},
});
},
//--------------------------------------------------------------------------
// Public
//--------------------------------------------------------------------------
/**
* Get the bus
*/
getBus: function () {
return this.bus;
},
});
return BusService;
}
/**
* Create asynchronously a discuss widget.
* This is async due to chat_manager 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;
});
}
return {
createBusService: createBusService,
createDiscuss: createDiscuss,
};
});