diff --git a/addons/web/static/src/legacy/js/views/basic/basic_model.js b/addons/web/static/src/legacy/js/views/basic/basic_model.js index ff6b8e61f4d..cd2e4719c56 100644 --- a/addons/web/static/src/legacy/js/views/basic/basic_model.js +++ b/addons/web/static/src/legacy/js/views/basic/basic_model.js @@ -2059,7 +2059,7 @@ var BasicModel = AbstractModel.extend({ model: list.model, method: 'read', args: [_.pluck(data, 'id'), fieldNames], - context: _.extend({}, record.context, field.context), + context: _.extend({}, record.context, field.context, list.getContext()), }).then(function (records) { _.each(records, function (record) { list_records[record.id].data = record; 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 2a12379b52d..bb87239462d 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 @@ -1686,4 +1686,77 @@ QUnit.module("Fields", (hooks) => { await editInput(target, ".o_field_many2many_tags .o-autocomplete--input", "new tag"); assert.containsNone(target, ".o-autocomplete.dropdown li.o_m2o_dropdown_option"); }); + + QUnit.test("Many2ManyTagsField with arch context in form view", async (assert) => { + patchWithCleanup(browser, { + setTimeout: (fn) => Promise.resolve().then(fn), + }); + + await makeView({ + type: "form", + resModel: "partner", + serverData, + arch: `
`, + async mockRPC(route, args, performRPC) { + const result = await performRPC(route, args); + if (args.method === "read") { + if (args.kwargs.context.append_coucou) { + assert.step("read with context given"); + result[0].display_name += " coucou"; + } + } + if (args.method === "name_search") { + if (args.kwargs.context.append_coucou) { + assert.step("name search with context given"); + for (const res of result) { + res[1] += " coucou"; + } + } + } + return result; + }, + }); + + await selectDropdownItem(target, "timmy", "gold coucou"); + + assert.verifySteps(["name search with context given", "read with context given"]); + assert.strictEqual(target.querySelector(".o_field_tags").innerText, "gold coucou"); + }); + + QUnit.test("Many2ManyTagsField with arch context in list view", async (assert) => { + patchWithCleanup(browser, { + setTimeout: (fn) => Promise.resolve().then(fn), + }); + + await makeView({ + type: "list", + resModel: "partner", + serverData, + arch: ``, + async mockRPC(route, args, performRPC) { + const result = await performRPC(route, args); + if (args.method === "read") { + if (args.kwargs.context.append_coucou) { + assert.step("read with context given"); + result[0].display_name += " coucou"; + } + } + if (args.method === "name_search") { + if (args.kwargs.context.append_coucou) { + assert.step("name search with context given"); + for (const res of result) { + res[1] += " coucou"; + } + } + } + return result; + }, + }); + + await click(target.querySelector("[name=timmy]")); + await selectDropdownItem(target, "timmy", "gold coucou"); + + assert.verifySteps(["name search with context given", "read with context given"]); + assert.strictEqual(target.querySelector(".o_field_tags").innerText, "gold coucou"); + }); });