diff options
Diffstat (limited to 'odoo/addons/test_read_group/tests/test_group_operator.py')
| -rw-r--r-- | odoo/addons/test_read_group/tests/test_group_operator.py | 198 |
1 files changed, 198 insertions, 0 deletions
diff --git a/odoo/addons/test_read_group/tests/test_group_operator.py b/odoo/addons/test_read_group/tests/test_group_operator.py new file mode 100644 index 00000000000..dcdaf1159e8 --- /dev/null +++ b/odoo/addons/test_read_group/tests/test_group_operator.py @@ -0,0 +1,198 @@ +# -*- coding: utf-8 -*- +from openerp.tests import common + + +class TestGroupBooleans(common.TransactionCase): + + def setUp(self): + super(TestGroupBooleans, self).setUp() + self.Model = self.env['test_read_group.aggregate.boolean'] + + def test_no_value(self): + groups = self.Model.read_group( + domain=[], + fields=['key', 'bool_and', 'bool_or', 'bool_array'], + groupby=['key'], + ) + + self.assertEqual([], groups) + + def test_agg_and(self): + # and(true, true) + self.Model.create({ + 'key': 1, + 'bool_and': True + }) + self.Model.create({ + 'key': 1, + 'bool_and': True + }) + # and(true, false) + self.Model.create({'key': 2, 'bool_and': True}) + self.Model.create({'key': 2, 'bool_and': False}) + # and(false, false) + self.Model.create({'key': 3, 'bool_and': False}) + self.Model.create({'key': 3, 'bool_and': False}) + + groups = self.Model.read_group( + domain=[], + fields=['key', 'bool_and'], + groupby=['key'], + ) + + self.assertEqual([ + { + 'key_count': 2, + '__domain': [('key', '=', 1)], + 'key': 1, + 'bool_and': True + }, + { + 'key_count': 2, + '__domain': [('key', '=', 2)], + 'key': 2, + 'bool_and': False + }, + { + 'key_count': 2, + '__domain': [('key', '=', 3)], + 'key': 3, + 'bool_and': False + }, + ], groups) + + + def test_agg_or(self): + # or(true, true) + self.Model.create({ + 'key': 1, + 'bool_or': True + }) + self.Model.create({ + 'key': 1, + 'bool_or': True + }) + # or(true, false) + self.Model.create({'key': 2, 'bool_or': True}) + self.Model.create({'key': 2, 'bool_or': False}) + # or(false, false) + self.Model.create({'key': 3, 'bool_or': False}) + self.Model.create({'key': 3, 'bool_or': False}) + + groups = self.Model.read_group( + domain=[], + fields=['key', 'bool_or'], + groupby=['key'], + ) + + self.assertEqual([ + { + 'key_count': 2, + '__domain': [('key', '=', 1)], + 'key': 1, + 'bool_or': True + }, + { + 'key_count': 2, + '__domain': [('key', '=', 2)], + 'key': 2, + 'bool_or': True + }, + { + 'key_count': 2, + '__domain': [('key', '=', 3)], + 'key': 3, + 'bool_or': False + }, + ], groups) + + def test_agg_array(self): + # array(true, true) + self.Model.create({ + 'key': 1, + 'bool_array': True + }) + self.Model.create({ + 'key': 1, + 'bool_array': True + }) + # array(true, false) + self.Model.create({'key': 2, 'bool_array': True}) + self.Model.create({'key': 2, 'bool_array': False}) + # array(false, false) + self.Model.create({'key': 3, 'bool_array': False}) + self.Model.create({'key': 3, 'bool_array': False}) + + groups = self.Model.read_group( + domain=[], + fields=['key', 'bool_array'], + groupby=['key'], + ) + + self.assertEqual([ + { + 'key_count': 2, + '__domain': [('key', '=', 1)], + 'key': 1, + 'bool_array': [True, True] + }, + { + 'key_count': 2, + '__domain': [('key', '=', 2)], + 'key': 2, + 'bool_array': [True, False] + }, + { + 'key_count': 2, + '__domain': [('key', '=', 3)], + 'key': 3, + 'bool_array': [False, False] + }, + ], groups) + + def test_group_by_aggregable(self): + self.Model.create({'bool_and': False, 'key': 1, 'bool_array': True}) + self.Model.create({'bool_and': False, 'key': 2, 'bool_array': True}) + self.Model.create({'bool_and': False, 'key': 2, 'bool_array': True}) + self.Model.create({'bool_and': True, 'key': 2, 'bool_array': True}) + self.Model.create({'bool_and': True, 'key': 3, 'bool_array': True}) + self.Model.create({'bool_and': True, 'key': 3, 'bool_array': True}) + + groups = self.Model.read_group( + domain=[], + fields=['key', 'bool_and', 'bool_array'], + groupby=['bool_and', 'key'], + lazy=False + ) + + self.assertEqual([ + { + 'bool_and': False, + 'key': 1, + 'bool_array': [True], + '__count': 1, + '__domain': ['&', ('bool_and', '=', False), ('key', '=', 1)] + }, + { + 'bool_and': False, + 'key': 2, + 'bool_array': [True, True], + '__count': 2, + '__domain': ['&', ('bool_and', '=', False), ('key', '=', 2)] + + }, + { + 'bool_and': True, + 'key': 2, + 'bool_array': [True], + '__count': 1, + '__domain': ['&', ('bool_and', '=', True), ('key', '=', 2)] + }, + { + 'bool_and': True, + 'key': 3, + 'bool_array': [True, True], + '__count': 2, + '__domain': ['&', ('bool_and', '=', True), ('key', '=', 3)] + } + ], groups) |
