You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
132 lines
4.5 KiB
132 lines
4.5 KiB
# Copyright 2016 ACSONE SA/NV (<http://acsone.eu>)
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
|
from psycopg2._psycopg import IntegrityError
|
|
|
|
from odoo.exceptions import UserError, ValidationError
|
|
from odoo.tests import common
|
|
from odoo.tools import mute_logger
|
|
|
|
|
|
class TestPartnerIdentificationBase(common.TransactionCase):
|
|
def test_create_id_category(self):
|
|
partner_id_category = self.env["res.partner.id_category"].create(
|
|
{"code": "id_code", "name": "id_name"}
|
|
)
|
|
self.assertEqual(partner_id_category.name, "id_name")
|
|
self.assertEqual(partner_id_category.code, "id_code")
|
|
|
|
@mute_logger("odoo.sql_db")
|
|
def test_update_partner_with_no_category(self):
|
|
partner_1 = self.env.ref("base.res_partner_1")
|
|
self.assertEqual(len(partner_1.id_numbers), 0)
|
|
# create without required category
|
|
with self.assertRaises(IntegrityError):
|
|
partner_1.write({"id_numbers": [(0, 0, {"name": "1234"})]})
|
|
|
|
def test_update_partner_with_category(self):
|
|
partner_1 = self.env.ref("base.res_partner_1")
|
|
partner_id_category = self.env["res.partner.id_category"].create(
|
|
{"code": "new_code", "name": "new_name"}
|
|
)
|
|
# successful creation
|
|
partner_1.write(
|
|
{
|
|
"id_numbers": [
|
|
(0, 0, {"name": "1234", "category_id": partner_id_category.id})
|
|
]
|
|
}
|
|
)
|
|
self.assertEqual(len(partner_1.id_numbers), 1)
|
|
self.assertEqual(partner_1.id_numbers.name, "1234")
|
|
# delete
|
|
partner_1.write({"id_numbers": [(5, 0, 0)]})
|
|
self.assertEqual(len(partner_1.id_numbers), 0)
|
|
|
|
|
|
class TestPartnerCategoryValidation(common.TransactionCase):
|
|
def test_partner_id_number_validation(self):
|
|
partner_id_category = self.env["res.partner.id_category"].create(
|
|
{
|
|
"code": "id_code",
|
|
"name": "id_name",
|
|
"validation_code": """
|
|
if id_number.name != '1234':
|
|
failed = True
|
|
""",
|
|
}
|
|
)
|
|
partner_1 = self.env.ref("base.res_partner_1")
|
|
with self.assertRaises(ValidationError), self.cr.savepoint():
|
|
partner_1.write(
|
|
{
|
|
"id_numbers": [
|
|
(0, 0, {"name": "01234", "category_id": partner_id_category.id})
|
|
]
|
|
}
|
|
)
|
|
partner_1.write(
|
|
{
|
|
"id_numbers": [
|
|
(0, 0, {"name": "1234", "category_id": partner_id_category.id})
|
|
]
|
|
}
|
|
)
|
|
self.assertEqual(len(partner_1.id_numbers), 1)
|
|
self.assertEqual(partner_1.id_numbers.name, "1234")
|
|
|
|
partner_id_category2 = self.env["res.partner.id_category"].create(
|
|
{
|
|
"code": "id_code2",
|
|
"name": "id_name2",
|
|
"validation_code": """
|
|
if id_number.name != '1235':
|
|
failed = True
|
|
""",
|
|
}
|
|
)
|
|
# check that the constrains is also checked when we change the
|
|
# associated category
|
|
with self.assertRaises(ValidationError), self.cr.savepoint():
|
|
partner_1.id_numbers.write({"category_id": partner_id_category2.id})
|
|
|
|
def test_bad_validation_code(self):
|
|
partner_id_category = self.env["res.partner.id_category"].create(
|
|
{
|
|
"code": "id_code",
|
|
"name": "id_name",
|
|
"validation_code": """
|
|
if id_number.name != '1234' # missing :
|
|
failed = True
|
|
""",
|
|
}
|
|
)
|
|
partner_1 = self.env.ref("base.res_partner_1")
|
|
with self.assertRaises(UserError):
|
|
partner_1.write(
|
|
{
|
|
"id_numbers": [
|
|
(0, 0, {"name": "1234", "category_id": partner_id_category.id})
|
|
]
|
|
}
|
|
)
|
|
|
|
def test_bad_validation_code_override(self):
|
|
""" It should allow a bad validation code if context overrides. """
|
|
partner_id_category = self.env["res.partner.id_category"].create(
|
|
{
|
|
"code": "id_code",
|
|
"name": "id_name",
|
|
"validation_code": """
|
|
if id_number.name != '1234' # missing :
|
|
failed = True
|
|
""",
|
|
}
|
|
)
|
|
partner_1 = self.env.ref("base.res_partner_1").with_context(id_no_validate=True)
|
|
partner_1.write(
|
|
{
|
|
"id_numbers": [
|
|
(0, 0, {"name": "1234", "category_id": partner_id_category.id})
|
|
]
|
|
}
|
|
)
|