From 56d45bc015a1a13da633feed2fa5af27b7f8c1ca Mon Sep 17 00:00:00 2001 From: "Julien (jula)" Date: Thu, 14 Mar 2024 14:26:36 +0000 Subject: [PATCH] [FIX] spreadsheet: fix crash if odoo charts in removed sheet __Current behavior before commit:__ When a sheet is deleted, `charts` from `OdooChartCorePlugin` are not being updated. Therefore, since the commit [`905d856`][1], `getOdooChartIds` returns some chart ids that do not exist on any sheet anymore. This induces a crash when opening a spreadsheet that contains such charts. __Description of the fix:__ Handle `DELETE_SHEET` event in `OdooChartCorePlugin` by removing Odoo charts that don't belong to any sheet. __Steps to reproduce the issue on runbot:__ - Insert a Odoo graph inside a spreadsheet (starting from any app) - Add a sheet to it to the new spreadsheet - Delete the sheet that contains the chart - Leave the spreadsheet - Go to Documents app and try to open the spreadsheet -> Traceback opw-3783745 [1]: https://github.com/odoo/odoo/commit/905d8565ad2fae3f7ff96606352ee3ab86ee78cb closes odoo/odoo#157847 X-original-commit: d44c45234577d19a728e92368f224b0e0e59e853 Signed-off-by: Vincent Schippefilt (vsc) --- .../tests/charts/model/odoo_chart_plugin_test.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/addons/spreadsheet/static/tests/charts/model/odoo_chart_plugin_test.js b/addons/spreadsheet/static/tests/charts/model/odoo_chart_plugin_test.js index a6c4f38629b..5de8dbb56f2 100644 --- a/addons/spreadsheet/static/tests/charts/model/odoo_chart_plugin_test.js +++ b/addons/spreadsheet/static/tests/charts/model/odoo_chart_plugin_test.js @@ -579,4 +579,16 @@ QUnit.module("spreadsheet > odoo chart plugin", {}, () => { insertChartInSpreadsheet(model); assert.strictEqual(model.getters.getChartIds(sheetId).length, 1); }); + + QUnit.test("Remove odoo chart when sheet is deleted", async (assert) => { + const { model } = await createSpreadsheetWithChart({ type: "odoo_line" }); + const sheetId = model.getters.getActiveSheetId(); + model.dispatch("CREATE_SHEET", { + sheetId: model.uuidGenerator.uuidv4(), + position: model.getters.getSheetIds().length, + }); + assert.strictEqual(model.getters.getOdooChartIds().length, 1); + model.dispatch("DELETE_SHEET", { sheetId }); + assert.strictEqual(model.getters.getOdooChartIds().length, 0); + }); });