Files
odoo_source/addons/base_address_extended/tests/test_street_fields.py
T
2021-12-14 19:13:18 +00:00

174 lines
9.8 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import models
from odoo.tests.common import TransactionCase
class TestStreetFields(TransactionCase):
@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)):
values = dict(company_values, name='Test-%2d' % idx)
company = self.env['res.company'].create(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)):
values = dict(company_values)
values['name'] = 'TestNew-%2d' % idx
expected_street = values.pop('street')
values.update(expected_vals)
company = self.env['res.company'].create(values)
self.assertEqual(company.street, expected_street)
self.assertStreetVals(company, values)
self.assertEqual(company.partner_id.street, expected_street)
self.assertStreetVals(company.partner_id, 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)