From e950c395b7a2110a19af61220bee3fb8fa5799bc Mon Sep 17 00:00:00 2001 From: Raphael Collet Date: Wed, 20 May 2020 12:23:06 +0000 Subject: [PATCH] [IMP] test_read_group: read_group with one2many auto-joined fields --- .../test_read_group/ir.model.access.csv | 2 + odoo/addons/test_read_group/models.py | 15 +++++++ odoo/addons/test_read_group/tests/__init__.py | 1 + .../test_read_group/tests/test_auto_join.py | 44 +++++++++++++++++++ 4 files changed, 62 insertions(+) create mode 100644 odoo/addons/test_read_group/tests/test_auto_join.py diff --git a/odoo/addons/test_read_group/ir.model.access.csv b/odoo/addons/test_read_group/ir.model.access.csv index eee7386d494..359aa22dc15 100644 --- a/odoo/addons/test_read_group/ir.model.access.csv +++ b/odoo/addons/test_read_group/ir.model.access.csv @@ -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 diff --git a/odoo/addons/test_read_group/models.py b/odoo/addons/test_read_group/models.py index ac9592485dd..d1a2a37e481 100644 --- a/odoo/addons/test_read_group/models.py +++ b/odoo/addons/test_read_group/models.py @@ -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() diff --git a/odoo/addons/test_read_group/tests/__init__.py b/odoo/addons/test_read_group/tests/__init__.py index 4821faa7571..f97adcd1bd8 100644 --- a/odoo/addons/test_read_group/tests/__init__.py +++ b/odoo/addons/test_read_group/tests/__init__.py @@ -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 diff --git a/odoo/addons/test_read_group/tests/test_auto_join.py b/odoo/addons/test_read_group/tests/test_auto_join.py new file mode 100644 index 00000000000..6c5e7a88f77 --- /dev/null +++ b/odoo/addons/test_read_group/tests/test_auto_join.py @@ -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)