summaryrefslogtreecommitdiff
path: root/addons/web/static/tests/fields/relational_fields_tests.js
diff options
context:
space:
mode:
authorAdrien Dieudonne <adr@odoo.com>2017-12-06 14:22:26 +0100
committerAdrien Dieudonne <adr@odoo.com>2017-12-11 10:17:15 +0100
commit35c4057422efd32318d08bbfaf5ba0ee1d17f11d (patch)
tree3fc58f43c101815b958533adf61f371b443f02ec /addons/web/static/tests/fields/relational_fields_tests.js
parent0fd602ba34866fe2e61cd4913bc3e9806ec77c26 (diff)
[FIX] web: FieldMany2One: don't re-render if dirty
The 'main_flow_tour' noticed an error that we had already corrected for the input fields. See here: @a71f2237 In fact the same error can occur in the many2one fields for the exact same reason. It's why the 'main_flow_tour' crashed at the following step: ".ui-menu-item > a:contains('the_flow.customer')"
Diffstat (limited to 'addons/web/static/tests/fields/relational_fields_tests.js')
-rw-r--r--addons/web/static/tests/fields/relational_fields_tests.js57
1 files changed, 57 insertions, 0 deletions
diff --git a/addons/web/static/tests/fields/relational_fields_tests.js b/addons/web/static/tests/fields/relational_fields_tests.js
index 42148e6fe88..757c4c20278 100644
--- a/addons/web/static/tests/fields/relational_fields_tests.js
+++ b/addons/web/static/tests/fields/relational_fields_tests.js
@@ -6329,6 +6329,63 @@ QUnit.module('relational_fields', {
form.destroy();
});
+ QUnit.test('one2many field: change value before pending onchange returns', function (assert) {
+ var done = assert.async();
+ assert.expect(2);
+
+ var M2O_DELAY = relationalFields.FieldMany2One.prototype.AUTOCOMPLETE_DELAY;
+ relationalFields.FieldMany2One.prototype.AUTOCOMPLETE_DELAY = 0;
+
+ this.data.partner.onchanges = {
+ int_field: function () {}
+ };
+ var def;
+ var form = createView({
+ View: FormView,
+ model: 'partner',
+ data: this.data,
+ arch:'<form string="Partners">' +
+ '<field name="p">' +
+ '<tree editable="bottom">' +
+ '<field name="int_field"/>' +
+ '<field name="trululu"/>' +
+ '</tree>' +
+ '</field>' +
+ '</form>',
+ mockRPC: function (route, args) {
+ var result = this._super.apply(this, arguments);
+ if (args.method === 'onchange') {
+ // delay the onchange RPC
+ return $.when(def).then(_.constant(result));
+ }
+ return result;
+ },
+ });
+
+ form.$('.o_field_x2many_list_row_add a').click();
+ def = $.Deferred();
+ form.$('.o_field_widget[name=int_field]')
+ .val('44')
+ .trigger('input');
+
+ var $dropdown = form.$('.o_field_many2one input').autocomplete('widget');
+ // set trululu before onchange
+ form.$('.o_field_many2one input').val('first').trigger('keydown').trigger('keyup');
+ // complete the onchange
+ def.resolve();
+ assert.strictEqual(form.$('.o_field_many2one input').val(), 'first',
+ 'should have kept the new value');
+ concurrency.delay(0).then(function () {
+ // check name_search result
+ assert.strictEqual($dropdown.find('li:not(.o_m2o_dropdown_option)').length, 1,
+ 'autocomplete should contains 1 suggestion');
+
+ relationalFields.FieldMany2One.prototype.AUTOCOMPLETE_DELAY = M2O_DELAY;
+ form.destroy();
+ done();
+ });
+ });
+
QUnit.test('one2many with default value: edit line to make it invalid', function (assert) {
assert.expect(3);