From 63a4481ad4e52eb068464a77772164b57c1cc012 Mon Sep 17 00:00:00 2001 From: Hubert Van De Walle Date: Mon, 26 Jun 2023 13:07:40 +0200 Subject: [PATCH] [FIX] web: reset expanded fields on import compatibility switch Steps to reproduce ================== - Go to users - Open the export dialog - Expand the Groups field - Add the Groups > Groups/Access Controls field - Check the import compatibility option - Expand the Groups field again => `TypeError: this.knownFields[id] is undefined` Solution ======== The expandedFields were not reset. We also need to update the t-key to take the compatibility state into account. opw-3378834 closes odoo/odoo#146116 X-original-commit: d2f52abb8ce1b7e5291e0de7d4ea7788f39115bd Signed-off-by: Luca Vitali (luvi) --- .../views/view_dialogs/export_data_dialog.js | 1 + .../views/view_dialogs/export_data_dialog.xml | 2 +- .../view_dialogs/export_data_dialog_tests.js | 40 +++++++++++++++++++ 3 files changed, 42 insertions(+), 1 deletion(-) diff --git a/addons/web/static/src/views/view_dialogs/export_data_dialog.js b/addons/web/static/src/views/view_dialogs/export_data_dialog.js index cc9ed6ee8e7..1f5db9a3466 100644 --- a/addons/web/static/src/views/view_dialogs/export_data_dialog.js +++ b/addons/web/static/src/views/view_dialogs/export_data_dialog.js @@ -204,6 +204,7 @@ export class ExportDataDialog extends Component { async fetchFields() { this.state.search = []; this.knownFields = {}; + this.expandedFields = {}; await this.loadFields(); await this.setDefaultExportList(); if (this.searchRef.el) { diff --git a/addons/web/static/src/views/view_dialogs/export_data_dialog.xml b/addons/web/static/src/views/view_dialogs/export_data_dialog.xml index f8f63ace164..1fdc0dda039 100644 --- a/addons/web/static/src/views/view_dialogs/export_data_dialog.xml +++ b/addons/web/static/src/views/view_dialogs/export_data_dialog.xml @@ -42,7 +42,7 @@
- + { await click(target, ".o_select_button"); }); + QUnit.test("toggling import compatibility after adding an expanded field", async function (assert) { + assert.expect(1); + + mockDownload(({ url, data }) => { + assert.ok( + JSON.parse(data.data)["import_compat"], + "request to generate the file must have 'import_compat' as true" + ); + return Promise.resolve(); + }); + + await makeView({ + serverData, + type: "list", + resModel: "partner", + arch: ``, + actionMenus: {}, + mockRPC(route, args) { + if (route === "/web/export/formats") { + return Promise.resolve([ + { tag: "csv", label: "CSV" }, + ]); + } + if (route === "/web/export/get_fields") { + if (!args.parent_field) { + return Promise.resolve(fetchedFields.root); + } + return Promise.resolve(fetchedFields[args.prefix]); + } + }, + }); + + await openExportDataDialog(); + await click(target, "[data-field_id='activity_ids']"); + await click(target, "[data-field_id='activity_ids/partner_ids'] .o_add_field"); + await click(target, ".o_import_compat input"); + await click(target, "[data-field_id='activity_ids']"); + await click(target, ".o_select_button"); + }); + QUnit.test("Export dialog: many2many fields are extendable", async function (assert) { await makeView({ serverData,