File: test_views.py

package info (click to toggle)
odoo 18.0.0%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 878,716 kB
  • sloc: javascript: 927,937; python: 685,670; xml: 388,524; sh: 1,033; sql: 415; makefile: 26
file content (77 lines) | stat: -rw-r--r-- 2,871 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# -*- 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': '<div>Hello World</div>',
            'key': 'web_editor.test_first_view',
        })
        self.second_view = View.create({
            'name': 'Test View 2',
            'type': 'qweb',
            'arch': '<div><t t-call="web_editor.test_first_view"/></div>',
            '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': """<xpath expr='//t[@t-call="web_editor.test_first_view"]' position='after'>
                        <div class="oe_structure" id='oe_structure_test_view_oe_structure'/>
                    </xpath>""",
            '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 = '''<div class="oe_structure" id="oe_structure_test_view_oe_structure" data-oe-id="%s"
                         data-oe-xpath="/div" data-oe-model="ir.ui.view" data-oe-field="arch">
                        <p>Hello World!</p>
                   </div>''' % 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(
            '<p>Hello World!</p>',
            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)