33 lines
1.5 KiB
Python
33 lines
1.5 KiB
Python
|
from psycopg2.errors import GroupingError
|
||
|
|
||
|
from odoo import models
|
||
|
from odoo.tests.common import tagged, TransactionCase
|
||
|
|
||
|
|
||
|
@tagged('-at_install', 'post_install')
|
||
|
class TestReadGroupOverride(TransactionCase):
|
||
|
def test_order_for_groupby(self):
|
||
|
Order = self.env['test_read_group.order']
|
||
|
many2one_field = Order._fields['many2one_id']
|
||
|
self.addCleanup(setattr, many2one_field, 'comodel_name', many2one_field.comodel_name)
|
||
|
BaseModel = models.BaseModel
|
||
|
for Model in self.env.registry.values():
|
||
|
if not Model._abstract and Model._auto and (
|
||
|
Model._order_field_to_sql is not BaseModel._order_field_to_sql
|
||
|
or Model._order_to_sql is not BaseModel._order_to_sql
|
||
|
or Model._read_group_orderby is not BaseModel._read_group_orderby
|
||
|
):
|
||
|
# methods for customized order are overridden by Model
|
||
|
# change comodel_name of a many2one field as a hack for the test
|
||
|
many2one_field.comodel_name = Model._name
|
||
|
try:
|
||
|
Order.read_group([], ['many2one_id'], ['many2one_id'])
|
||
|
except GroupingError as e:
|
||
|
self.assertEqual(
|
||
|
e, None,
|
||
|
f'Bad method override for model {Model._name}. '
|
||
|
'Fields used by both customized order and Model._order '
|
||
|
'must be added to the query.groupby when query.groupby '
|
||
|
'is not empty to avoid GroupingError.'
|
||
|
)
|