diff --git a/addons/web/models/models.py b/addons/web/models/models.py index 3ba8d72c389..cb56c4ac5a3 100644 --- a/addons/web/models/models.py +++ b/addons/web/models/models.py @@ -185,7 +185,7 @@ class Base(models.AbstractModel): elif limit and len(groups) == limit: length = limit + len(self._read_group( domain, - groupby=groupby if not lazy else groupby[0], + groupby=groupby if not lazy else [groupby[0]], offset=limit, order=orderby, )) diff --git a/odoo/addons/test_new_api/tests/__init__.py b/odoo/addons/test_new_api/tests/__init__.py index 55171939197..2f39b0a808d 100644 --- a/odoo/addons/test_new_api/tests/__init__.py +++ b/odoo/addons/test_new_api/tests/__init__.py @@ -15,3 +15,4 @@ from . import test_domain from . import test_schema from . import test_company_checks from . import test_unity_read +from . import test_web_read_group diff --git a/odoo/addons/test_new_api/tests/test_web_read_group.py b/odoo/addons/test_new_api/tests/test_web_read_group.py new file mode 100644 index 00000000000..5223310b1d5 --- /dev/null +++ b/odoo/addons/test_new_api/tests/test_web_read_group.py @@ -0,0 +1,41 @@ +from odoo.tests.common import TransactionCase + + +class TestWebReadGroup(TransactionCase): + + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.env['test_new_api.multi.tag'].create([ + {'name': 'one'}, + {'name': 'two'}, + {'name': 'two'}, + {'name': 'there'}, + {'name': 'there'}, + {'name': 'there'}, + ]) + + def test_web_read_group_limit_not_reached(self): + result = self.env['test_new_api.multi.tag'].web_read_group( + [], ['__count'], ['name'], limit=80, + ) + self.assertEqual(result, { + 'groups': [ + {'name': 'one', 'name_count': 1, '__domain': [('name', '=', 'one')]}, + {'name': 'there', 'name_count': 3, '__domain': [('name', '=', 'there')]}, + {'name': 'two', 'name_count': 2, '__domain': [('name', '=', 'two')]}, + ], + 'length': 3, + }) + + def test_web_read_group_limit_reached(self): + result = self.env['test_new_api.multi.tag'].web_read_group( + [], ['__count'], ['name'], limit=2, + ) + self.assertEqual(result, { + 'groups': [ + {'name': 'one', 'name_count': 1, '__domain': [('name', '=', 'one')]}, + {'name': 'there', 'name_count': 3, '__domain': [('name', '=', 'there')]}, + ], + 'length': 3, + })