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) {