summaryrefslogtreecommitdiff
path: root/odoo/addons/test_read_group
diff options
context:
space:
mode:
authorRaphael Collet <rco@odoo.com>2020-05-20 12:23:06 +0000
committerRaphael Collet <rco@odoo.com>2020-05-20 12:44:38 +0000
commite950c395b7a2110a19af61220bee3fb8fa5799bc (patch)
treedfb2e70268f0762748fabb5974f54656e5373467 /odoo/addons/test_read_group
parent2adaeb589b0116b8f76f76f9c257b58786a7fabe (diff)
[IMP] test_read_group: read_group with one2many auto-joined fields
Diffstat (limited to 'odoo/addons/test_read_group')
-rw-r--r--odoo/addons/test_read_group/ir.model.access.csv2
-rw-r--r--odoo/addons/test_read_group/models.py15
-rw-r--r--odoo/addons/test_read_group/tests/__init__.py1
-rw-r--r--odoo/addons/test_read_group/tests/test_auto_join.py44
4 files changed, 62 insertions, 0 deletions
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)