From 3e37dc21d5e951836e554633efa556e4ed69e21b Mon Sep 17 00:00:00 2001 From: FrancoisGe Date: Mon, 8 Jan 2024 13:51:09 +0100 Subject: [PATCH] [FIX] web: mockWebRead respect the spec of a many2one field Before this commit, the mockServer didn't respect the unity specification for many2one fields. When you do a mockWebRead and you want to read other fields than "id" and "display_name" for a many2one field, the mockServeur ignores this part of the specification. The goal of this commit is to ensure that the mockWebRead respects the full specification for many2one fields. closes odoo/odoo#148483 Signed-off-by: Aaron Bohy (aab) --- addons/web/static/tests/helpers/mock_server.js | 13 ++++++++----- addons/web/static/tests/mock_server_tests.js | 17 +++++++++++++++++ 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/addons/web/static/tests/helpers/mock_server.js b/addons/web/static/tests/helpers/mock_server.js index 8f17b09a51a..145ace05f26 100644 --- a/addons/web/static/tests/helpers/mock_server.js +++ b/addons/web/static/tests/helpers/mock_server.js @@ -2503,11 +2503,14 @@ export class MockServer { if (!relatedFields) { record[fieldName] = record[fieldName][0]; } else { - const displayName = record[fieldName][1]; - record[fieldName] = { id: record[fieldName][0] }; - if ("display_name" in relatedFields) { - record[fieldName].display_name = displayName; - } + record[fieldName] = this.mockWebRead( + field.relation, + [record[fieldName][0]], + { + specification: relatedFields, + context: spec[fieldName].context, + } + )[0]; } } } diff --git a/addons/web/static/tests/mock_server_tests.js b/addons/web/static/tests/mock_server_tests.js index 555f391ecdd..e7744a2d142 100644 --- a/addons/web/static/tests/mock_server_tests.js +++ b/addons/web/static/tests/mock_server_tests.js @@ -1373,6 +1373,23 @@ QUnit.module("MockServer", (hooks) => { mockServer.mockWrite("foo", [[2], { many2one_reference: false }]); assert.deepEqual(mockServer.models.bar.records[0].one2many_field, []); }); + + QUnit.test("webRead sub-fields of a many2one field", async function (assert) { + data.models.partner.fields.test_name = { string: "Test Name", type: "char" }; + data.models.partner.fields.test_number = { string: "Number", type: "integer" }; + + data.models.partner.records = [{ id: 1, test_name: "Jean-Michel", test_number: 5 }]; + data.models.bar.records = [{ id: 1, partner_id: 1 }]; + + const mockServer = new MockServer(data); + const result = mockServer.mockWebRead("bar", [[1]], { + specification: { partner_id: { fields: { test_name: {}, test_number: {} } } }, + }); + assert.deepEqual(result, [ + { id: 1, partner_id: { id: 1, test_name: "Jean-Michel", test_number: 5 } }, + ]); + }); + QUnit.test("List View: invisible on processed Arch", async function (assert) { data.views = { "bar,10001,list": `