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": `