diff --git a/frappe/__init__.py b/frappe/__init__.py index 405cdd88e5..cd6f0b8a8d 100644 --- a/frappe/__init__.py +++ b/frappe/__init__.py @@ -14,7 +14,7 @@ import os, sys, importlib, inspect, json from .exceptions import * from .utils.jinja import get_jenv, get_template, render_template, get_email_from_template -__version__ = '10.1.67' +__version__ = '10.1.68' __title__ = "Frappe Framework" local = Local() diff --git a/frappe/core/doctype/report/report.py b/frappe/core/doctype/report/report.py index a7b1c4d4dc..197e781843 100644 --- a/frappe/core/doctype/report/report.py +++ b/frappe/core/doctype/report/report.py @@ -149,7 +149,7 @@ class Report(Document): if params.get('sort_by'): order_by = _format(params.get('sort_by').split('.')) + ' ' + params.get('sort_order') else: - order_by = _format(self.ref_doctype, 'modified') + ' desc' + order_by = _format([self.ref_doctype, 'modified']) + ' desc' if params.get('sort_by_next'): order_by += ', ' + _format(params.get('sort_by_next').split('.')) + ' ' + params.get('sort_order_next') diff --git a/frappe/core/doctype/report/test_report.py b/frappe/core/doctype/report/test_report.py index c2d5629a2b..287363e20f 100644 --- a/frappe/core/doctype/report/test_report.py +++ b/frappe/core/doctype/report/test_report.py @@ -53,3 +53,19 @@ class TestReport(unittest.TestCase): report = frappe.get_doc('Report', 'Test Report') self.assertNotEquals(report.is_permitted(), True) + + # test for the `_format` method if report data doesn't have sort_by parameter + def test_format_method(self): + if frappe.db.exists('Report', 'User Activity Report Without Sort'): + frappe.delete_doc('Report', 'User Activity Report Without Sort') + with open(os.path.join(os.path.dirname(__file__), 'user_activity_report_without_sort.json'), 'r') as f: + frappe.get_doc(json.loads(f.read())).insert() + + report = frappe.get_doc('Report', 'User Activity Report Without Sort') + + # this would raise an error without the fix added along with this test case + columns, data = report.get_data() + self.assertEqual(columns[0].get('label'), 'ID') + self.assertEqual(columns[1].get('label'), 'User Type') + self.assertTrue('Administrator' in [d[0] for d in data]) + frappe.delete_doc('Report', 'User Activity Report Without Sort') \ No newline at end of file diff --git a/frappe/core/doctype/report/user_activity_report_without_sort.json b/frappe/core/doctype/report/user_activity_report_without_sort.json new file mode 100644 index 0000000000..bb520a25e2 --- /dev/null +++ b/frappe/core/doctype/report/user_activity_report_without_sort.json @@ -0,0 +1,17 @@ +{ + "add_total_row": 0, + "apply_user_permissions": 1, + "disabled": 0, + "docstatus": 0, + "doctype": "Report", + "is_standard": "No", + "javascript": null, + "json": "{\"filters\":[],\"columns\":[[\"name\",\"User\"],[\"user_type\",\"User\"],[\"first_name\",\"User\"],[\"last_name\",\"User\"],[\"last_active\",\"User\"],[\"role\",\"Has Role\"]],\"sort_order\":\"desc\",\"sort_by_next\":null,\"sort_order_next\":\"desc\"}", + "modified": "2018-12-17 18:27:07.728890", + "module": "Core", + "name": "User Activity Report Without Sort", + "query": null, + "ref_doctype": "User", + "report_name": "User Activity Report Without Sort", + "report_type": "Report Builder" + } \ No newline at end of file diff --git a/frappe/core/doctype/user/test_user.py b/frappe/core/doctype/user/test_user.py index a5b54e7b8d..857e537997 100644 --- a/frappe/core/doctype/user/test_user.py +++ b/frappe/core/doctype/user/test_user.py @@ -266,3 +266,10 @@ class TestUser(unittest.TestCase): self.assertEqual(extract_mentions(user_name)[0], "test-user") user_name = "Testing comment, @test.user@example.com please check." self.assertEqual(extract_mentions(user_name)[0], "test.user@example.com") + user_name = "