summaryrefslogtreecommitdiff
path: root/odoo/addons/test_read_group
diff options
context:
space:
mode:
authorRaphael Collet <rco@openerp.com>2016-09-02 15:58:39 +0200
committerRaphael Collet <rco@openerp.com>2016-09-02 17:28:12 +0200
commit9e64f9f9514194d74e166b032add8511182f2677 (patch)
tree5086710c04c6b923be18a6d1d97b3f0f3a2a9c4a /odoo/addons/test_read_group
parent11812b0b9e82b2b1b9041d8250ce01e7b4a5f7ee (diff)
[REF] openerp: move `openerp` to `odoo`
Diffstat (limited to 'odoo/addons/test_read_group')
-rw-r--r--odoo/addons/test_read_group/__init__.py3
-rw-r--r--odoo/addons/test_read_group/__openerp__.py11
-rw-r--r--odoo/addons/test_read_group/ir.model.access.csv3
-rw-r--r--odoo/addons/test_read_group/models.py18
-rw-r--r--odoo/addons/test_read_group/tests/__init__.py3
-rw-r--r--odoo/addons/test_read_group/tests/test_empty.py59
-rw-r--r--odoo/addons/test_read_group/tests/test_group_operator.py198
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)