summaryrefslogtreecommitdiff
path: root/addons/web/tests
diff options
context:
space:
mode:
authorLucas Lefèvre <lul@odoo.com>2019-10-10 11:08:51 +0200
committerfw-bot <otis@odoo.com>2019-10-16 15:49:49 +0000
commit645ae69bb94bb810c7afc031d9eee9e89784a3df (patch)
tree3801aa12b1a4419b03b03c84b154ec6bb9cb246e /addons/web/tests
parente76c65e8b4a75df13e00f2b44e297deafa9e51e4 (diff)
[FIX] web: Correctly aggregate values in exported parent groups
When exporting a grouped list view with some nested groups, the aggregate value of parent groups are not correct. It always sums aggregated values of children whether the group operator is 'sum' or not (could be 'max', 'avg', ...). This behavior is wrong and can even lead to a crash if the aggregated field is a date field (e.g. with group_operator='max'). (Try two sum two dates...) The quick fix 85cf47f was merged just before OXP to avoid any crash. This fix limited the support of aggregates to only int and float fields. This commit remove this limitation. This commit correclty implements the aggregation for parent group for all field types and all group_operator. This commit also improves the export feature tests. X-original-commit: 5e7e4fa98698967e3c4fd0903f4aa8e91981a6cd
Diffstat (limited to 'addons/web/tests')
-rw-r--r--addons/web/tests/__init__.py1
-rw-r--r--addons/web/tests/test_export.py176
2 files changed, 0 insertions, 177 deletions
diff --git a/addons/web/tests/__init__.py b/addons/web/tests/__init__.py
index b479a574e46..1ed329bafe1 100644
--- a/addons/web/tests/__init__.py
+++ b/addons/web/tests/__init__.py
@@ -6,4 +6,3 @@ from . import test_js
from . import test_menu
from . import test_serving_base
from . import test_click_everywhere
-from . import test_export
diff --git a/addons/web/tests/test_export.py b/addons/web/tests/test_export.py
deleted file mode 100644
index b0fed393e10..00000000000
--- a/addons/web/tests/test_export.py
+++ /dev/null
@@ -1,176 +0,0 @@
-# -*- coding: utf-8 -*-
-# Part of Odoo. See LICENSE file for full copyright and licensing details.
-
-from unittest.mock import patch
-import json
-from odoo import http
-from odoo.tests import common, new_test_user
-from odoo.addons.web.controllers.main import ExportXlsxWriter
-
-
-class TestExport(common.HttpCase):
-
- def setUp(self):
- super().setUp()
-
- # Archive demo partners
- self.env['res.users'].search([]).active = False
- self.env['res.partner'].search([]).active = False
- new_test_user(self.env, login='fef', password='pwd')
- self.authenticate('fef', 'pwd')
-
- self.env['res.partner'].create([{
- 'name': 'partner 1',
- 'comment': 'yop',
- 'website': 'yop.com',
- 'credit_limit': 0,
- },{
- 'name': 'partner 2',
- 'comment': 'yop',
- 'website': 'blop.com',
- 'credit_limit': 3,
- },{
- 'name': 'partner 3',
- 'comment': 'yop',
- 'website': 'blop.com',
- 'credit_limit': 1,
- }, {
- 'name': 'partner 4',
- 'comment': 'blop',
- 'website': 'blop.com',
- 'credit_limit': 2,
- }])
-
- self.worksheet = {} # mock worksheet
-
- self.default_params = {
- 'domain': [],
- 'fields': [{
- 'label': "Partner name",
- 'name': 'name',
- }, {
- 'label': "Comment",
- 'name': "comment",
- }, {
- 'label': 'Website',
- 'name': 'website',
- }],
- 'groupby': [],
- 'ids': False,
- 'import_compat': False,
- 'model': 'res.partner',
- }
-
- def mock_write(self, row, column, value, style=None):
- self.worksheet[row, column] = value
-
- def test_grouped_list_export(self):
-
- with patch.object(ExportXlsxWriter, 'write', self.mock_write):
- self.default_params['groupby'] = ['comment', 'website']
- params = dict(self.default_params, **{
- 'groupby': ['comment', 'website'],
- 'fields': [*self.default_params['fields'], {'label': "Credit Limit", 'name': 'credit_limit'}]
- })
- self.url_open('/web/export/xlsx', data={
- 'data': json.dumps(params),
- 'token': 'dummy',
- 'csrf_token': http.WebRequest.csrf_token(self),
- })
-
- # Main header
- self.assertEqual(self.worksheet[0, 0], "Partner name", "It should display the list header")
- self.assertEqual(self.worksheet[0, 1], "Comment", "It should display the list header")
- self.assertEqual(self.worksheet[0, 2], "Website", "It should display the list header")
- self.assertEqual(self.worksheet[0, 3], "Credit Limit", "It should display the list header")
-
- # Header: Group Comment=blop
- self.assertEqual(self.worksheet[1, 0], "blop (1)", "It should display the group header")
- self.assertEqual(self.worksheet[1, 3], 2, "It should display the aggregated value")
-
- # Header: Group Comment=blop > Website=http://blop.com
- self.assertEqual(self.worksheet[2, 0], " http://blop.com (1)", "It should display the group header")
- self.assertEqual(self.worksheet[2, 3], 2, "It should display the aggregated value")
-
- # Data: Group Comment=blop > Website=http://blop.com
- self.assertEqual(self.worksheet[3, 0], "partner 4")
- self.assertEqual(self.worksheet[3, 1], "blop")
- self.assertEqual(self.worksheet[3, 2], "http://blop.com")
- self.assertEqual(self.worksheet[3, 3], 2)
-
- # Header: Group Comment=yop
- self.assertEqual(self.worksheet[4, 0], "yop (3)", "It should display the group header")
- self.assertEqual(self.worksheet[4, 3], 4, "It should display the aggregated value")
-
- # Header: Group Comment=yop > Website=http://blop.com
- self.assertEqual(self.worksheet[5, 0], " http://blop.com (2)", "It should display the group header")
- self.assertEqual(self.worksheet[5, 3], 4, "It should display the aggregated value")
-
- # Data: Group Comment=yop > Website=http://blop.com
- self.assertEqual(self.worksheet[6, 0], "partner 2")
- self.assertEqual(self.worksheet[6, 1], "yop")
- self.assertEqual(self.worksheet[6, 2], "http://blop.com")
- self.assertEqual(self.worksheet[6, 3], 3)
-
- self.assertEqual(self.worksheet[7, 0], "partner 3")
- self.assertEqual(self.worksheet[7, 1], "yop")
- self.assertEqual(self.worksheet[7, 2], "http://blop.com")
- self.assertEqual(self.worksheet[7, 3], 1)
-
- # Header: Group Comment=yop > Website=http://yop.com
- self.assertEqual(self.worksheet[8, 0], " http://yop.com (1)", "It should display the group header")
- self.assertEqual(self.worksheet[8, 3], '', "It should not have any aggregated value")
-
- # Data: Group Comment=yop > Website=http://yop.com
- self.assertEqual(self.worksheet[9, 0], "partner 1")
- self.assertEqual(self.worksheet[9, 1], "yop")
- self.assertEqual(self.worksheet[9, 2], "http://yop.com")
- self.assertEqual(self.worksheet[9, 3], 0)
-
- # Header: Group Comment=False
- self.assertEqual(self.worksheet[10, 0], "Undefined (1)", "It should display the group header")
- self.assertEqual(self.worksheet[10, 3], '', "It should not have any aggregated value")
-
- # Header: Group Comment=False > Website=False
- self.assertEqual(self.worksheet[11, 0], " Undefined (1)", "It should display the group header")
- self.assertEqual(self.worksheet[11, 3], '', "It should not have any aggregated value")
-
- # Data: Group Comment=False > Website=False
- self.assertEqual(self.worksheet[12, 0], "fef (base.group_user)")
- self.assertEqual(self.worksheet[12, 1], "")
- self.assertEqual(self.worksheet[12, 2], "")
- self.assertEqual(self.worksheet[12, 3], 0)
-
- def test_list_export(self):
-
- with patch.object(ExportXlsxWriter, 'write', self.mock_write):
- self.url_open('/web/export/xlsx', data={
- 'data': json.dumps(self.default_params),
- 'token': 'dummy',
- 'csrf_token': http.WebRequest.csrf_token(self),
- })
-
- # Main header
- self.assertEqual(self.worksheet[0, 0], "Partner name", "It should display the list header")
- self.assertEqual(self.worksheet[0, 1], "Comment", "It should display the list header")
- self.assertEqual(self.worksheet[0, 2], "Website", "It should display the list header")
-
- self.assertEqual(self.worksheet[1, 0], "fef (base.group_user)")
- self.assertEqual(self.worksheet[1, 1], "")
- self.assertEqual(self.worksheet[1, 2], "")
-
- self.assertEqual(self.worksheet[2, 0], "partner 1")
- self.assertEqual(self.worksheet[2, 1], "yop")
- self.assertEqual(self.worksheet[2, 2], "http://yop.com")
-
- self.assertEqual(self.worksheet[3, 0], "partner 2")
- self.assertEqual(self.worksheet[3, 1], "yop")
- self.assertEqual(self.worksheet[3, 2], "http://blop.com")
-
- self.assertEqual(self.worksheet[4, 0], "partner 3")
- self.assertEqual(self.worksheet[4, 1], "yop")
- self.assertEqual(self.worksheet[4, 2], "http://blop.com")
-
- self.assertEqual(self.worksheet[5, 0], "partner 4")
- self.assertEqual(self.worksheet[5, 1], "blop")
- self.assertEqual(self.worksheet[5, 2], "http://blop.com")