From 64be692f7e48c7b460a248e1f00d3db21ec48a31 Mon Sep 17 00:00:00 2001 From: Aaron Bohy Date: Tue, 12 Dec 2023 08:03:35 +0000 Subject: [PATCH] [FIX] web: kanban: always open dialog if quick create fails Before this commit, when the user tried to quick create a record in a grouped kanban view (by clicking on the "+" icon of a column, for instance), and then clicked on the "Edit" button of the quick create, if the name_create rpc failed, the webclient switched to the form view and an error was displayed. The displayed error was about a destroyed component trying to do an rpc, namely the kanban controller. This is because it does 2 things when the name_create failed: it opened the form view in a dialog and it also switched to the form view. The latter was unwanted: in case of errors, we don't want to switch to the form view but rather to quick create from a dialog. The error was actually caused by a small mistake: we use the record variable to determine if the quick create succeeded and if we can switch to the quick created record. However, that same variable was already set before, for another purpose. OPW 3620671 closes odoo/odoo#146141 X-original-commit: 01bc79051b22f41eff20d860327ed0e41b572cd4 Signed-off-by: Francois Georis (fge) Signed-off-by: Aaron Bohy (aab) --- .../tests/views/kanban/kanban_view_tests.js | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/addons/web/static/tests/views/kanban/kanban_view_tests.js b/addons/web/static/tests/views/kanban/kanban_view_tests.js index 076abc679d3..68c63406785 100644 --- a/addons/web/static/tests/views/kanban/kanban_view_tests.js +++ b/addons/web/static/tests/views/kanban/kanban_view_tests.js @@ -3946,6 +3946,68 @@ QUnit.module("Views", (hooks) => { assert.containsOnce(target, ".o_kanban_quick_create:not(.o_disabled)"); }); + QUnit.test("quick create record and click Edit, name_create fails", async (assert) => { + Object.assign(serverData, { + views: { + "partner,false,kanban": ` + + + + +
+
+
+
`, + "partner,false,search": "", + "partner,false,list": '', + "partner,false,form": `
+ + + `, + }, + }); + + const webClient = await createWebClient({ + serverData, + async mockRPC(route, args) { + if (args.method === "name_create") { + throw makeServerError({ message: "This is a user error" }); + } + }, + }); + + await doAction(webClient, { + res_model: "partner", + type: "ir.actions.act_window", + views: [ + [false, "kanban"], + [false, "form"], + ], + context: { + group_by: ["product_id"], + }, + }); + + assert.containsN(target.querySelector(".o_kanban_group"), ".o_kanban_record", 2); + + await quickCreateRecord(0); + assert.containsOnce(target.querySelector(".o_kanban_group"), ".o_kanban_quick_create"); + + await editQuickCreateInput("display_name", "test"); + await editRecord(); + assert.containsOnce(target, ".modal .o_form_view .o_form_editable"); + assert.strictEqual(target.querySelector(".modal .o_field_many2one input").value, "hello"); + + // specify a name and save + await editInput(target, ".modal .o_field_widget[name=foo] input", "test"); + await click(target, ".modal .o_form_button_save"); + assert.containsNone(target, ".modal"); + assert.containsN(target.querySelector(".o_kanban_group"), ".o_kanban_record", 3); + const firstRecord = target.querySelector(".o_kanban_group .o_kanban_record"); + assert.strictEqual(firstRecord.innerText, "test"); + assert.containsOnce(target, ".o_kanban_quick_create:not(.o_disabled)"); + }); + QUnit.test("quick create record is re-enabled after discard on failure", async (assert) => { serverData.views["partner,false,form"] = `