98 lines
3.6 KiB
JavaScript
98 lines
3.6 KiB
JavaScript
// Test support structures and methods for OpenERP
|
|
openerp.testing = (function () {
|
|
var xhr = QWeb2.Engine.prototype.get_xhr();
|
|
xhr.open('GET', '/web/static/src/xml/base.xml', false);
|
|
xhr.send(null);
|
|
var doc = xhr.responseXML;
|
|
|
|
var dependencies = {
|
|
corelib: [],
|
|
coresetup: ['corelib'],
|
|
data: ['corelib', 'coresetup'],
|
|
dates: [],
|
|
formats: ['coresetup', 'dates'],
|
|
chrome: ['corelib', 'coresetup'],
|
|
views: ['corelib', 'coresetup', 'data', 'chrome'],
|
|
search: ['data', 'coresetup', 'formats'],
|
|
list: ['views', 'data'],
|
|
form: ['data', 'views', 'list', 'formats'],
|
|
list_editable: ['list', 'form', 'data'],
|
|
};
|
|
|
|
return {
|
|
/**
|
|
* Function which does not do anything
|
|
*/
|
|
noop: function () { },
|
|
/**
|
|
* Loads 'base.xml' template file into qweb for the provided instance
|
|
*
|
|
* @param instance openerp instance being initialized, to load the template file in
|
|
*/
|
|
loadTemplate: function (instance) {
|
|
instance.web.qweb.add_template(doc);
|
|
},
|
|
/**
|
|
* Alter provided instance's ``session`` attribute to make response
|
|
* mockable:
|
|
*
|
|
* * The ``responses`` parameter can be used to provide a map of (RPC)
|
|
* paths (e.g. ``/web/view/load``) to a function returning a response
|
|
* to the query.
|
|
* * ``instance.session`` grows a ``responses`` attribute which is
|
|
* a map of the same (and is in fact initialized to the ``responses``
|
|
* parameter if one is provided)
|
|
*
|
|
* Note that RPC requests to un-mocked URLs will be rejected with an
|
|
* error message: only explicitly specified urls will get a response.
|
|
*
|
|
* Mocked sessions will *never* perform an actual RPC connection.
|
|
*
|
|
* @param instance openerp instance being initialized
|
|
* @param {Object} [responses]
|
|
*/
|
|
mockifyRPC: function (instance, responses) {
|
|
var session = instance.session;
|
|
session.responses = responses || {};
|
|
session.rpc_function = function (url, payload) {
|
|
var fn = this.responses[url.url + ':' + payload.params.method]
|
|
|| this.responses[url.url];
|
|
|
|
if (!fn) {
|
|
return $.Deferred().reject({}, 'failed',
|
|
_.str.sprintf("Url %s not found in mock responses, with arguments %s",
|
|
url.url, JSON.stringify(payload.params))
|
|
).promise();
|
|
}
|
|
return $.when(fn(payload));
|
|
};
|
|
},
|
|
/**
|
|
* Creates an openerp web instance loading the specified module after
|
|
* all of its dependencies.
|
|
*
|
|
* @param {String} module
|
|
* @returns OpenERP Web instance
|
|
*/
|
|
instanceFor: function (module) {
|
|
var instance = openerp.init([]);
|
|
this._load(instance, module);
|
|
return instance;
|
|
},
|
|
_load: function (instance, module, loaded) {
|
|
if (!loaded) { loaded = []; }
|
|
|
|
var deps = dependencies[module];
|
|
if (!deps) { throw new Error("Unknown dependencies for " + module); }
|
|
|
|
var to_load = _.difference(deps, loaded);
|
|
while (!_.isEmpty(to_load)) {
|
|
this._load(instance, to_load[0], loaded);
|
|
to_load = _.difference(deps, loaded);
|
|
}
|
|
openerp.web[module](instance);
|
|
loaded.push(module);
|
|
}
|
|
}
|
|
})();
|