diff --git a/addons/web_editor/models/ir_ui_view.py b/addons/web_editor/models/ir_ui_view.py index a33d29ac756..3d7a4a734a4 100644 --- a/addons/web_editor/models/ir_ui_view.py +++ b/addons/web_editor/models/ir_ui_view.py @@ -82,9 +82,10 @@ class IrUiView(models.Model): 'arch': self._pretty_arch(arch), 'key': '%s_%s' % (self.key, el.get('id')), 'type': 'qweb', + 'mode': 'extension', } vals.update(self._save_oe_structure_hook()) - self.create(vals) + self.env['ir.ui.view'].create(vals) return True diff --git a/addons/web_editor/tests/test_views.py b/addons/web_editor/tests/test_views.py index 31a6892dc29..322e2a78430 100644 --- a/addons/web_editor/tests/test_views.py +++ b/addons/web_editor/tests/test_views.py @@ -5,23 +5,60 @@ from odoo.tests import TransactionCase class TestViews(TransactionCase): - def test_infinite_inherit_loop(self): - # Creates an infinite loop: A t-call B and A inherit from B + + def setUp(self): + super().setUp() View = self.env['ir.ui.view'] - first_view = View.create({ + self.first_view = View.create({ 'name': 'Test View 1', 'type': 'qweb', 'arch': '
Hello World
', 'key': 'web_editor.test_first_view', }) - second_view = View.create({ + self.second_view = View.create({ 'name': 'Test View 2', 'type': 'qweb', - 'arch': '', + 'arch': '
', 'key': 'web_editor.test_second_view', }) - second_view.write({ - 'inherit_id': first_view.id, + + def test_infinite_inherit_loop(self): + # Creates an infinite loop: A t-call B and A inherit from B + View = self.env['ir.ui.view'] + + self.second_view.write({ + 'inherit_id': self.first_view.id, }) # Test for RecursionError: maximum recursion depth exceeded in this function - View._views_get(first_view) + View._views_get(self.first_view) + + def test_oe_structure_as_inherited_view(self): + View = self.env['ir.ui.view'] + + base = View.create({ + 'name': 'Test View oe_structure', + 'type': 'qweb', + 'arch': """ +
+ """, + 'key': 'web_editor.oe_structure_view', + 'inherit_id': self.second_view.id + }) + + # check view mode + self.assertEqual(base.mode, 'extension') + + # update content of the oe_structure + value = '''
+

Hello World!

+
''' % base.id + + base.save(value=value, xpath='/xpath/div') + + self.assertEqual(len(base.inherit_children_ids), 1) + self.assertEqual(base.inherit_children_ids.mode, 'extension') + self.assertIn( + '

Hello World!

', + base.inherit_children_ids.read_combined(['arch'])['arch'], + )