summaryrefslogtreecommitdiff
path: root/addons/web/static/tests/fields/relational_fields_tests.js
diff options
context:
space:
mode:
authorGéry Debongnie <ged@odoo.com>2017-09-20 15:15:11 +0200
committerGéry Debongnie <ged@odoo.com>2017-09-21 10:55:09 +0200
commitbd113d0709f11097b1a035fe9498b5cc90b24d13 (patch)
tree03e5761a673c1d9dd551cf5662f2b5453e1aac2c /addons/web/static/tests/fields/relational_fields_tests.js
parenta8bc2a8bf8211085e1553e720d12d110b234a499 (diff)
[FIX] web: properly destroy field widgets in some cases
Before this commit, the web client did not properly destroy field widgets when updating a one2many after an onchange. This is rarely an issue, because in general, there are no other field widgets besides the row currently in edition. However, if we specify explicitely a widget, or if we use a custom widget, it may be a problem.
Diffstat (limited to 'addons/web/static/tests/fields/relational_fields_tests.js')
-rw-r--r--addons/web/static/tests/fields/relational_fields_tests.js24
1 files changed, 21 insertions, 3 deletions
diff --git a/addons/web/static/tests/fields/relational_fields_tests.js b/addons/web/static/tests/fields/relational_fields_tests.js
index 31b42d7d4f1..c2159854238 100644
--- a/addons/web/static/tests/fields/relational_fields_tests.js
+++ b/addons/web/static/tests/fields/relational_fields_tests.js
@@ -1,6 +1,7 @@
odoo.define('web.relational_fields_tests', function (require) {
"use strict";
+var AbstractField = require('web.AbstractField');
var BasicModel = require('web.BasicModel');
var concurrency = require('web.concurrency');
var FormView = require('web.FormView');
@@ -3537,7 +3538,19 @@ QUnit.module('relational_fields', {
});
QUnit.test('one2many with CREATE onchanges correctly refreshed', function (assert) {
- assert.expect(4);
+ assert.expect(5);
+
+ var delta = 0;
+ var oldInit = AbstractField.prototype.init;
+ var oldDestroy = AbstractField.prototype.destroy;
+ AbstractField.prototype.init = function () {
+ delta++;
+ oldInit.apply(this, arguments);
+ };
+ AbstractField.prototype.destroy = function () {
+ delta--;
+ oldDestroy.apply(this, arguments);
+ };
var deactiveOnchange = true;
@@ -3584,7 +3597,7 @@ QUnit.module('relational_fields', {
'<field name="foo"/>' +
'<field name="turtles">' +
'<tree editable="bottom">' +
- '<field name="display_name"/>' +
+ '<field name="display_name" widget="char"/>' +
'<field name="turtle_int"/>' +
'</tree>' +
'</field>' +
@@ -3596,7 +3609,7 @@ QUnit.module('relational_fields', {
});
assert.strictEqual(form.$('.o_data_row').length, 0,
- "o2m shouldnn't contain any row");
+ "o2m shouldn't contain any row");
form.$('.o_field_x2many_list_row_add a').click();
// trigger the first onchange
@@ -3615,12 +3628,17 @@ QUnit.module('relational_fields', {
assert.strictEqual(form.$('.o_data_row').text(), "first20second-20",
"should correctly refresh the records");
+ assert.strictEqual(form.$('.o_field_widget').length, delta,
+ "all (non visible) field widgets should have been destroyed");
+
form.$buttons.find('.o_form_button_save').click();
assert.strictEqual(form.$('.o_data_row').text(), "first20second-20",
"should correctly refresh the records after save");
form.destroy();
+ AbstractField.prototype.init = oldInit;
+ AbstractField.prototype.destroy = oldDestroy;
});
QUnit.test('one2many list (editable): readonly domain is evaluated', function (assert) {