summaryrefslogtreecommitdiff
path: root/addons/web/static/tests/core
diff options
context:
space:
mode:
authorChristophe Matthieu <chm@odoo.com>2018-09-10 10:26:45 +0200
committerChristophe Matthieu <chm@odoo.com>2018-09-10 16:36:43 +0200
commitdabe5bfbae10de983bd1cbdba38949f17a62562e (patch)
tree94731f1082ec869af188a805007bf9409274a4b4 /addons/web/static/tests/core
parent1199451606cab7342e34fc9c41a2085b8beb1243 (diff)
[FIX] web: ajax must return a promise with abort method
Remove part in service_mixins who hide this error. Queries must be able to be canceled for better performance. Also in the case of longpolling, if the request is not canceled, wait for a server message or the maximum time (30 sec) to add or delete channels.
Diffstat (limited to 'addons/web/static/tests/core')
-rw-r--r--addons/web/static/tests/core/widget_tests.js37
1 files changed, 35 insertions, 2 deletions
diff --git a/addons/web/static/tests/core/widget_tests.js b/addons/web/static/tests/core/widget_tests.js
index 19e72cb97b6..9510079e380 100644
--- a/addons/web/static/tests/core/widget_tests.js
+++ b/addons/web/static/tests/core/widget_tests.js
@@ -1,10 +1,12 @@
odoo.define('web.widget_tests', function (require) {
"use strict";
+var AjaxService = require('web.AjaxService');
var concurrency = require('web.concurrency');
var core = require('web.core');
var QWeb = require('web.QWeb');
var Widget = require('web.Widget');
+var testUtils = require('web.test_utils');
QUnit.module('core', {}, function () {
@@ -377,16 +379,47 @@ QUnit.module('core', {}, function () {
});
QUnit.test("calling _rpc on destroyed widgets", function (assert) {
- assert.expect(1);
+ assert.expect(3);
+
+ var def;
+ var parent = new Widget();
+ testUtils.addMockEnvironment(parent, {
+ session: {
+ rpc: function () {
+ def = $.Deferred();
+ def.abort = def.reject;
+ return def;
+ },
+ },
+ services: [AjaxService],
+ });
+ var widget = new Widget(parent);
+
+ widget._rpc({route: '/a/route'}).then(function () {
+ assert.ok(true, "The ajax call should be resolve");
+ });
+ def.resolve();
+ def = null;
- var widget = new Widget();
+ widget._rpc({route: '/a/route'}).always(function () {
+ throw Error("Calling _rpc on a destroyed widget should return a " +
+ "deferred that is never resolved nor rejected");
+ });
widget.destroy();
+ def.resolve();
+ def = null;
+
widget._rpc({route: '/a/route'}).always(function () {
throw Error("Calling _rpc on a destroyed widget should return a " +
"deferred that is never resolved nor rejected");
});
+ assert.ok(!def,
+ "The trigger_up is not performed and the call returns a deferred "+
+ "never resolved nor rejected");
+
assert.ok(true,
"there should be no crash when calling _rpc on a destroyed widget");
+ parent.destroy();
});
QUnit.test('start is not called when widget is destroyed', function (assert) {