diff options
| author | Raphael Collet <rco@openerp.com> | 2016-09-02 15:58:39 +0200 |
|---|---|---|
| committer | Raphael Collet <rco@openerp.com> | 2016-09-02 17:28:12 +0200 |
| commit | 9e64f9f9514194d74e166b032add8511182f2677 (patch) | |
| tree | 5086710c04c6b923be18a6d1d97b3f0f3a2a9c4a /odoo/addons/test_read_group | |
| parent | 11812b0b9e82b2b1b9041d8250ce01e7b4a5f7ee (diff) | |
[REF] openerp: move `openerp` to `odoo`
Diffstat (limited to 'odoo/addons/test_read_group')
| -rw-r--r-- | odoo/addons/test_read_group/__init__.py | 3 | ||||
| -rw-r--r-- | odoo/addons/test_read_group/__openerp__.py | 11 | ||||
| -rw-r--r-- | odoo/addons/test_read_group/ir.model.access.csv | 3 | ||||
| -rw-r--r-- | odoo/addons/test_read_group/models.py | 18 | ||||
| -rw-r--r-- | odoo/addons/test_read_group/tests/__init__.py | 3 | ||||
| -rw-r--r-- | odoo/addons/test_read_group/tests/test_empty.py | 59 | ||||
| -rw-r--r-- | odoo/addons/test_read_group/tests/test_group_operator.py | 198 |
7 files changed, 295 insertions, 0 deletions
diff --git a/odoo/addons/test_read_group/__init__.py b/odoo/addons/test_read_group/__init__.py new file mode 100644 index 00000000000..cde864bae21 --- /dev/null +++ b/odoo/addons/test_read_group/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +from . import models diff --git a/odoo/addons/test_read_group/__openerp__.py b/odoo/addons/test_read_group/__openerp__.py new file mode 100644 index 00000000000..3b3bd4d4025 --- /dev/null +++ b/odoo/addons/test_read_group/__openerp__.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +{ + 'name': "test read_group", + 'description': "Tests for read_group", + + 'category': 'Tests', + 'version': '0.1', + + 'depends': ['base'], + 'data': ['ir.model.access.csv'], +} diff --git a/odoo/addons/test_read_group/ir.model.access.csv b/odoo/addons/test_read_group/ir.model.access.csv new file mode 100644 index 00000000000..9660fbbc4a2 --- /dev/null +++ b/odoo/addons/test_read_group/ir.model.access.csv @@ -0,0 +1,3 @@ +"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink" +access_test_read_group_on_date,access_test_read_group_on_date,model_test_read_group_on_date,,1,0,0,0 +access_test_read_group_aggregate_boolean,access_test_read_group_aggregate_boolean,model_test_read_group_aggregate_boolean,,1,0,0,0 diff --git a/odoo/addons/test_read_group/models.py b/odoo/addons/test_read_group/models.py new file mode 100644 index 00000000000..c8456edd5a9 --- /dev/null +++ b/odoo/addons/test_read_group/models.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- +from openerp import fields, models + + +class GroupOnDate(models.Model): + _name = 'test_read_group.on_date' + + date = fields.Date("Date") + value = fields.Integer("Value") + +class BooleanAggregate(models.Model): + _name = 'test_read_group.aggregate.boolean' + _order = 'key DESC' + + key = fields.Integer() + bool_and = fields.Boolean(default=False, group_operator='bool_and') + bool_or = fields.Boolean(default=False, group_operator='bool_or') + bool_array = fields.Boolean(default=False, group_operator='array_agg') diff --git a/odoo/addons/test_read_group/tests/__init__.py b/odoo/addons/test_read_group/tests/__init__.py new file mode 100644 index 00000000000..e0cde2af5e1 --- /dev/null +++ b/odoo/addons/test_read_group/tests/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- +from . import test_empty +from . import test_group_operator diff --git a/odoo/addons/test_read_group/tests/test_empty.py b/odoo/addons/test_read_group/tests/test_empty.py new file mode 100644 index 00000000000..d08a881d71f --- /dev/null +++ b/odoo/addons/test_read_group/tests/test_empty.py @@ -0,0 +1,59 @@ +# -*- coding: utf-8 -*- +from openerp.tests import common + + +class TestEmptyDate(common.TransactionCase): + """ Test what happens when grouping on date fields and getting a "false" + grouping value + """ + def setUp(self): + super(TestEmptyDate, self).setUp() + self.Model = self.env['test_read_group.on_date'] + + def test_empty_only(self): + self.Model.create({'value': 1}) + self.Model.create({'value': 2}) + self.Model.create({'value': 3}) + + gb = self.Model.read_group([], ['date', 'value'], ['date'], lazy=False) + + self.assertEqual(gb, [{ + '__count': 3, + '__domain': [('date', '=', False)], + 'date': False, + 'value': 6 + }]) + + def test_empty_by_span(self): + self.Model.create({'value': 1}) + self.Model.create({'value': 2}) + self.Model.create({'value': 3}) + + gb = self.Model.read_group([], ['date', 'value'], ['date:quarter'], lazy=False) + + self.assertEqual(gb, [{ + '__count': 3, + '__domain': [('date', '=', False)], + 'date:quarter': False, + 'value': 6 + }]) + + def test_mixed(self): + self.Model.create({'date': False, 'value': 1}) + self.Model.create({'date': False, 'value': 2}) + self.Model.create({'date': '1916-12-18', 'value': 3}) + self.Model.create({'date': '1916-12-18', 'value': 4}) + + gb = self.Model.read_group([], ['date', 'value'], ['date'], lazy=False) + + self.assertSequenceEqual(sorted(gb, key=lambda r: r['date']), [{ + '__count': 2, + '__domain': [('date', '=', False)], + 'date': False, + 'value': 3, + }, { + '__count': 2, + '__domain': ['&', ('date', '>=', '1916-12-01'), ('date', '<', '1917-01-01')], + 'date': 'December 1916', + 'value': 7, + }]) 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) |
