224 lines
7.1 KiB
Python
224 lines
7.1 KiB
Python
# -*- coding: utf-8 -*-
|
|
from odoo.tests import common
|
|
|
|
|
|
class TestGroupOnSelection(common.TransactionCase):
|
|
def setUp(self):
|
|
super(TestGroupOnSelection, self).setUp()
|
|
self.Model = self.env['test_read_group.on_selection']
|
|
|
|
def test_none(self):
|
|
self.Model.create({'value': 1})
|
|
self.Model.create({'value': 2})
|
|
self.Model.create({'value': 3})
|
|
|
|
groups = self.Model.read_group([], fields=['state', 'value'], groupby=['state'])
|
|
self.assertEqual(groups, [
|
|
{
|
|
'state': 'a',
|
|
'state_count': 0,
|
|
'value': False,
|
|
'__domain': [('state', '=', 'a')],
|
|
},
|
|
{
|
|
'state': 'b',
|
|
'state_count': 0,
|
|
'value': False,
|
|
'__domain': [('state', '=', 'b')],
|
|
},
|
|
{
|
|
'state': False,
|
|
'state_count': 3,
|
|
'value': 6,
|
|
'__domain': [('state', '=', False)],
|
|
},
|
|
])
|
|
|
|
def test_partial(self):
|
|
self.Model.create({'state': 'a', 'value': 1})
|
|
self.Model.create({'state': 'a', 'value': 2})
|
|
self.Model.create({'value': 3})
|
|
|
|
groups = self.Model.read_group([], fields=['state', 'value'], groupby=['state'])
|
|
self.assertEqual(groups, [
|
|
{
|
|
'state': 'a',
|
|
'state_count': 2,
|
|
'value': 3,
|
|
'__domain': [('state', '=', 'a')],
|
|
},
|
|
{
|
|
'state': 'b',
|
|
'state_count': 0,
|
|
'value': False,
|
|
'__domain': [('state', '=', 'b')],
|
|
},
|
|
{
|
|
'state': False,
|
|
'state_count': 1,
|
|
'value': 3,
|
|
'__domain': [('state', '=', False)],
|
|
},
|
|
])
|
|
|
|
def test_full(self):
|
|
self.Model.create({'state': 'a', 'value': 1})
|
|
self.Model.create({'state': 'b', 'value': 2})
|
|
self.Model.create({'value': 3})
|
|
|
|
groups = self.Model.read_group([], fields=['state', 'value'], groupby=['state'])
|
|
self.assertEqual(groups, [
|
|
{
|
|
'state': 'a',
|
|
'state_count': 1,
|
|
'value': 1,
|
|
'__domain': [('state', '=', 'a')],
|
|
},
|
|
{
|
|
'state': 'b',
|
|
'state_count': 1,
|
|
'value': 2,
|
|
'__domain': [('state', '=', 'b')],
|
|
},
|
|
{
|
|
'state': False,
|
|
'state_count': 1,
|
|
'value': 3,
|
|
'__domain': [('state', '=', False)],
|
|
},
|
|
])
|
|
|
|
|
|
@common.tagged("test_read_group_selection")
|
|
class TestSelectionReadGroup(common.TransactionCase):
|
|
|
|
def setUp(self):
|
|
super().setUp()
|
|
self.Model = self.env['test_read_group.on_selection']
|
|
|
|
def test_static_group_expand(self):
|
|
# this test verifies that the following happens when grouping by a Selection field with
|
|
# group_expand=True:
|
|
# - the order of the returned groups is the same as the order in which the
|
|
# options are declared in the field definition.
|
|
# - the groups returned include the empty groups, i.e. all groups, even those
|
|
# that have no records assigned to them, this is a (wanted) side-effect of the
|
|
# implementation.
|
|
# - the false group, i.e. records without the Selection field set, is last.
|
|
self.Model.create([
|
|
{"value": 1, "static_expand": "a"},
|
|
{"value": 2, "static_expand": "c"},
|
|
{"value": 3},
|
|
])
|
|
|
|
groups = self.Model.read_group(
|
|
[],
|
|
fields=["static_expand", "value"],
|
|
groupby=["static_expand"],
|
|
)
|
|
self.assertEqual(groups, [
|
|
{
|
|
'static_expand': 'c',
|
|
'static_expand_count': 1,
|
|
'value': 2,
|
|
'__domain': [('static_expand', '=', 'c')],
|
|
},
|
|
{
|
|
'static_expand': 'b',
|
|
'static_expand_count': 0,
|
|
'value': 0,
|
|
'__domain': [('static_expand', '=', 'b')],
|
|
},
|
|
{
|
|
'static_expand': 'a',
|
|
'static_expand_count': 1,
|
|
'value': 1,
|
|
'__domain': [('static_expand', '=', 'a')],
|
|
},
|
|
{
|
|
'static_expand': False,
|
|
'static_expand_count': 1,
|
|
'value': 3,
|
|
'__domain': [('static_expand', '=', False)],
|
|
},
|
|
])
|
|
|
|
def test_dynamic_group_expand(self):
|
|
# this test tests the same as the above test but with a Selection field whose
|
|
# options are dynamic, this means that the result of read_group when grouping by this
|
|
# field can change from one call to another.
|
|
self.Model.create([
|
|
{"value": 1, "dynamic_expand": "a"},
|
|
{"value": 2, "dynamic_expand": "c"},
|
|
{"value": 3},
|
|
])
|
|
|
|
groups = self.Model.read_group(
|
|
[],
|
|
fields=["dynamic_expand", "value"],
|
|
groupby=["dynamic_expand"],
|
|
)
|
|
|
|
self.assertEqual(groups, [
|
|
{
|
|
'dynamic_expand': 'c',
|
|
'dynamic_expand_count': 1,
|
|
'value': 2,
|
|
'__domain': [('dynamic_expand', '=', 'c')],
|
|
},
|
|
{
|
|
'dynamic_expand': 'b',
|
|
'dynamic_expand_count': 0,
|
|
'value': 0,
|
|
'__domain': [('dynamic_expand', '=', 'b')],
|
|
},
|
|
{
|
|
'dynamic_expand': 'a',
|
|
'dynamic_expand_count': 1,
|
|
'value': 1,
|
|
'__domain': [('dynamic_expand', '=', 'a')],
|
|
},
|
|
{
|
|
'dynamic_expand': False,
|
|
'dynamic_expand_count': 1,
|
|
'value': 3,
|
|
'__domain': [('dynamic_expand', '=', False)],
|
|
},
|
|
])
|
|
|
|
def test_no_group_expand(self):
|
|
# if group_expand is not defined on a Selection field, it should return only the necessary
|
|
# groups and in alphabetical order (PostgreSQL ordering)
|
|
self.Model.create([
|
|
{"value": 1, "no_expand": "a"},
|
|
{"value": 2, "no_expand": "c"},
|
|
{"value": 3},
|
|
])
|
|
|
|
groups = self.Model.read_group(
|
|
[],
|
|
fields=["no_expand", "value"],
|
|
groupby=["no_expand"],
|
|
)
|
|
|
|
self.assertEqual(groups, [
|
|
{
|
|
'no_expand': 'a',
|
|
'no_expand_count': 1,
|
|
'value': 1,
|
|
'__domain': [('no_expand', '=', 'a')],
|
|
},
|
|
{
|
|
'no_expand': 'c',
|
|
'no_expand_count': 1,
|
|
'value': 2,
|
|
'__domain': [('no_expand', '=', 'c')],
|
|
},
|
|
{
|
|
'no_expand': False,
|
|
'no_expand_count': 1,
|
|
'value': 3,
|
|
'__domain': [('no_expand', '=', False)],
|
|
},
|
|
])
|