[IMP] test_read_group: read_group with one2many auto-joined fields
This commit is contained in:
@@ -4,3 +4,5 @@ access_test_read_group_aggregate_boolean,access_test_read_group_aggregate_boolea
|
||||
access_test_read_group_aggregate,access_test_read_group_aggregate,model_test_read_group_aggregate,,1,0,0,0
|
||||
access_test_read_group_on_selection,access_test_read_group_on_selection,model_test_read_group_on_selection,,1,0,0,0
|
||||
access_test_read_group_fill_temporal,access_test_read_group_fill_temporal,model_test_read_group_fill_temporal,,1,0,0,0
|
||||
access_test_read_group_order,access_test_read_group_order,model_test_read_group_order,,1,0,0,0
|
||||
access_test_read_group_order_line,access_test_read_group_order_line,model_test_read_group_order_line,,1,0,0,0
|
||||
|
||||
|
@@ -50,3 +50,18 @@ class FillTemporal(models.Model):
|
||||
date = fields.Date()
|
||||
datetime = fields.Datetime()
|
||||
value = fields.Integer()
|
||||
|
||||
|
||||
class Order(models.Model):
|
||||
_name = 'test_read_group.order'
|
||||
_description = 'Sales order'
|
||||
|
||||
line_ids = fields.One2many('test_read_group.order.line', 'order_id')
|
||||
|
||||
|
||||
class OrderLine(models.Model):
|
||||
_name = 'test_read_group.order.line'
|
||||
_description = 'Sales order line'
|
||||
|
||||
order_id = fields.Many2one('test_read_group.order', ondelete='cascade')
|
||||
value = fields.Integer()
|
||||
|
||||
@@ -3,3 +3,4 @@ from . import test_empty
|
||||
from . import test_group_expand
|
||||
from . import test_group_operator
|
||||
from . import test_fill_temporal
|
||||
from . import test_auto_join
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from odoo.tests import common
|
||||
|
||||
|
||||
class TestAutoJoin(common.TransactionCase):
|
||||
""" Test what happens when grouping with a domain using a one2many field with auto_join. """
|
||||
|
||||
def test_auto_join(self):
|
||||
model = self.env['test_read_group.order']
|
||||
records = model.create([{
|
||||
'line_ids': [(0, 0, {'value': 1}), (0, 0, {'value': 2})],
|
||||
}, {
|
||||
'line_ids': [(0, 0, {'value': 1})],
|
||||
}])
|
||||
|
||||
domain1 = [('id', 'in', records.ids), ('line_ids.value', '=', 1)]
|
||||
domain2 = [('id', 'in', records.ids), ('line_ids.value', '>', 0)]
|
||||
|
||||
# reference results
|
||||
self.assertEqual(len(model.search(domain1)), 2)
|
||||
self.assertEqual(len(model.search(domain2)), 2)
|
||||
|
||||
result1 = model.read_group(domain1, [], [])
|
||||
self.assertEqual(len(result1), 1)
|
||||
self.assertEqual(result1[0]['__count'], 2)
|
||||
|
||||
result2 = model.read_group(domain2, [], [])
|
||||
self.assertEqual(len(result2), 1)
|
||||
self.assertEqual(result2[0]['__count'], 2)
|
||||
|
||||
# same requests, with auto_join
|
||||
self.patch(type(model).line_ids, 'auto_join', True)
|
||||
|
||||
self.assertEqual(len(model.search(domain1)), 2)
|
||||
self.assertEqual(len(model.search(domain2)), 2)
|
||||
|
||||
result1 = model.read_group(domain1, [], [])
|
||||
self.assertEqual(len(result1), 1)
|
||||
self.assertEqual(result1[0]['__count'], 2)
|
||||
|
||||
# TO FIX: the first record is counted twice!
|
||||
result2 = model.read_group(domain2, [], [])
|
||||
self.assertEqual(len(result2), 1)
|
||||
self.assertEqual(result2[0]['__count'], 3)
|
||||
Reference in New Issue
Block a user