From 9da93dc2327d43958d47a3f1029f8de86fc007ee Mon Sep 17 00:00:00 2001 From: Christophe Matthieu Date: Wed, 26 Apr 2017 13:47:32 +0200 Subject: [PATCH] [FIX] web: prevent record creation in M2O with option {'no_create': True} before this fix, if you enter a random string and exit focus you'll be prompted to create it. --- .../static/src/js/fields/relational_fields.js | 2 +- .../static/tests/fields/basic_fields_tests.js | 10 ++++----- .../tests/fields/relational_fields_tests.js | 21 +++++++++++++++++++ 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/addons/web/static/src/js/fields/relational_fields.js b/addons/web/static/src/js/fields/relational_fields.js index 459b529c748..481f5df89ad 100644 --- a/addons/web/static/src/js/fields/relational_fields.js +++ b/addons/web/static/src/js/fields/relational_fields.js @@ -93,7 +93,7 @@ var FieldMany2One = AbstractField.extend({ this._super.apply(this, arguments); this.limit = 7; this.orderer = new concurrency.DropMisordered(); - this.can_create = 'can_create' in this.attrs ? this.attrs.can_create : true; + this.can_create = ('can_create' in this.attrs ? this.attrs.can_create : true) && !this.nodeOptions.no_create; this.can_write = 'can_write' in this.attrs ? this.attrs.can_write : true; this.nodeOptions = _.defaults(this.nodeOptions, { quick_create: true, diff --git a/addons/web/static/tests/fields/basic_fields_tests.js b/addons/web/static/tests/fields/basic_fields_tests.js index 7ac38cad25f..dbe91188242 100644 --- a/addons/web/static/tests/fields/basic_fields_tests.js +++ b/addons/web/static/tests/fields/basic_fields_tests.js @@ -1409,12 +1409,12 @@ QUnit.module('basic_fields', { 'The value should be displayed properly.'); form.$buttons.find('.o_form_button_edit').click(); - assert.strictEqual(form.$('input.o_form_input').val(), '9.10', + assert.strictEqual(form.$('input.o_form_input').first().val(), '9.10', 'The input should be rendered without the currency symbol.'); assert.strictEqual(form.$('input.o_form_input').parent().children().first().text(), '$', 'The input should be preceded by a span containing the currency symbol.'); - form.$('input.o_form_input').val('108.2458938598598').trigger('input'); + form.$('input.o_form_input').first().val('108.2458938598598').trigger('input'); assert.strictEqual(form.$('input.o_form_input').val(), '108.2458938598598', 'The value should not be formated yet.'); @@ -1450,13 +1450,13 @@ QUnit.module('basic_fields', { 'The value should be displayed properly.'); form.$buttons.find('.o_form_button_edit').click(); - assert.strictEqual(form.$('input.o_form_input').val(), '0.00', + assert.strictEqual(form.$('input.o_form_input').first().val(), '0.00', 'The input should be rendered without the currency symbol.'); assert.strictEqual(form.$('input.o_form_input').parent().children().eq(1).text(), '€', 'The input should be followed by a span containing the currency symbol.'); - form.$('input.o_form_input').val('108.2458938598598').trigger('input'); - assert.strictEqual(form.$('input.o_form_input').val(), '108.2458938598598', + form.$('input.o_form_input').first().val('108.2458938598598').trigger('input'); + assert.strictEqual(form.$('input.o_form_input').first().val(), '108.2458938598598', 'The value should not be formated yet.'); form.$buttons.find('.o_form_button_save').click(); diff --git a/addons/web/static/tests/fields/relational_fields_tests.js b/addons/web/static/tests/fields/relational_fields_tests.js index b497e6da3f4..3996da81854 100644 --- a/addons/web/static/tests/fields/relational_fields_tests.js +++ b/addons/web/static/tests/fields/relational_fields_tests.js @@ -557,6 +557,27 @@ QUnit.module('relational_fields', { form.destroy(); }); + QUnit.test('no_create option on a many2one', function (assert) { + assert.expect(1); + + var form = createView({ + View: FormView, + model: 'partner', + data: this.data, + arch: '
' + + '' + + '' + + '' + + '
', + }); + + form.$('.o_form_field_many2one input').focus(); + form.$('.o_form_field_many2one input').val('new partner').trigger('keyup').trigger('focusout'); + + assert.strictEqual($('.modal').length, 0, "should not display the create modal"); + form.destroy(); + }); + QUnit.module('FieldOne2Many'); QUnit.test('one2many basic properties', function (assert) {