From d0a5a9a7ba7bbff9edadb6a306d468d14420983d Mon Sep 17 00:00:00 2001 From: "mathieu.brunot" Date: Thu, 14 Nov 2019 00:06:53 +0100 Subject: [PATCH 01/77] :white_check_mark: Add JUnit XML reports to Travis Signed-off-by: mathieu.brunot --- .travis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index df66db88a7..0288c01f7e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -21,12 +21,12 @@ matrix: - name: "Python 3.6 MariaDB" python: 3.6 env: DB=mariadb TYPE=server - script: bench --site test_site run-tests --coverage + script: bench --site test_site run-tests --coverage --junit-xml-output frappe_unit_tests.xml - name: "Python 3.6 PostgreSQL" python: 3.6 env: DB=postgres TYPE=server - script: bench --site test_site run-tests --coverage + script: bench --site test_site run-tests --coverage --junit-xml-output frappe_unit_tests.xml - name: "Cypress" python: 3.6 @@ -37,7 +37,7 @@ matrix: - name: "Python 2.7 MariaDB" python: 2.7 env: DB=mariadb TYPE=server - script: bench --site test_site run-tests --coverage + script: bench --site test_site run-tests --coverage --junit-xml-output frappe_unit_tests.xml install: - cd ~ From 0054206e431d6418447e3a117223aeeba6e80833 Mon Sep 17 00:00:00 2001 From: "mathieu.brunot" Date: Mon, 25 Nov 2019 23:23:49 +0100 Subject: [PATCH 02/77] :construction: Testing without TimeLogging Signed-off-by: mathieu.brunot --- frappe/test_runner.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/frappe/test_runner.py b/frappe/test_runner.py index 76140e442c..4e5010ed38 100644 --- a/frappe/test_runner.py +++ b/frappe/test_runner.py @@ -131,7 +131,8 @@ def run_all_tests(app=None, verbose=False, profile=False, ui_tests=False, failfa pr = cProfile.Profile() pr.enable() - out = unittest_runner(resultclass=TimeLoggingTestResult, verbosity=1+(verbose and 1 or 0), failfast=failfast).run(test_suite) + # resultclass=TimeLoggingTestResult, + out = unittest_runner(verbosity=1+(verbose and 1 or 0), failfast=failfast).run(test_suite) if profile: pr.disable() From f3717bd7a69f2ab9088e87e481ddd5f64b1c2aaa Mon Sep 17 00:00:00 2001 From: "mathieu.brunot" Date: Tue, 26 Nov 2019 03:11:14 +0100 Subject: [PATCH 03/77] :white_check_mark: Test XML reports Signed-off-by: mathieu.brunot --- .travis.yml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/.travis.yml b/.travis.yml index 0288c01f7e..a5c81f9631 100644 --- a/.travis.yml +++ b/.travis.yml @@ -19,11 +19,21 @@ cache: matrix: include: - name: "Python 3.6 MariaDB" + python: 3.6 + env: DB=mariadb TYPE=server + script: bench --site test_site run-tests --coverage + + - name: "Python 3.6 MariaDB XML Report" python: 3.6 env: DB=mariadb TYPE=server script: bench --site test_site run-tests --coverage --junit-xml-output frappe_unit_tests.xml - name: "Python 3.6 PostgreSQL" + python: 3.6 + env: DB=postgres TYPE=server + script: bench --site test_site run-tests --coverage + + - name: "Python 3.6 PostgreSQL XML Report" python: 3.6 env: DB=postgres TYPE=server script: bench --site test_site run-tests --coverage --junit-xml-output frappe_unit_tests.xml @@ -35,6 +45,11 @@ matrix: script: bench --site test_site run-ui-tests frappe --headless - name: "Python 2.7 MariaDB" + python: 2.7 + env: DB=mariadb TYPE=server + script: bench --site test_site run-tests --coverage + + - name: "Python 2.7 MariaDB XML Report" python: 2.7 env: DB=mariadb TYPE=server script: bench --site test_site run-tests --coverage --junit-xml-output frappe_unit_tests.xml From 3073515b1c2c40c14aeda5a2e4cb4a3a1b363c12 Mon Sep 17 00:00:00 2001 From: "mathieu.brunot" Date: Tue, 26 Nov 2019 03:11:40 +0100 Subject: [PATCH 04/77] :construction: Split runner init from test run Signed-off-by: mathieu.brunot --- frappe/test_runner.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frappe/test_runner.py b/frappe/test_runner.py index 4e5010ed38..23ba00789d 100644 --- a/frappe/test_runner.py +++ b/frappe/test_runner.py @@ -131,8 +131,8 @@ def run_all_tests(app=None, verbose=False, profile=False, ui_tests=False, failfa pr = cProfile.Profile() pr.enable() - # resultclass=TimeLoggingTestResult, - out = unittest_runner(verbosity=1+(verbose and 1 or 0), failfast=failfast).run(test_suite) + runner = unittest_runner(resultclass=TimeLoggingTestResult, verbosity=1+(verbose and 1 or 0), failfast=failfast) + out = runner.run(test_suite) if profile: pr.disable() From cf50b52df7b2bf33044a619dbdbf0cb8d2b2c255 Mon Sep 17 00:00:00 2001 From: "mathieu.brunot" Date: Tue, 26 Nov 2019 03:21:23 +0100 Subject: [PATCH 05/77] :bug: Allow Unit Test XML to write binary Signed-off-by: mathieu.brunot --- frappe/test_runner.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/test_runner.py b/frappe/test_runner.py index 23ba00789d..86aa1b730e 100644 --- a/frappe/test_runner.py +++ b/frappe/test_runner.py @@ -38,7 +38,7 @@ def main(app=None, module=None, doctype=None, verbose=False, tests=(), xmloutput_fh = None if junit_xml_output: - xmloutput_fh = open(junit_xml_output, 'w') + xmloutput_fh = open(junit_xml_output, 'wb') unittest_runner = xmlrunner_wrapper(xmloutput_fh) else: unittest_runner = unittest.TextTestRunner From 469944d2738fd9de1d468c2a9b357c6f65003001 Mon Sep 17 00:00:00 2001 From: "mathieu.brunot" Date: Tue, 26 Nov 2019 04:00:14 +0100 Subject: [PATCH 06/77] :bug: Change runner init if XML report on Signed-off-by: mathieu.brunot --- frappe/test_runner.py | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/frappe/test_runner.py b/frappe/test_runner.py index 86aa1b730e..e7ec13afe6 100644 --- a/frappe/test_runner.py +++ b/frappe/test_runner.py @@ -65,11 +65,11 @@ def main(app=None, module=None, doctype=None, verbose=False, tests=(), frappe.get_attr(fn)() if doctype: - ret = run_tests_for_doctype(doctype, verbose, tests, force, profile) + ret = run_tests_for_doctype(doctype, verbose, tests, force, profile, junit_xml_output=junit_xml_output) elif module: - ret = run_tests_for_module(module, verbose, tests, profile) + ret = run_tests_for_module(module, verbose, tests, profile, junit_xml_output=junit_xml_output) else: - ret = run_all_tests(app, verbose, profile, ui_tests, failfast=failfast) + ret = run_all_tests(app, verbose, profile, ui_tests, failfast=failfast, junit_xml_output=junit_xml_output) frappe.db.commit() @@ -106,7 +106,7 @@ class TimeLoggingTestResult(unittest.TextTestResult): super(TimeLoggingTestResult, self).addSuccess(test) -def run_all_tests(app=None, verbose=False, profile=False, ui_tests=False, failfast=False): +def run_all_tests(app=None, verbose=False, profile=False, ui_tests=False, failfast=False, junit_xml_output=False): import os apps = [app] if app else frappe.get_installed_apps() @@ -127,11 +127,15 @@ def run_all_tests(app=None, verbose=False, profile=False, ui_tests=False, failfa _add_test(app, path, filename, verbose, test_suite, ui_tests) + if junit_xml_output: + runner = unittest_runner(verbosity=1+(verbose and 1 or 0), failfast=failfast) + else: + runner = unittest_runner(resultclass=TimeLoggingTestResult, verbosity=1+(verbose and 1 or 0), failfast=failfast) + if profile: pr = cProfile.Profile() pr.enable() - runner = unittest_runner(resultclass=TimeLoggingTestResult, verbosity=1+(verbose and 1 or 0), failfast=failfast) out = runner.run(test_suite) if profile: @@ -143,7 +147,7 @@ def run_all_tests(app=None, verbose=False, profile=False, ui_tests=False, failfa return out -def run_tests_for_doctype(doctypes, verbose=False, tests=(), force=False, profile=False): +def run_tests_for_doctype(doctypes, verbose=False, tests=(), force=False, profile=False, junit_xml_output=False): modules = [] if not isinstance(doctypes, (list, tuple)): doctypes = [doctypes] @@ -161,15 +165,15 @@ def run_tests_for_doctype(doctypes, verbose=False, tests=(), force=False, profil make_test_records(doctype, verbose=verbose, force=force) modules.append(importlib.import_module(test_module)) - return _run_unittest(modules, verbose=verbose, tests=tests, profile=profile) + return _run_unittest(modules, verbose=verbose, tests=tests, profile=profile, junit_xml_output=junit_xml_output) -def run_tests_for_module(module, verbose=False, tests=(), profile=False): +def run_tests_for_module(module, verbose=False, tests=(), profile=False, junit_xml_output=False): module = importlib.import_module(module) if hasattr(module, "test_dependencies"): for doctype in module.test_dependencies: make_test_records(doctype, verbose=verbose) - return _run_unittest(module, verbose=verbose, tests=tests, profile=profile) + return _run_unittest(module, verbose=verbose, tests=tests, profile=profile, junit_xml_output=junit_xml_output) def run_setup_wizard_ui_test(app=None, verbose=False, profile=False): '''Run setup wizard UI test using test_test_runner''' @@ -186,7 +190,7 @@ def run_ui_tests(app=None, test=None, test_list=None, verbose=False, profile=Fal frappe.flags.ui_test_path = test return _run_unittest(module, verbose=verbose, tests=(), profile=profile) -def _run_unittest(modules, verbose=False, tests=(), profile=False): +def _run_unittest(modules, verbose=False, tests=(), profile=False, junit_xml_output=False): test_suite = unittest.TestSuite() if not isinstance(modules, (list, tuple)): @@ -202,13 +206,18 @@ def _run_unittest(modules, verbose=False, tests=(), profile=False): else: test_suite.addTest(module_test_cases) + if junit_xml_output: + runner = unittest_runner(verbosity=1+(verbose and 1 or 0)) + else: + runner = unittest_runner(resultclass=TimeLoggingTestResult, verbosity=1+(verbose and 1 or 0)) + if profile: pr = cProfile.Profile() pr.enable() frappe.flags.tests_verbose = verbose - out = unittest_runner(verbosity=1+(verbose and 1 or 0)).run(test_suite) + out = runner.run(test_suite) if profile: From 598a0d1a45e4cd61258f740f0e367469b9c83a6b Mon Sep 17 00:00:00 2001 From: Mathieu Brunot Date: Tue, 31 Dec 2019 02:40:06 +0100 Subject: [PATCH 07/77] ci(coverage): Pin converage to 4.5.4 --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 6990a0df8a..4962caf788 100644 --- a/.travis.yml +++ b/.travis.yml @@ -91,5 +91,6 @@ install: - bench build --app frappe after_script: + - pip install coverage==4.5.4 - pip install python-coveralls - coveralls -b apps/frappe -d ../../sites/.coverage From 2b77c61f6b8eb0fae8f281ec17f30a5295ea9ca4 Mon Sep 17 00:00:00 2001 From: prssanna Date: Sun, 12 Jan 2020 13:43:53 +0530 Subject: [PATCH 08/77] style: fix leaderboard searchbox padding --- frappe/desk/page/leaderboard/leaderboard.css | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/frappe/desk/page/leaderboard/leaderboard.css b/frappe/desk/page/leaderboard/leaderboard.css index a3cb4d09c4..1c6c8b7726 100644 --- a/frappe/desk/page/leaderboard/leaderboard.css +++ b/frappe/desk/page/leaderboard/leaderboard.css @@ -55,3 +55,7 @@ max-width: 75px; } +.leaderboard-search { + padding: 5px; +} + From a6f516c9735140bc1effef7673c9ed02216bf875 Mon Sep 17 00:00:00 2001 From: prssanna Date: Sun, 12 Jan 2020 13:44:25 +0530 Subject: [PATCH 09/77] fix: fix leaderboard search --- frappe/desk/page/leaderboard/leaderboard.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/desk/page/leaderboard/leaderboard.js b/frappe/desk/page/leaderboard/leaderboard.js index c64d2dcb4f..c4c8f5790d 100644 --- a/frappe/desk/page/leaderboard/leaderboard.js +++ b/frappe/desk/page/leaderboard/leaderboard.js @@ -363,7 +363,7 @@ class Leaderboard { const link = `#Form/${this.options.selected_doctype}/${item.name}`; const name_html = item.formatted_name ? - `${item.formatted_name}` + `${item.formatted_name}` : ` ${item.name} `; const html = `
From dd2fba419b225c403064131f8eabc032f4079b51 Mon Sep 17 00:00:00 2001 From: prssanna Date: Sun, 12 Jan 2020 14:17:10 +0530 Subject: [PATCH 10/77] fix: use form-group class for leaderboard search --- frappe/desk/page/leaderboard/leaderboard.css | 4 ---- frappe/desk/page/leaderboard/leaderboard.js | 2 +- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/frappe/desk/page/leaderboard/leaderboard.css b/frappe/desk/page/leaderboard/leaderboard.css index 1c6c8b7726..a3cb4d09c4 100644 --- a/frappe/desk/page/leaderboard/leaderboard.css +++ b/frappe/desk/page/leaderboard/leaderboard.css @@ -55,7 +55,3 @@ max-width: 75px; } -.leaderboard-search { - padding: 5px; -} - diff --git a/frappe/desk/page/leaderboard/leaderboard.js b/frappe/desk/page/leaderboard/leaderboard.js index c4c8f5790d..5359e9eab8 100644 --- a/frappe/desk/page/leaderboard/leaderboard.js +++ b/frappe/desk/page/leaderboard/leaderboard.js @@ -187,7 +187,7 @@ class Leaderboard { render_search_box() { this.$search_box = - $(`