# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo.tests import TransactionCase
class TestViews(TransactionCase):
def setUp(self):
super().setUp()
View = self.env['ir.ui.view']
self.first_view = View.create({
'name': 'Test View 1',
'type': 'qweb',
'arch': '
Hello World
',
'key': 'web_editor.test_first_view',
})
self.second_view = View.create({
'name': 'Test View 2',
'type': 'qweb',
'arch': '
',
'key': 'web_editor.test_second_view',
})
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(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.get_combined_arch(),
)
def test_find_available_name(self):
View = self.env['ir.ui.view']
used_names = ['Unrelated name']
initial_name = "Test name"
name = View._find_available_name(initial_name, used_names)
self.assertEqual(initial_name, name)
used_names.append(name)
name = View._find_available_name(initial_name, used_names)
self.assertEqual('Test name (2)', name)
used_names.append(name)
name = View._find_available_name(initial_name, used_names)
self.assertEqual('Test name (3)', name)