diff --git a/addons/web/static/src/js/fields/basic_fields.js b/addons/web/static/src/js/fields/basic_fields.js index bd13305df0c..d4af202d39f 100644 --- a/addons/web/static/src/js/fields/basic_fields.js +++ b/addons/web/static/src/js/fields/basic_fields.js @@ -243,14 +243,20 @@ var InputField = DebouncedField.extend({ _prepareInput: function ($input) { this.$input = $input || $(""); this.$input.addClass('o_input'); - this.$input.attr({ - type: this.nodeOptions.isPassword ? 'password' : 'text', - placeholder: this.attrs.placeholder || "", - autocomplete: this.nodeOptions.isPassword ? - 'new-password' : - this.attrs.autocomplete, - }); - this.$input.val(this._formatValue(this.value)); + + var inputAttrs = { placeholder: this.attrs.placeholder || "" }; + var inputVal; + if (this.nodeOptions.isPassword) { + inputAttrs = _.extend(inputAttrs, { type: 'password', autocomplete: 'new-password' }); + inputVal = this.value; + } else { + inputAttrs = _.extend(inputAttrs, { type: 'text', autocomplete: this.attrs.autocomplete }); + inputVal = this._formatValue(this.value); + } + + this.$input.attr(inputAttrs); + this.$input.val(inputVal); + return this.$input; }, /** diff --git a/addons/web/static/tests/fields/basic_fields_tests.js b/addons/web/static/tests/fields/basic_fields_tests.js index 443fb194d87..9ed633ad4c2 100644 --- a/addons/web/static/tests/fields/basic_fields_tests.js +++ b/addons/web/static/tests/fields/basic_fields_tests.js @@ -1183,6 +1183,34 @@ QUnit.module('basic_fields', { form.destroy(); }); + QUnit.test('input field: change password value', function (assert) { + assert.expect(4); + + var form = createView({ + View: FormView, + model: 'partner', + data: this.data, + arch: '
', + res_id: 1, + }); + + assert.notOk(form.$('.o_field_char').text() === "yop", + "password field value should not be visible in read mode"); + assert.strictEqual(form.$('.o_field_char').text(), "***", + "password field value should be hidden with '*' in read mode"); + + form.$buttons.find('.o_form_button_edit').click(); + + assert.strictEqual(form.$('input.o_field_char').attr('type'), 'password', + "password field input should be with type 'password' in edit mode"); + assert.strictEqual(form.$('input.o_field_char').val(), 'yop', + "password field input value should be the (non-hidden) password value"); + + form.destroy(); + }); + QUnit.module('UrlWidget'); QUnit.test('url widget in form view', function (assert) { diff --git a/addons/web/static/tests/views/form_tests.js b/addons/web/static/tests/views/form_tests.js index 1c817e0bfeb..9d4f6a0e9ad 100644 --- a/addons/web/static/tests/views/form_tests.js +++ b/addons/web/static/tests/views/form_tests.js @@ -6046,8 +6046,8 @@ QUnit.module('Views', { assert.strictEqual(form.$('span[name="foo"]').text(), '***', "password should be displayed with stars"); form.$buttons.find('.o_form_button_edit').click(); - assert.strictEqual(form.$('input[name="foo"]').val(), '***', - "password should be displayed with stars"); + assert.strictEqual(form.$('input[name="foo"]').val(), 'yop', + "input value should be the password"); assert.strictEqual(form.$('input[name="foo"]').prop('type'), 'password', "input should be of type password"); form.destroy(); @@ -6068,8 +6068,8 @@ QUnit.module('Views', { }); form.$buttons.find('.o_form_button_edit').click(); - assert.strictEqual(form.$('input[name="foo"]').val(), '***', - "password should be displayed with stars"); + assert.strictEqual(form.$('input[name="foo"]').prop('type'), 'password', + "input should be of type password"); assert.strictEqual(form.$('input[name="display_name"]').attr('autocomplete'), 'coucou', "attribute autocomplete should be set"); assert.strictEqual(form.$('input[name="foo"]').attr('autocomplete'), 'new-password',