Files
odoo_source/addons/mail/static/tests/helpers/test_utils.js
T
Alexandre Kühn c995aa2cfd [FIX] mail: tests: remove phantomjs hack with discuss
Revision on https://github.com/odoo/odoo/commit/e0a51edd856b36bfdf1cacb4d7e8d70fad7884fa

In the commit above, we added an option to Discuss widget
to render threads specifically for PhantomJS. The reason
for this is that a test was failing, because it needs full
support of CSS flexbox to pass.

However, PhantomJS does not support flexbox very well. As
a result, it was messing with the rendering of threads.
We couldn't make the hack just in the test itself, because
it is already at the moment of rendering the thread that
PhantomJS messes the whole process of the test.

PhantomJS has been replaced with Chrome headless [1], So
the hack is no longer be necessary, as Chrome headless
fully supports CSS flexbox.

[1] https://github.com/odoo/odoo/commit/de84ad9c1f4853cb8a748ee1d0c880081dae9fe2
2018-08-16 22:26:50 +02:00

107 lines
3.0 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 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; },
updateOption: function () {},
});
},
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,
};
});