From 170cd2a0217c8d172115dee32e1e0e5e0451fc7a Mon Sep 17 00:00:00 2001 From: Mohammed Shekha Date: Thu, 2 Jul 2020 13:23:04 +0000 Subject: [FIX] web: blank value in many2many_tags for multi_edit popup Let's assume a list that is multi editable and contains a m2m field displayed with widget many2many_tags. Moreover, there are enough values in the comodel s.t. the 'Search More' option is available in the many2many_tags dropdown, and field 'display_name' isn't in the list view that opens in dialog. Enter multi-edition, edit the many2one field to add a value (click on 'Search More', and pick a value from the list): the picked value isn't correctly displayed in the confirmation dialog. The issue occurred because we didn't wait for the display_name to be fetched before opening the dialog. Task : 2150384 closes odoo/odoo#57481 X-original-commit: ccf5834045d8b4fff9af7ddf60814c3a640e8318 Signed-off-by: Aaron Bohy (aab) Co-authored-by: Dhruv Patel --- .../web/static/src/js/views/basic/basic_model.js | 4 ++- addons/web/static/tests/views/list_tests.js | 39 ++++++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) (limited to 'addons/web/static') diff --git a/addons/web/static/src/js/views/basic/basic_model.js b/addons/web/static/src/js/views/basic/basic_model.js index 5be80268cc6..bb599b2e859 100644 --- a/addons/web/static/src/js/views/basic/basic_model.js +++ b/addons/web/static/src/js/views/basic/basic_model.js @@ -1515,7 +1515,9 @@ var BasicModel = AbstractModel.extend({ } if (options.notifyChange === false) { - return Promise.resolve(_.keys(changes)); + return Promise.all(defs).then(function () { + return Promise.resolve(_.keys(changes)); + }); } return Promise.all(defs).then(function () { diff --git a/addons/web/static/tests/views/list_tests.js b/addons/web/static/tests/views/list_tests.js index 4d8cf86460e..2ea2e0396a9 100644 --- a/addons/web/static/tests/views/list_tests.js +++ b/addons/web/static/tests/views/list_tests.js @@ -7434,6 +7434,45 @@ QUnit.module('Views', { list.destroy(); }); + QUnit.test('multi edition: many2many_tags in many2many field', async function (assert) { + assert.expect(5); + + for (let i = 4; i <= 10; i++) { + this.data.bar.records.push({ id: i, display_name: "Value" + i}); + } + + const list = await createView({ + View: ListView, + model: 'foo', + data: this.data, + arch: '', + archs: { + 'bar,false,list': '', + 'bar,false,search': '', + }, + }); + + assert.containsN(list, '.o_list_record_selector input:enabled', 5); + + // select two records and enter edit mode + await testUtils.dom.click(list.$('.o_data_row:eq(0) .o_list_record_selector input')); + await testUtils.dom.click(list.$('.o_data_row:eq(1) .o_list_record_selector input')); + await testUtils.dom.click(list.$('.o_data_row:eq(0) .o_data_cell')); + + await testUtils.fields.many2one.clickOpenDropdown("m2m"); + await testUtils.fields.many2one.clickItem("m2m", "Search More"); + assert.containsOnce(document.body, '.modal .o_list_view', "should have open the modal"); + + await testUtils.dom.click($('.modal .o_list_view .o_data_row:first')); + + assert.containsOnce(document.body, ".modal [role='alert']", "should have open the confirmation modal"); + assert.containsN(document.body, ".modal .o_field_many2manytags .badge", 3); + assert.strictEqual($(".modal .o_field_many2manytags .badge:last").text().trim(), "Value 3", + "should have display_name in badge"); + + list.destroy(); + }); + QUnit.test('editable list view: multi edition of many2one: set same value', async function (assert) { assert.expect(4); -- cgit v1.2.3