Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 8 additions & 3 deletions partner_firstname/models/res_partner.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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"
Expand All @@ -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):
Expand Down Expand Up @@ -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()
Expand Down Expand Up @@ -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)
Expand Down
1 change: 1 addition & 0 deletions partner_firstname/readme/newsfragments/2227.bugfix.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fix so that mail tests succeed.
26 changes: 26 additions & 0 deletions partner_firstname/tests/test_create.py
Original file line number Diff line number Diff line change
Expand Up @@ -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."""

Expand All @@ -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``."""

Expand All @@ -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": "[email protected]"}
4 changes: 0 additions & 4 deletions partner_firstname/tests/test_empty.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
10 changes: 6 additions & 4 deletions partner_firstname/tests/test_partner_form.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,6 @@

from odoo.tests import Form, TransactionCase

from ..exceptions import EmptyNamesError


class PartnerCompanyCase(TransactionCase):
is_company = True
Expand Down Expand Up @@ -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"
Expand All @@ -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)
Expand Down
1 change: 1 addition & 0 deletions partner_firstname/tests/test_user_form.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down