From 73cf0d76693cf7677a1a286fb35357ccd84ebe43 Mon Sep 17 00:00:00 2001 From: Pierre Rousseau Date: Mon, 9 Jan 2023 13:39:28 +0000 Subject: [PATCH] [FIX] spreadsheet: fix name get assignation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Since d6a1aa63702132ffc59d2412c2a009912eba797a, a name get saved from the result of a pivot was stored with an incorrect `deferred`. The value stored was not the deferred, but the result of `new Deferred().resolve`, which is undefined. This revision fixes this issue by storing the correct deferred. closes odoo/odoo#109472 X-original-commit: b3ad5ee64865dc7a3b84cae18cd37002f6d69a91 Signed-off-by: Lucas Lefèvre (lul) Signed-off-by: Pierre Rousseau (pro) --- .../data_sources/display_name_repository.js | 4 ++- .../data_fetching/metadata_repository_test.js | 26 +++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/addons/spreadsheet/static/src/data_sources/display_name_repository.js b/addons/spreadsheet/static/src/data_sources/display_name_repository.js index b8508f85851..755fe2cbad1 100644 --- a/addons/spreadsheet/static/src/data_sources/display_name_repository.js +++ b/addons/spreadsheet/static/src/data_sources/display_name_repository.js @@ -83,9 +83,11 @@ export class DisplayNameRepository { if (!this._displayNames[model]) { this._displayNames[model] = {}; } + const deferred = new Deferred(); + deferred.resolve(displayName); this._displayNames[model][id] = { state: "COMPLETED", - deferred: new Deferred().resolve(displayName), + deferred, value: displayName, }; } diff --git a/addons/spreadsheet/static/tests/data_fetching/metadata_repository_test.js b/addons/spreadsheet/static/tests/data_fetching/metadata_repository_test.js index bdbd69532b8..900ee5963cc 100644 --- a/addons/spreadsheet/static/tests/data_fetching/metadata_repository_test.js +++ b/addons/spreadsheet/static/tests/data_fetching/metadata_repository_test.js @@ -127,6 +127,32 @@ QUnit.module("spreadsheet > Metadata Repository", {}, () => { assert.verifySteps(["name_get-A-[2]"]); }); + QUnit.test( + "Assigning a result after triggering the request should not crash", + async function (assert) { + const orm = { + silent: { + call: async (model, method, args) => { + const ids = args[0]; + assert.step(`${method}-${model}-[${ids.join(",")}]`); + return ids.map((id) => [id, id.toString()]); + }, + }, + }; + + const metadataRepository = new MetadataRepository(orm); + + assert.throws(() => metadataRepository.getRecordDisplayName("A", 1)); + assert.verifySteps([]); + metadataRepository.setDisplayName("A", 1, "test"); + assert.strictEqual(metadataRepository.getRecordDisplayName("A", 1), "test"); + + await nextTick(); + assert.verifySteps(["name_get-A-[1]"]); + assert.strictEqual(metadataRepository.getRecordDisplayName("A", 1), "1"); + } + ); + QUnit.test( "Name_get will retry with one id by request in case of failure", async function (assert) {