diff --git a/addons/web/static/src/model/sample_server.js b/addons/web/static/src/model/sample_server.js index 088175ba27a..536eac18b47 100644 --- a/addons/web/static/src/model/sample_server.js +++ b/addons/web/static/src/model/sample_server.js @@ -608,9 +608,19 @@ export class SampleServer { } else { result = this._mockWebSearchRead({ ...params, fields }); } - // populate x2many values + // populate many2one and x2many values for (const fieldName in params.specification) { const field = this.data[params.model].fields[fieldName]; + if (field.type === "many2one") { + for (const record of result.records) { + record[fieldName] = record[fieldName] + ? { + id: record[fieldName][0], + display_name: record[fieldName][1], + } + : false; + } + } if (field.type === "one2many" || field.type === "many2many") { const relFields = Object.keys(params.specification[fieldName].fields || {}); if (relFields.length) { diff --git a/addons/web/static/tests/model/sample_server_tests.js b/addons/web/static/tests/model/sample_server_tests.js index aa0abb4e894..cfce529192a 100644 --- a/addons/web/static/tests/model/sample_server_tests.js +++ b/addons/web/static/tests/model/sample_server_tests.js @@ -261,6 +261,24 @@ QUnit.module( ); }); + QUnit.test("Send 'search_read' RPC: many2one fields", async function (assert) { + const server = new DeterministicSampleServer("res.users", fields["res.users"]); + + const result = await server.mockRpc({ + method: "unity_web_search_read", + model: "res.users", + specification: { + manager_id: { + fields: { display_name: {} }, + }, + }, + }); + + assert.deepEqual(Object.keys(result.records[0]), ["id", "manager_id"]); + assert.ok(result.records[0].manager_id.id); + assert.ok(/\w+/.test(result.records[0].manager_id.display_name)); + }); + QUnit.test("Send 'web_read_group' RPC: no group", async function (assert) { assert.expect(1);