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 = '''''' % 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'],
+ )