From 0fa9d984f3e723c56b50a0ab062fa9951727ea5b Mon Sep 17 00:00:00 2001 From: Pierre Rousseau Date: Wed, 21 Dec 2022 11:35:59 +0000 Subject: [PATCH] [FIX] spreadsheet: call the correct callback when fetching data Before this revision, the callback passed to the constructor of BatchEndpoint which should be called when there is an error when fetching data was not called. Part of task-id 2928601 X-original-commit: 6b4d5e4274c7644f9fda40c96f6b08a6bfd9ff37 Part-of: odoo/odoo#108527 --- .../static/src/data_sources/server_data.js | 8 ++++-- .../tests/data_fetching/server_data_test.js | 26 ++++++++++++++++++- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/addons/spreadsheet/static/src/data_sources/server_data.js b/addons/spreadsheet/static/src/data_sources/server_data.js index 1190a0f5426..23170227c0e 100644 --- a/addons/spreadsheet/static/src/data_sources/server_data.js +++ b/addons/spreadsheet/static/src/data_sources/server_data.js @@ -10,7 +10,7 @@ function removeDuplicates(array) { return [...new Set(array.map((el) => JSON.stringify(el)))].map((el) => JSON.parse(el)); } -class Request { +export class Request { /** * @param {string} resModel * @param {string} method @@ -251,7 +251,11 @@ export default class BatchEndpoint { */ _notifyResults(batchResult) { for (const [request, result] of batchResult) { - this.successCallback(request, result); + if (result instanceof Error) { + this.failureCallback(request, result); + } else { + this.successCallback(request, result); + } } } diff --git a/addons/spreadsheet/static/tests/data_fetching/server_data_test.js b/addons/spreadsheet/static/tests/data_fetching/server_data_test.js index 8cebe2ba008..4fd8180561a 100644 --- a/addons/spreadsheet/static/tests/data_fetching/server_data_test.js +++ b/addons/spreadsheet/static/tests/data_fetching/server_data_test.js @@ -1,8 +1,8 @@ /** @odoo-module */ import { nextTick } from "@web/../tests/helpers/utils"; -import { ServerData } from "@spreadsheet/data_sources/server_data"; import { LoadingDataError } from "@spreadsheet/o_spreadsheet/errors"; +import BatchEndpoint, { Request, ServerData } from "@spreadsheet/data_sources/server_data"; QUnit.module("spreadsheet server data", {}, () => { QUnit.test("simple synchronous get", async (assert) => { @@ -279,4 +279,28 @@ QUnit.module("spreadsheet server data", {}, () => { assert.deepEqual(serverData.batch.get("partner", "get_something", 5), 5); assert.verifySteps([]); }); + + QUnit.test("Call the correct callback after a batch result", async (assert) => { + const orm = { + call: async (model, method, args) => { + if (args[0].includes(5)) { + throw new Error("error while fetching data"); + } + return args[0]; + }, + }; + const batchEndpoint = new BatchEndpoint(orm, "partner", "get_something", { + whenDataIsFetched: () => {}, + successCallback: () => assert.step("success-callback"), + failureCallback: () => assert.step("failure-callback"), + }); + const request = new Request("partner", "get_something", [4]); + const request2 = new Request("partner", "get_something", [5]); + batchEndpoint.call(request); + batchEndpoint.call(request2); + assert.verifySteps([]); + await nextTick(); + console.log("Passe"); + assert.verifySteps(["success-callback", "failure-callback"]); + }); });