diff --git a/addons/web/static/tests/views/fields/reference_field_tests.js b/addons/web/static/tests/views/fields/reference_field_tests.js index 978d2affd78..4a14d3d757b 100644 --- a/addons/web/static/tests/views/fields/reference_field_tests.js +++ b/addons/web/static/tests/views/fields/reference_field_tests.js @@ -975,6 +975,52 @@ QUnit.module("Fields", (hooks) => { } ); + QUnit.test( + "Change model field of a ReferenceField then select an invalid value (tree list in form view)", + async function (assert) { + serverData.models.turtle.records[0].partner_ids = [1]; + serverData.models.partner.records[0].reference = "product,41"; + serverData.models.partner.records[0].model_id = 20; + + await makeView({ + type: "form", + resModel: "turtle", + resId: 1, + serverData, + arch: ` +
`, + }); + assert.strictEqual(target.querySelector(".reference_field").textContent, "xpad"); + assert.strictEqual(target.querySelector(".o_list_many2one").textContent, "Product"); + + await click(target, ".o_list_table td.o_list_many2one"); + await click(target, ".o_list_table .o_list_many2one input"); + //Select the "Partner" option, different from original "Product" + const dropdownItems = [...target.querySelectorAll(".o_list_table .o_list_many2one .o_input_dropdown .dropdown-item")]; + await click(dropdownItems.filter(item => item.text === "Partner")[0]); + assert.strictEqual(target.querySelector(".reference_field input").value, ""); + assert.strictEqual(target.querySelector(".o_list_many2one input").value, "Partner"); + //Void the associated, required, "reference" field and make sure the form marks the field as required + await click(target, ".o_list_table .reference_field input"); + const textInput = target.querySelector(".o_list_table .reference_field input"); + textInput.setSelectionRange(0, textInput.value.length); + await triggerEvent(target, ".o_list_table .reference_field input", "keydown", { + key: "Backspace", + }); + await click(target, ".o_form_view_container"); + + assert.containsOnce(target, ".o_list_table .reference_field.o_field_invalid"); + } + ); + QUnit.test("model selector is displayed only when it should be", async function (assert) { //The model selector should be only displayed if //there is no hide_model=True options AND no model_field specified