diff --git a/addons/web/static/src/views/fields/x2many/x2many_field.js b/addons/web/static/src/views/fields/x2many/x2many_field.js index 48c74366979..2ea871369c8 100644 --- a/addons/web/static/src/views/fields/x2many/x2many_field.js +++ b/addons/web/static/src/views/fields/x2many/x2many_field.js @@ -227,7 +227,8 @@ export class X2ManyField extends Component { return props; } - switchToForm(record) { + async switchToForm(record) { + await this.props.record.save(); this.action.doAction( { type: "ir.actions.act_window", diff --git a/addons/web/static/src/views/list/list_controller.js b/addons/web/static/src/views/list/list_controller.js index b32914c707e..658315bf097 100644 --- a/addons/web/static/src/views/list/list_controller.js +++ b/addons/web/static/src/views/list/list_controller.js @@ -236,6 +236,7 @@ export class ListController extends Component { } async openRecord(record) { + await record.save(); if (this.archInfo.openAction) { this.actionService.doActionButton({ name: this.archInfo.openAction.action, diff --git a/addons/web/static/tests/views/fields/many2many_tags_field_tests.js b/addons/web/static/tests/views/fields/many2many_tags_field_tests.js index 49179c46084..b98618aedeb 100644 --- a/addons/web/static/tests/views/fields/many2many_tags_field_tests.js +++ b/addons/web/static/tests/views/fields/many2many_tags_field_tests.js @@ -351,14 +351,14 @@ QUnit.module("Fields", (hooks) => { assert.containsNone(target, ".badge.dropdown-toggle", "the tags should not be dropdowns"); // click on the tag: should do nothing and open the form view - click(target.querySelector(".o_field_many2many_tags .badge :nth-child(1)")); + await click(target.querySelector(".o_field_many2many_tags .badge :nth-child(1)")); assert.verifySteps(["selectRecord"]); await nextTick(); assert.containsNone(target, ".o_colorlist"); await click(target.querySelectorAll(".o_list_record_selector")[1]); - click(target.querySelector(".o_field_many2many_tags .badge :nth-child(1)")); + await click(target.querySelector(".o_field_many2many_tags .badge :nth-child(1)")); assert.verifySteps(["selectRecord"]); await nextTick(); @@ -386,14 +386,14 @@ QUnit.module("Fields", (hooks) => { assert.containsNone(target, ".badge.dropdown-toggle", "the tags should not be dropdowns"); // click on the tag: should do nothing and open the form view - click(target.querySelector(".o_field_many2many_tags .badge :nth-child(1)")); + await click(target.querySelector(".o_field_many2many_tags .badge :nth-child(1)")); assert.verifySteps(["selectRecord"]); await nextTick(); assert.containsNone(target, ".o_colorlist"); await click(target.querySelectorAll(".o_list_record_selector")[1]); - click(target.querySelector(".o_field_many2many_tags .badge :nth-child(1)")); + await click(target.querySelector(".o_field_many2many_tags .badge :nth-child(1)")); assert.verifySteps([]); await nextTick(); diff --git a/addons/web/static/tests/views/list_view_tests.js b/addons/web/static/tests/views/list_view_tests.js index a60cfd313d8..c81bc71154f 100644 --- a/addons/web/static/tests/views/list_view_tests.js +++ b/addons/web/static/tests/views/list_view_tests.js @@ -19830,4 +19830,28 @@ QUnit.module("Views", (hooks) => { assert.containsOnce(target, ".o_data_row"); assert.containsOnce(target, ".o_data_row.o_selected_row"); }); + + QUnit.test("Adding new record in list view with open form view button", async function (assert) { + await makeView({ + type: "list", + resModel: "foo", + serverData, + arch: '', + selectRecord: (resId, options) => { + assert.step(`switch to form - resId: ${resId} activeIds: ${options.activeIds}`); + }, + }); + + await clickAdd(); + assert.containsN( + target, + "td.o_list_record_open_form_view", + 5, + "button to open form view should be present on each row" + ); + + await editInput(target, ".o_field_widget[name=foo] input", "new"); + await click(target.querySelector("td.o_list_record_open_form_view")); + assert.verifySteps(["switch to form - resId: 5 activeIds: 5,1,2,3,4"]); + }); });