diff --git a/addons/web/static/src/js/fields/basic_fields.js b/addons/web/static/src/js/fields/basic_fields.js index c370bf6aede..b31a18eba45 100644 --- a/addons/web/static/src/js/fields/basic_fields.js +++ b/addons/web/static/src/js/fields/basic_fields.js @@ -1695,6 +1695,9 @@ var UrlWidget = InputField.extend({ * @private */ _renderReadonly: function () { + if (!this.value) { + return; + } let href = this.value; if (this.value && !this.websitePath) { const regex = /^(?:[fF]|[hH][tT])[tT][pP][sS]?:\/\//; diff --git a/addons/web/static/tests/fields/basic_fields_tests.js b/addons/web/static/tests/fields/basic_fields_tests.js index 7d44b6e3af1..7a9876c41da 100644 --- a/addons/web/static/tests/fields/basic_fields_tests.js +++ b/addons/web/static/tests/fields/basic_fields_tests.js @@ -2100,6 +2100,29 @@ QUnit.module('basic_fields', { list.destroy(); }); + QUnit.test('url widget with falsy value', async function (assert) { + assert.expect(4); + + this.data.partner.records[0].foo = false; + const form = await createView({ + View: FormView, + model: 'partner', + data: this.data, + arch: '
', + res_id: 1, + }); + + assert.containsOnce(form, 'div.o_field_widget[name=foo]'); + assert.strictEqual(form.$('.o_field_widget[name=foo]').text(), ""); + + await testUtils.form.clickEdit(form); + + assert.containsOnce(form, 'input.o_field_widget[name=foo]'); + assert.strictEqual(form.$('.o_field_widget[name=foo]').val(), ""); + + form.destroy(); + }); + QUnit.module('CopyClipboard'); QUnit.test('Char & Text Fields: Copy to clipboard button', async function (assert) {