From 86ecb86069f48a6ab46d03e34c159b53d20f1ae0 Mon Sep 17 00:00:00 2001 From: Nicolas Lempereur Date: Mon, 18 May 2020 16:51:58 +0000 Subject: [PATCH] [FIX] base: groups also distribute branding When there is a: `groups="..."` on a qweb view, when you edit the view with the editor then save all groups will be removed since they are processed (so either we don't see `groups` in the rendered view, or we don't see the element itself). With this change, the "where should this part be saved when edited" branding will be distributed to elements with `groups` attribute. Added test without change failed with: AssertionError: {'data-oe-model': 'ir.ui.view', 'data-oe-id': '827', 'data-oe-field': 'arch'} != {} because branding was added to `root` tag before change. opw-2253576 closes #51489 closes odoo/odoo#51548 X-original-commit: c77bd5b043b7d2a795d0fc70c8e83b308a357224 Signed-off-by: Nicolas Lempereur (nle) --- odoo/addons/base/models/ir_ui_view.py | 2 +- odoo/addons/base/tests/test_views.py | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/odoo/addons/base/models/ir_ui_view.py b/odoo/addons/base/models/ir_ui_view.py index 0e76813cd5a..bbd5b6cd97e 100644 --- a/odoo/addons/base/models/ir_ui_view.py +++ b/odoo/addons/base/models/ir_ui_view.py @@ -1611,7 +1611,7 @@ actual arch. :rtype: boolean """ return any( - (attr in ('data-oe-model', 'group') or (attr.startswith('t-'))) + (attr in ('data-oe-model', 'groups') or (attr.startswith('t-'))) for attr in node.attrib ) diff --git a/odoo/addons/base/tests/test_views.py b/odoo/addons/base/tests/test_views.py index 27a465b713a..97a4ac768ce 100644 --- a/odoo/addons/base/tests/test_views.py +++ b/odoo/addons/base/tests/test_views.py @@ -903,6 +903,27 @@ class TestTemplating(ViewCase): ) ) + def test_branding_attribute_groups(self): + view = self.View.create({ + 'name': "Base View", + 'type': 'qweb', + 'arch': """ + + """, + }) + + arch_string = view.with_context(inherit_branding=True).read_combined(['arch'])['arch'] + arch = etree.fromstring(arch_string) + self.View.distribute_branding(arch) + + self.assertEqual(arch, E.root(E.item({ + 'groups': 'base.group_no_one', + 'data-oe-model': 'ir.ui.view', + 'data-oe-id': str(view.id), + 'data-oe-field': 'arch', + 'data-oe-xpath': '/root[1]/item[1]', + }))) + def test_call_no_branding(self): view = self.View.create({ 'name': "Base View",