File: test_model.py

package info (click to toggle)
python-odoorpc 0.10.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 604 kB
  • sloc: python: 3,461; makefile: 154; sh: 36
file content (148 lines) | stat: -rw-r--r-- 6,085 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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
# -*- coding: utf-8 -*-

import time

from odoorpc import error
from odoorpc.env import Environment
from odoorpc.models import Model
from odoorpc.tests import LoginTestCase


class TestModel(LoginTestCase):
    def setUp(self):
        LoginTestCase.setUp(self)
        self.partner_obj = self.odoo.env['res.partner']
        self.p0_id = self.partner_obj.create({'name': "Parent"})
        self.p1_id = self.partner_obj.create({'name': "Child 1"})
        self.p2_id = self.partner_obj.create({'name': "Child 2"})
        self.group_obj = self.odoo.env['res.groups']
        self.u0_id = self.user_obj.create(
            {'name': "TestOdooRPC", 'login': 'test_%s' % time.time()}
        )
        self.g1_id = self.group_obj.create({'name': "Group 1"})
        self.g2_id = self.group_obj.create({'name': "Group 2"})

    def test_create_model_class(self):
        partner_obj = self.odoo.env['res.partner']
        self.assertEqual(partner_obj._name, 'res.partner')
        self.assertIn('name', partner_obj._columns)
        self.assertIsInstance(partner_obj.env, Environment)

    def test_model_browse(self):
        partner = self.partner_obj.browse(1)
        self.assertIsInstance(partner, Model)
        self.assertEqual(partner.id, 1)
        self.assertEqual(partner.ids, [1])
        self.assertEqual(partner.env, self.partner_obj.env)
        partners = self.partner_obj.browse([1])
        self.assertIsInstance(partners, Model)
        self.assertEqual(partners.id, 1)
        self.assertEqual(partners.ids, [1])
        self.assertEqual(partners.env, self.partner_obj.env)
        self.assertEqual(partners.ids, partner.ids)

    def test_model_browse_false(self):
        partner = self.partner_obj.browse(False)
        self.assertEqual(len(partner), 0)

    def test_model_browse_wrong_id(self):
        self.assertRaises(
            ValueError, self.partner_obj.browse, 9999999
        )  # Wrong ID
        self.assertRaises(
            error.RPCError, self.partner_obj.browse, "1"
        )  # Wrong ID type

    def test_model_browse_without_arg(self):
        self.assertRaises(TypeError, self.partner_obj.browse)

    def test_model_rpc_method(self):
        user_obj = self.odoo.env['res.users']
        user_obj.name_get(self.odoo.env.uid)
        self.odoo.env['ir.sequence'].get('fake.code')  # Return False

    def test_model_rpc_method_error_no_arg(self):
        # Handle exception (execute a 'name_get' with without args)
        user_obj = self.odoo.env['res.users']
        self.assertRaises(error.RPCError, user_obj.name_get)  # No arg

    def test_model_rpc_method_error_wrong_args(self):
        # Handle exception (execute a 'search' with wrong args)
        user_obj = self.odoo.env['res.users']
        self.assertRaises(error.RPCError, user_obj.search, False)  # Wrong arg

    def test_model_with_context(self):
        Product = self.odoo.env['product.product']
        product_id = Product.create(
            {'name': u"Product invisible", 'active': False}
        )
        product_ids = Product.search([])
        self.assertNotIn(product_id, product_ids)
        product_ids = Product.with_context(active_test=False).search([])
        self.assertIn(product_id, product_ids)
        # Check that the previous environment has not been impacted
        product_ids = Product.search([])
        self.assertNotIn(product_id, product_ids)

    def test_record_getitem_field(self):
        partner = self.partner_obj.browse(1)
        self.assertEqual(partner['id'], 1)
        self.assertEqual(partner['name'], partner.name)

    def test_record_getitem_integer(self):
        partner = self.partner_obj.browse(1)
        self.assertEqual(partner[0], partner)

    def test_record_getitem_slice(self):
        partner = self.partner_obj.browse(1)
        self.assertEqual([record.id for record in partner[:]], [1])

    def test_record_iter(self):
        ids = self.partner_obj.search([])[:5]
        partners = self.partner_obj.browse(ids)
        self.assertEqual({partner.id for partner in partners}, set(ids))
        partner = partners[0]
        self.assertIn(partner.id, partners.ids)
        self.assertEqual(id(partner._values), id(partners._values))

    def test_record_with_context(self):
        user = self.odoo.env.user
        self.assertEqual(user.env.lang, 'en_US')
        user_fr = user.with_context(lang='fr_FR')
        self.assertEqual(user_fr.env.lang, 'fr_FR')
        # Install 'fr_FR' and test the use of context with it
        self._install_lang("fr_FR")
        # Read data with two languages
        Country = self.odoo.env['res.country']
        de_id = Country.search([('code', '=', 'DE')])[0]
        de = Country.browse(de_id)
        self.assertEqual(de.name, 'Germany')
        self.assertEqual(de.with_context(lang='fr_FR').name, 'Allemagne')
        # Write data with two languages
        Product = self.odoo.env['product.product']
        self.assertEqual(Product.env.lang, 'en_US')
        name_en = "Product en_US"
        product_id = Product.create({'name': name_en})
        product_en = Product.browse(product_id)
        self.assertEqual(product_en.name, name_en)
        product_fr = product_en.with_context(lang='fr_FR')
        self.assertEqual(product_fr.env.lang, 'fr_FR')
        name_fr = "Produit fr_FR"
        product_fr.write({'name': name_fr})
        product_fr = product_fr.with_context()  # Refresh the recordset
        self.assertEqual(product_fr.name, name_fr)
        self.assertEqual(Product.env.lang, 'en_US')
        product_en = Product.browse(product_id)
        self.assertEqual(product_en.name, name_en)
        new_name_fr = "%s (nouveau)" % name_fr
        product_fr.name = new_name_fr
        product_fr = product_fr.with_context()  # Refresh the recordset
        self.assertEqual(product_fr.name, new_name_fr)

    def test_record_display_name(self):
        p_id = self.partner_obj.search([])[:1][0]
        partner = self.partner_obj.browse(p_id)
        try:
            partner.display_name
        except Exception as exc:
            self.fail(exc)