# Copyright 2016 ACSONE SA/NV () # 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}) ] } )