diff --git a/partner_firstname/models/res_partner.py b/partner_firstname/models/res_partner.py index 63d5318c75b..4a80f6fbe75 100644 --- a/partner_firstname/models/res_partner.py +++ b/partner_firstname/models/res_partner.py @@ -4,8 +4,10 @@ # Copyright 2024 Simone Rubino - Aion Tech # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). import logging +from collections import defaultdict from odoo import _, api, fields, models +from odoo.tools import frozendict from .. import exceptions @@ -58,6 +60,7 @@ def create(self, vals_list): the correct context. """ created_partners = self.browse() + vals_by_context = defaultdict(list) for vals in vals_list: partner_context = dict(self.env.context) is_company = vals.get("company_type") == "company" @@ -78,10 +81,12 @@ def create(self, vals_list): # Remove the combined fields vals.pop("name", None) partner_context.pop("default_name", None) + vals_by_context[frozendict(partner_context)].append(vals) + for partner_context, vals_list in vals_by_context.items(): # pylint: disable=W8121 created_partners |= super( ResPartner, self.with_context(partner_context) - ).create([vals]) + ).create(vals_list) return created_partners def get_extra_default_copy_values(self, order): @@ -226,7 +231,7 @@ def _get_inverse_name(self, name, is_company=False): """ # Company name goes to the lastname if is_company or not name: - parts = [name or False, False] + parts = [name, False] # Guess name splitting else: order = self._get_names_order() @@ -259,7 +264,7 @@ def _check_name(self): if all( ( record.type == "contact" or record.is_company, - not (record.firstname or record.lastname), + record.firstname is False and record.lastname is False, ) ): raise exceptions.EmptyNamesError(record, self.env) diff --git a/partner_firstname/readme/newsfragments/2227.bugfix.rst b/partner_firstname/readme/newsfragments/2227.bugfix.rst new file mode 100644 index 00000000000..bfbabd714db --- /dev/null +++ b/partner_firstname/readme/newsfragments/2227.bugfix.rst @@ -0,0 +1 @@ +Fix so that mail tests succeed. diff --git a/partner_firstname/tests/test_create.py b/partner_firstname/tests/test_create.py index 52c0e65db67..56f7ec4f82e 100644 --- a/partner_firstname/tests/test_create.py +++ b/partner_firstname/tests/test_create.py @@ -52,6 +52,19 @@ def test_wrong_name_value_and_context(self): self.context["default_name"] = "BÄD2" +class PersonEmptyCase(TransactionCase): + context = {"default_is_company": False} + model = "res.partner" + + def test_name_empty_string(self): + """Test what happens when the name is an empty string.""" + self.record = ( + self.env[self.model].with_context(**self.context).create({"name": ""}) + ) + for key, value in (("name", ""), ("lastname", "")): + self.assertEqual(self.record[key], value, f"Checking key {key}") + + class CompanyCase(PersonCase): """Test ``res.partner`` when it is a company.""" @@ -63,6 +76,12 @@ def setUp(self): self.values = self.good_values.copy() +class CompanyEmptyCase(PersonEmptyCase): + """Test ``res.partner`` when it is a company.""" + + context = {"default_is_company": True} + + class UserCase(PersonCase, MailInstalled): """Test ``res.users``.""" @@ -77,3 +96,10 @@ def tearDown(self): else: # Run tests super().tearDown() + + +class UserEmptyCase(PersonEmptyCase, MailInstalled): + """Test ``res.users``.""" + + model = "res.users" + context = {"default_login": "user@example.com"} diff --git a/partner_firstname/tests/test_empty.py b/partner_firstname/tests/test_empty.py index 0938b75dab1..e3de8cfb6f6 100644 --- a/partner_firstname/tests/test_empty.py +++ b/partner_firstname/tests/test_empty.py @@ -27,10 +27,6 @@ def tearDown(self): finally: super().tearDown() - def test_name_empty_string(self): - """Test what happens when the name is an empty string.""" - self.name = "" - def test_name_false(self): """Test what happens when the name is ``False``.""" self.name = False diff --git a/partner_firstname/tests/test_partner_form.py b/partner_firstname/tests/test_partner_form.py index 54c5f51af28..14136b1c7c3 100644 --- a/partner_firstname/tests/test_partner_form.py +++ b/partner_firstname/tests/test_partner_form.py @@ -8,8 +8,6 @@ from odoo.tests import Form, TransactionCase -from ..exceptions import EmptyNamesError - class PartnerCompanyCase(TransactionCase): is_company = True @@ -42,10 +40,13 @@ def test_empty_name(self): self.assertEqual(partner_form.firstname, False) self.assertEqual(partner_form.lastname, name) - # User unsets name + # User empty name partner_form.name = "" + partner_form.save() + # User unsets name + partner_form.name = False # call save to trigger the inverse and therefore raise an exception - with self.assertRaises(EmptyNamesError), self.env.cr.savepoint(): + with self.assertRaises(AssertionError), self.env.cr.savepoint(): partner_form.save() name += " bis" @@ -70,6 +71,7 @@ def test_create_from_form_only_firstname(self): # Changes firstname, which triggers compute partner_form.firstname = firstname + partner_form.lastname = False self.assertEqual(partner_form.lastname, False) self.assertEqual(partner_form.firstname, firstname) diff --git a/partner_firstname/tests/test_user_form.py b/partner_firstname/tests/test_user_form.py index 41d1fdb1dd6..d9437562b26 100644 --- a/partner_firstname/tests/test_user_form.py +++ b/partner_firstname/tests/test_user_form.py @@ -13,6 +13,7 @@ def test_create_from_form_only_firstname(self): user_form.login = login # Changes firstname, which triggers onchanges user_form.firstname = firstname + user_form.lastname = False self.assertEqual(user_form.lastname, False) self.assertEqual(user_form.firstname, firstname)