mirror of
https://gitlab.com/flectra-community/partner-contact.git
synced 2024-11-15 10:42:06 +00:00
126 lines
5.1 KiB
Python
126 lines
5.1 KiB
Python
|
# Copyright 2017 Tecnativa - Vicent Cubells
|
||
|
# Copyright 2020 Tecnativa - João Marques
|
||
|
# Copyright 2020 Tecnativa - Pedro M. Baeza
|
||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||
|
|
||
|
from flectra.exceptions import ValidationError
|
||
|
from flectra.tests import common
|
||
|
|
||
|
|
||
|
class TestResPartnerRefUnique(common.TransactionCase):
|
||
|
@classmethod
|
||
|
def setUpClass(cls):
|
||
|
super().setUpClass()
|
||
|
cls.partner_obj = cls.env["res.partner"]
|
||
|
cls.company_obj = cls.env["res.company"]
|
||
|
# look for possible already duplicated refs for being resilient
|
||
|
cls.partner_obj.search([("ref", "!=", False)]).write({"ref": False})
|
||
|
cls.company = cls.company_obj.create({"name": "Test company"})
|
||
|
cls.env.user.write(
|
||
|
{"company_id": cls.company.id, "company_ids": cls.company.ids}
|
||
|
)
|
||
|
cls.partner1 = cls.partner_obj.create({"name": "Partner1", "company_id": False})
|
||
|
cls.partner2 = cls.partner_obj.create({"name": "Partner2", "company_id": False})
|
||
|
|
||
|
def test_check_ref_company(self):
|
||
|
(self.partner1 + self.partner2).write({"company_id": self.company.id})
|
||
|
# Test that we can create/modify partners with same ref in current situation
|
||
|
self.partner1.ref = "same_ref"
|
||
|
partner = self.partner_obj.create({"name": "other", "ref": "same_ref"})
|
||
|
# Try to activate restriction
|
||
|
with self.assertRaisesRegex(
|
||
|
ValidationError, "This reference is equal to partner"
|
||
|
):
|
||
|
self.company.partner_ref_unique = "all"
|
||
|
# Let the situation without duplicate refs and apply global condition
|
||
|
partner.unlink()
|
||
|
self.company.partner_ref_unique = "all"
|
||
|
with self.assertRaisesRegex(
|
||
|
ValidationError, "This reference is equal to partner"
|
||
|
):
|
||
|
self.partner2.ref = "same_ref"
|
||
|
with self.assertRaisesRegex(
|
||
|
ValidationError, "This reference is equal to partner"
|
||
|
):
|
||
|
self.partner_obj.create(
|
||
|
{"name": "other", "ref": "same_ref", "company_id": self.company.id}
|
||
|
)
|
||
|
# This one should also raise the constraint as the no-company contact
|
||
|
# collapses with the company specific contact
|
||
|
with self.assertRaisesRegex(
|
||
|
ValidationError, "This reference is equal to partner"
|
||
|
):
|
||
|
self.partner_obj.create(
|
||
|
{"name": "other", "ref": "same_ref", "company_id": False}
|
||
|
)
|
||
|
|
||
|
def test_partner1_wo_company_new_partner_w_company(self):
|
||
|
self.company.partner_ref_unique = "all"
|
||
|
self.partner1.write({"company_id": False, "ref": "same_ref"})
|
||
|
with self.assertRaisesRegex(
|
||
|
ValidationError, "This reference is equal to partner"
|
||
|
):
|
||
|
self.partner_obj.create(
|
||
|
{"name": "other", "ref": "same_ref", "company_id": self.company.id}
|
||
|
)
|
||
|
self.partner1.unlink()
|
||
|
|
||
|
def test_partner1_w_company_new_partner_wo_company(self):
|
||
|
self.company.partner_ref_unique = "all"
|
||
|
self.partner1.ref = "same_ref"
|
||
|
with self.assertRaisesRegex(
|
||
|
ValidationError, "This reference is equal to partner"
|
||
|
):
|
||
|
self.partner_obj.create(
|
||
|
{"name": "other", "ref": "same_ref", "company_id": False}
|
||
|
)
|
||
|
self.partner1.unlink()
|
||
|
|
||
|
def test_check_ref_companies(self):
|
||
|
self.company.partner_ref_unique = (
|
||
|
"none" # Ensure no constraint is applied at beginning
|
||
|
)
|
||
|
self.partner1.is_company = True
|
||
|
self.partner2.is_company = True
|
||
|
# Test that we can create/modify company partners
|
||
|
# with same ref in current situation
|
||
|
self.partner1.ref = "same_ref"
|
||
|
partner3 = self.partner_obj.create(
|
||
|
{"name": "Company3", "ref": "same_ref", "is_company": True}
|
||
|
)
|
||
|
# Try to activate restriction
|
||
|
with self.assertRaisesRegex(
|
||
|
ValidationError, "This reference is equal to partner"
|
||
|
):
|
||
|
self.company.partner_ref_unique = "companies"
|
||
|
# Let the situation without duplicate refs and apply global condition
|
||
|
partner3.unlink()
|
||
|
self.company.partner_ref_unique = "companies"
|
||
|
with self.assertRaisesRegex(
|
||
|
ValidationError, "This reference is equal to partner"
|
||
|
):
|
||
|
self.partner2.ref = "same_ref"
|
||
|
with self.assertRaisesRegex(
|
||
|
ValidationError, "This reference is equal to partner"
|
||
|
):
|
||
|
self.partner_obj.create(
|
||
|
{"is_company": True, "name": "other", "ref": "same_ref"}
|
||
|
)
|
||
|
# Here there shouldn't be any problem
|
||
|
self.partner_obj.create(
|
||
|
{"is_company": False, "name": "other", "ref": "same_ref"}
|
||
|
)
|
||
|
|
||
|
def test_merge(self):
|
||
|
self.company.partner_ref_unique = "all"
|
||
|
self.partner1.ref = "same_ref"
|
||
|
wizard = self.env["base.partner.merge.automatic.wizard"].create(
|
||
|
{
|
||
|
"partner_ids": [(4, self.partner1.id), (4, self.partner2.id)],
|
||
|
"dst_partner_id": self.partner2.id,
|
||
|
"state": "selection",
|
||
|
}
|
||
|
)
|
||
|
# this shouldn't raise error
|
||
|
wizard.action_merge()
|