diff --git a/odoo/addons/test_performance/tests/test_performance.py b/odoo/addons/test_performance/tests/test_performance.py index 4129cd2dfd6..917ab833178 100644 --- a/odoo/addons/test_performance/tests/test_performance.py +++ b/odoo/addons/test_performance/tests/test_performance.py @@ -2,12 +2,12 @@ # Part of Odoo. See LICENSE file for full copyright and licensing details. from collections import defaultdict -import json +from unittest.mock import patch import logging from odoo.addons.base.tests.common import SavepointCaseWithUserDemo from odoo.tests.common import TransactionCase, users, warmup, tagged -from odoo.tools import mute_logger, json_default, sql +from odoo.tools import mute_logger, sql from odoo import Command _logger = logging.getLogger(__name__) @@ -634,6 +634,19 @@ class TestPerformance(SavepointCaseWithUserDemo): result = model.read_group([], ['partner_id', 'value'], ['partner_id']) self.assertEqual(result, expected) + # Modify the data so that each record has the same partner, + # and test that the _compute_display_name is called once with the correct recordset. + all_records = model.search([]) + all_records.partner_id = all_records[0].partner_id + self.env.invalidate_all() + + old_compute_display_name = self.registry['res.partner']._compute_display_name + + with patch.object(self.registry['res.partner'], '_compute_display_name', side_effect=old_compute_display_name, autospec=True) as compute_display_name_spy: + model.read_group([], ['__count'], ['partner_id', 'value'], lazy=False) + compute_display_name_spy.assert_called_once() + self.assertEqual(compute_display_name_spy.call_args.args[0].id, all_records[0].partner_id.id) + @tagged('bacon_and_eggs') class TestIrPropertyOptimizations(TransactionCase): diff --git a/odoo/models.py b/odoo/models.py index 85a9014c358..06aed8af6b5 100644 --- a/odoo/models.py +++ b/odoo/models.py @@ -2471,8 +2471,8 @@ class BaseModel(metaclass=MetaModel): or a string 'field:granularity'. Right now, the only supported granularities are 'day', 'week', 'month', 'quarter' or 'year', and they only make sense for date/datetime fields. - :param int offset: optional number of records to skip - :param int limit: optional max number of records to return + :param int offset: optional number of groups to skip + :param int limit: optional max number of groups to return :param str orderby: optional ``order by`` specification, for overriding the natural sort ordering of the groups, see also :py:meth:`~osv.osv.osv.search`