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
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
|
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import models
from odoo.tests.common import SavepointCase
class TestStreetFields(SavepointCase):
@classmethod
def setUpClass(cls):
super(TestStreetFields, cls).setUpClass()
cls.Partner = cls.env['res.partner']
cls.env.ref('base.be').write({'street_format': '%(street_name)s, %(street_number)s/%(street_number2)s'})
cls.env.ref('base.us').write({'street_format': '%(street_number)s/%(street_number2)s %(street_name)s'})
cls.env.ref('base.ch').write({'street_format': 'header %(street_name)s, %(street_number)s - %(street_number2)s trailer'})
cls.env.ref('base.mx').write({'street_format': '%(street_name)s %(street_number)s/%(street_number2)s'})
def assertStreetVals(self, record, street_data):
for key, val in street_data.items():
if key not in ['street', 'street_name', 'street_number', 'street_number2', 'name', 'city', 'country_id']:
continue
if isinstance(record[key], models.BaseModel):
self.assertEqual(record[key].id, val, 'Wrongly formatted street field %s: expected %s, received %s' % (key, val, record[key]))
else:
self.assertEqual(record[key], val, 'Wrongly formatted street field %s: expected %s, received %s' % (key, val, record[key]))
def test_company_create(self):
""" Will test the compute and inverse methods of street fields when creating partner records. """
us_id = self.env.ref('base.us').id
mx_id = self.env.ref('base.mx').id
ch_id = self.env.ref('base.ch').id
input_values = [
{'country_id': us_id, 'street': '40/2b Chaussee de Namur'},
{'country_id': us_id, 'street': '40 Chaussee de Namur'},
{'country_id': us_id, 'street': 'Chaussee de Namur'},
{'country_id': mx_id, 'street': 'Av. Miguel Hidalgo y Costilla 601'},
{'country_id': mx_id, 'street': 'Av. Miguel Hidalgo y Costilla 601/40'},
{'country_id': ch_id, 'street': 'header Chaussee de Namur, 40 - 2b trailer'},
{'country_id': ch_id, 'street': 'header Chaussee de Namur, 40 trailer'},
{'country_id': ch_id, 'street': 'header Chaussee de Namur trailer'},
]
expected = [
{'street_name': 'Chaussee de Namur', 'street_number': '40', 'street_number2': '2b'},
{'street_name': 'Chaussee de Namur', 'street_number': '40', 'street_number2': False},
{'street_name': 'de Namur', 'street_number': 'Chaussee', 'street_number2': False},
{'street_name': 'Av. Miguel Hidalgo y Costilla', 'street_number': '601', 'street_number2': False},
{'street_name': 'Av. Miguel Hidalgo y Costilla', 'street_number': '601', 'street_number2': '40'},
{'street_name': 'Chaussee de Namur', 'street_number': '40', 'street_number2': '2b'},
{'street_name': 'Chaussee de Namur', 'street_number': '40', 'street_number2': False},
{'street_name': 'Chaussee de Namur', 'street_number': False, 'street_number2': False}
]
# test street -> street values (compute)
for idx, (company_values, expected_vals) in enumerate(zip(input_values, expected)):
company_values['name'] = 'Test-%2d' % idx
company = self.env['res.company'].create(company_values)
self.assertStreetVals(company, expected_vals)
self.assertStreetVals(company.partner_id, expected_vals)
# test street_values -> street (inverse)
for idx, (company_values, expected_vals) in enumerate(zip(input_values, expected)):
company_values['name'] = 'TestNew-%2d' % idx
expected_street = company_values.pop('street')
company_values.update(expected_vals)
company = self.env['res.company'].create(company_values)
self.assertEqual(company.street, expected_street)
self.assertStreetVals(company, company_values)
self.assertEqual(company.partner_id.street, expected_street)
self.assertStreetVals(company.partner_id, company_values)
def test_company_write(self):
""" Will test the compute and inverse methods of street fields when updating partner records. """
be_id = self.env.ref('base.be').id
company = self.env['res.company'].create({
'name': 'Test',
'country_id': be_id,
'street': 'Chaussee de Namur, 40/2b'
})
self.assertStreetVals(company, {'street_name': 'Chaussee de Namur', 'street_number': '40', 'street_number2': '2b'})
input_values = [
{'street': 'Chaussee de Namur, 43'},
{'street': 'Chaussee de Namur'},
{'street_name': 'Chee de Namur', 'street_number': '40'},
{'street_number2': '4'},
{'country_id': self.env.ref('base.us').id},
]
expected = [
{'street_name': 'Chaussee de Namur', 'street_number': '43', 'street_number2': False},
{'street_name': 'Chaussee de Namur', 'street_number': False, 'street_number2': False},
{'street_name': 'Chee de Namur', 'street_number': '40', 'street_number2': False, 'street': 'Chee de Namur, 40'},
{'street_name': 'Chee de Namur', 'street_number': '40', 'street_number2': '4', 'street': 'Chee de Namur, 40/4'},
{'street_name': 'Chee de Namur', 'street_number': '40', 'street_number2': '4', 'street': '40/4 Chee de Namur'},
]
# test both compute and inverse (could probably be pimp)
for write_values, expected_vals in zip(input_values, expected):
company.write(write_values)
self.assertStreetVals(company, expected_vals)
self.assertStreetVals(company.partner_id, expected_vals)
def test_partner_create(self):
""" Will test the compute and inverse methods of street fields when creating partner records. """
us_id = self.env.ref('base.us').id
mx_id = self.env.ref('base.mx').id
ch_id = self.env.ref('base.ch').id
input_values = [
{'country_id': us_id, 'street': '40/2b Chaussee de Namur'},
{'country_id': us_id, 'street': '40 Chaussee de Namur'},
{'country_id': us_id, 'street': 'Chaussee de Namur'},
{'country_id': mx_id, 'street': 'Av. Miguel Hidalgo y Costilla 601'},
{'country_id': mx_id, 'street': 'Av. Miguel Hidalgo y Costilla 601/40'},
{'country_id': ch_id, 'street': 'header Chaussee de Namur, 40 - 2b trailer'},
{'country_id': ch_id, 'street': 'header Chaussee de Namur, 40 trailer'},
{'country_id': ch_id, 'street': 'header Chaussee de Namur trailer'},
]
expected = [
{'street_name': 'Chaussee de Namur', 'street_number': '40', 'street_number2': '2b'},
{'street_name': 'Chaussee de Namur', 'street_number': '40', 'street_number2': False},
{'street_name': 'de Namur', 'street_number': 'Chaussee', 'street_number2': False},
{'street_name': 'Av. Miguel Hidalgo y Costilla', 'street_number': '601', 'street_number2': False},
{'street_name': 'Av. Miguel Hidalgo y Costilla', 'street_number': '601', 'street_number2': '40'},
{'street_name': 'Chaussee de Namur', 'street_number': '40', 'street_number2': '2b'},
{'street_name': 'Chaussee de Namur', 'street_number': '40', 'street_number2': False},
{'street_name': 'Chaussee de Namur', 'street_number': False, 'street_number2': False}
]
# test street -> street values (compute)
for partner_values, expected_vals in zip(input_values, expected):
partner_values['name'] = 'Test'
partner = self.env['res.partner'].create(partner_values)
self.assertStreetVals(partner, expected_vals)
# test street_values -> street (inverse)
for partner_values, expected_vals in zip(input_values, expected):
partner_values['name'] = 'Test'
expected_street = partner_values.pop('street')
partner_values.update(expected_vals)
partner = self.env['res.partner'].create(partner_values)
self.assertEqual(partner.street, expected_street)
self.assertStreetVals(partner, partner_values)
def test_partner_write(self):
""" Will test the compute and inverse methods of street fields when updating partner records. """
be_id = self.env.ref('base.be').id
partner = self.env['res.partner'].create({
'name': 'Test',
'country_id': be_id,
'street': 'Chaussee de Namur, 40/2b'
})
self.assertStreetVals(partner, {'street_name': 'Chaussee de Namur', 'street_number': '40', 'street_number2': '2b'})
input_values = [
{'street': 'Chaussee de Namur, 43'},
{'street': 'Chaussee de Namur'},
{'street_name': 'Chee de Namur', 'street_number': '40'},
{'street_number2': '4'},
{'country_id': self.env.ref('base.us').id},
]
expected = [
{'street_name': 'Chaussee de Namur', 'street_number': '43', 'street_number2': False},
{'street_name': 'Chaussee de Namur', 'street_number': False, 'street_number2': False},
{'street_name': 'Chee de Namur', 'street_number': '40', 'street_number2': False, 'street': 'Chee de Namur, 40'},
{'street_name': 'Chee de Namur', 'street_number': '40', 'street_number2': '4', 'street': 'Chee de Namur, 40/4'},
{'street_name': 'Chee de Namur', 'street_number': '40', 'street_number2': '4', 'street': '40/4 Chee de Namur'},
]
# test both compute and inverse (could probably be pimp)
for write_values, expected_vals in zip(input_values, expected):
partner.write(write_values)
self.assertStreetVals(partner, expected_vals)
|