summaryrefslogtreecommitdiff
path: root/addons/web/tests
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2019-10-09 02:08:17 +0200
committerChristophe Simonis <chs@odoo.com>2019-10-09 02:08:17 +0200
commitd74b4518052066446e2a1975a91ce53c745ca75a (patch)
treec08180f88a512d15e37fbec628931f02b3825f65 /addons/web/tests
parentec162dd0cb5622ab6e56db1a63dab5f531a96f4a (diff)
parentf4105eb9c7010f8693e5d2fd20c0bd9d9cc2e483 (diff)
[MERGE] forward port branch 13.0 up to f4105eb9c70
Diffstat (limited to 'addons/web/tests')
-rw-r--r--addons/web/tests/__init__.py2
-rw-r--r--addons/web/tests/test_export.py176
-rw-r--r--addons/web/tests/test_list_controller.py75
3 files changed, 177 insertions, 76 deletions
diff --git a/addons/web/tests/__init__.py b/addons/web/tests/__init__.py
index 690fab494d3..b479a574e46 100644
--- a/addons/web/tests/__init__.py
+++ b/addons/web/tests/__init__.py
@@ -6,4 +6,4 @@ from . import test_js
from . import test_menu
from . import test_serving_base
from . import test_click_everywhere
-from . import test_list_controller
+from . import test_export
diff --git a/addons/web/tests/test_export.py b/addons/web/tests/test_export.py
new file mode 100644
index 00000000000..b0fed393e10
--- /dev/null
+++ b/addons/web/tests/test_export.py
@@ -0,0 +1,176 @@
+# -*- 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")
diff --git a/addons/web/tests/test_list_controller.py b/addons/web/tests/test_list_controller.py
deleted file mode 100644
index 311def2989f..00000000000
--- a/addons/web/tests/test_list_controller.py
+++ /dev/null
@@ -1,75 +0,0 @@
-# -*- coding: utf-8 -*-
-# Part of Odoo. See LICENSE file for full copyright and licensing details.
-
-from ..controllers.list_controller import TableListExporter
-from odoo.tests.common import HttpCase
-
-class WorksheetMock(dict):
-
- def write(self, x, y, value, style=None):
- if (x, y) in self:
- raise Exception("Cannot rewrite cell [{}, {}]".format(x, y))
- self[x, y] = value
-
-class ListController(HttpCase):
-
- def test_list_download(self):
- controller = TableListExporter()
-
- columns = [
- {'field': "foo", 'string': "Foo"},
- {'field': "bar", 'string': "Bar"},
- {'field': "int_field", 'aggregateValue': 19, 'string': "int_field"},
- ]
- groups = [{
- # Group "yop"
- 'isGrouped': True,
- 'count': 1,
- 'aggregateValues': {'int_field': 19},
- 'hideHeader': False,
- 'value': "yop",
- 'data': [{
- # Group "yop > true"
- 'isGrouped': False,
- 'count': 1,
- 'aggregateValues': {'int_field': 10},
- 'hideHeader': False,
- 'value': "true",
- 'data': [{'foo': "yop", 'bar': "True", 'int_field': 10}],
- }, {
- # Group "yop > false"
- 'isGrouped': False,
- 'count': 10,
- 'aggregateValues': {'int_field': 9},
- 'hideHeader': False,
- 'value': "false",
- 'data': [],
- }],
- }]
-
- worksheet = WorksheetMock()
- controller._write_worksheet(worksheet, {'columns': columns, 'groups': groups})
-
- # Header
- self.assertEqual(worksheet[0, 0], 'Foo')
- self.assertEqual(worksheet[0, 1], 'Bar')
- self.assertEqual(worksheet[0, 2], 'int_field')
-
- # Main group
- self.assertEqual(worksheet[1, 0], 'yop (1)', "Group header")
- self.assertEqual(worksheet[1, 2], 19, "int_field aggregate value")
-
- # First sub-group (open)
- self.assertEqual(worksheet[2, 0], '>true (1)', "subgroup header")
- self.assertEqual(worksheet[2, 2], 10, "int_field aggregate value")
-
- # data
- self.assertEqual(worksheet[3, 0], 'yop')
- self.assertEqual(worksheet[3, 1], 'True')
- self.assertEqual(worksheet[3, 2], 10)
-
- # second sub-group (closed)
- self.assertEqual(worksheet[4, 0], '>false (10)', "second sub-group header")
- self.assertEqual(worksheet[4, 2], 9, "int_field aggregate value")
-
- self.assertEqual(worksheet[5, 2], 19, "main list int_field aggregate value")