diff --git a/addons/web/static/src/views/fields/relational_utils.js b/addons/web/static/src/views/fields/relational_utils.js index 07c22e14244..5c520847bf5 100644 --- a/addons/web/static/src/views/fields/relational_utils.js +++ b/addons/web/static/src/views/fields/relational_utils.js @@ -223,7 +223,7 @@ export class Many2XAutocomplete extends Component { const options = records.map((result) => ({ value: result[0], - label: result[1], + label: result[1].split("\n")[0], })); if (this.props.quickCreate && request.length) { diff --git a/addons/web/static/tests/views/fields/many2one_field_tests.js b/addons/web/static/tests/views/fields/many2one_field_tests.js index 75cb96140a3..d7edf34b600 100644 --- a/addons/web/static/tests/views/fields/many2one_field_tests.js +++ b/addons/web/static/tests/views/fields/many2one_field_tests.js @@ -1321,6 +1321,68 @@ QUnit.module("Fields", (hooks) => { assert.verifySteps(["search: ", "search: ", "search: p", "search: p"]); }); + QUnit.test("many2one search with server returning multiple lines", async function (assert) { + const namegets = { + 2: "fizz\nbuzz\nfizzbuzz", + 4: "aaa\nAAA\nRecord", + }; + + await makeView({ + type: "form", + resModel: "partner", + resId: 1, + serverData, + arch: ` +
+ + + + + +
`, + mockRPC(route, { args, kwargs, method }) { + if (method === "name_get") { + assert.step(method); + return args.map((id) => [id, namegets[id]]); + } + if (method === "name_search") { + assert.step(method); + return Object.keys(namegets).map((id) => [id, namegets[id]]); + } + }, + }); + assert.verifySteps(["name_get"]); + + const input = target.querySelector(".o_field_widget input"); + + // Initial value + assert.strictEqual(input.value, "aaa"); + assert.strictEqual( + target.querySelector(".o_field_many2one_extra").innerHTML, + "AAA
Record" + ); + + // Change the value + await editInput(input, null, "fizz"); + // should display only the first line of the returned value from the server + assert.verifySteps(["name_search"]); + assert.deepEqual( + [...target.querySelectorAll(".dropdown-menu li:not(.o_m2o_dropdown_option")].map( + (el) => el.textContent + ), + ["fizz", "aaa"] + ); + await click(target.querySelector(".dropdown-menu li")); + + // Check the selection has been taken into account + assert.verifySteps(["name_get"]); + assert.strictEqual(input.value, "fizz"); + assert.strictEqual( + target.querySelector(".o_field_many2one_extra").innerHTML, + "buzz
fizzbuzz" + ); + }); + QUnit.test("many2one search with trailing and leading spaces", async function (assert) { await makeView({ type: "form",