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"]); + }); });