From 544388c74126eca0dbd36a772ea936e9cad91147 Mon Sep 17 00:00:00 2001 From: Corwin Kerr Date: Tue, 25 Oct 2022 23:07:07 -0400 Subject: [PATCH 1/6] Use subTest for module contexts --- tests/test_dashboard.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/test_dashboard.py b/tests/test_dashboard.py index b3bd661f..32a5ee1b 100644 --- a/tests/test_dashboard.py +++ b/tests/test_dashboard.py @@ -161,11 +161,11 @@ def test_module_selector(self): project_response = self.get_response("/project/") job_response = self.get_response("/jobs/?view=grid") for m in self.modules: - print(f"Checking for {m.name} in {m.context}.") - if m.context == "ProjectContext": - assert m.name in project_response - elif m.context == "JobContext": - assert m.name in job_response + with self.subTest(module=f"{m.name} in {m.context}."): + if m.context == "ProjectContext": + self.assertTrue(m.name in project_response) + elif m.context == "JobContext": + self.assertTrue(m.name in job_response) def test_enabled_module_indices_project_session(self): """Ensure that the message is not displayed when modules are actually enabled.""" From a43bfa856a709eea38834a687b8c68b7710dca3e Mon Sep 17 00:00:00 2001 From: Corwin Kerr Date: Tue, 25 Oct 2022 23:08:11 -0400 Subject: [PATCH 2/6] Switch to asserTrue and use get_response function --- tests/test_dashboard.py | 69 ++++++++++++++++++----------------------- 1 file changed, 31 insertions(+), 38 deletions(-) diff --git a/tests/test_dashboard.py b/tests/test_dashboard.py index 32a5ee1b..21274328 100644 --- a/tests/test_dashboard.py +++ b/tests/test_dashboard.py @@ -14,7 +14,7 @@ from signac_dashboard import Dashboard -class DashboardTestCase(unittest.TestCase): +class DashboardBaseTest(unittest.TestCase): def get_response(self, query): rv = self.test_client.get(query, follow_redirects=True) return str(rv.get_data()) @@ -38,36 +38,33 @@ def setUp(self): self.test_client = self.dashboard.app.test_client() self.addCleanup(shutil.rmtree, self._tmp_dir) + +class DashboardTestCase(DashboardBaseTest): def test_get_project(self): - rv = self.test_client.get("/project/", follow_redirects=True) - response = str(rv.get_data()) - assert "dashboard-test-project" in response + response = self.get_response("/project/") + self.assertTrue("dashboard-test-project" in response) def test_get_jobs(self): - rv = self.test_client.get("/jobs/", follow_redirects=True) - response = str(rv.get_data()) - assert "dashboard-test-project" in response + response = self.get_response("/jobs/") + self.assertTrue("dashboard-test-project" in response) def test_job_count(self): - rv = self.test_client.get("/jobs/", follow_redirects=True) - response = str(rv.get_data()) - assert f"{self.project.num_jobs()} jobs" in response + response = self.get_response("/jobs/") + self.assertTrue(f"{self.project.num_jobs()} jobs" in response) def test_sp_search(self): dictquery = {"a": 0} true_num_jobs = len(list(self.project.find_jobs(dictquery))) query = urlquote(json.dumps(dictquery)) - rv = self.test_client.get(f"/search?q={query}", follow_redirects=True) - response = str(rv.get_data()) - assert f"{true_num_jobs} jobs" in response + response = self.get_response("/search?q={query}") + self.assertTrue(f"{true_num_jobs} jobs" in response) def test_doc_search(self): dictquery = {"sum": 1} true_num_jobs = len(list(self.project.find_jobs(doc_filter=dictquery))) query = urlquote("doc:" + json.dumps(dictquery)) - rv = self.test_client.get(f"/search?q={query}", follow_redirects=True) - response = str(rv.get_data()) - assert f"{true_num_jobs} jobs" in response + response = self.get_response("/search?q={query}") + self.assertTrue(f"{true_num_jobs} jobs" in response) def test_allow_where_search(self): dictquery = {"sum": 1} @@ -75,37 +72,32 @@ def test_allow_where_search(self): query = urlquote('doc:sum.$where "lambda x: x == 1"') self.dashboard.config["ALLOW_WHERE"] = False - rv = self.test_client.get(f"/search?q={query}", follow_redirects=True) - response = str(rv.get_data()) - assert "ALLOW_WHERE must be enabled for this query." in response + response = self.get_response("/search?q={query}") + self.assertTrue("ALLOW_WHERE must be enabled for this query." in response) self.dashboard.config["ALLOW_WHERE"] = True - rv = self.test_client.get(f"/search?q={query}", follow_redirects=True) - response = str(rv.get_data()) - assert f"{true_num_jobs} jobs" in response + response = self.get_response("/search?q={query}") + self.assertTrue(f"{true_num_jobs} jobs" in response) def test_update_cache(self): - rv = self.test_client.get("/jobs", follow_redirects=True) - response = str(rv.get_data()) - assert f"{self.project.num_jobs()} jobs" in response + response = self.get_response("/jobs") + self.assertTrue(f"{self.project.num_jobs()} jobs" in response) # Create a new job. Because the project has been cached, the response # will be wrong until the cache is cleared. self.project.open_job({"a": "test-cache"}).init() - rv = self.test_client.get("/jobs", follow_redirects=True) - response = str(rv.get_data()) - assert f"{self.project.num_jobs()} jobs" not in response + response = self.get_response("/jobs") + self.assertTrue(f"{self.project.num_jobs()} jobs" not in response) # Clear cache and try again. self.dashboard.update_cache() - rv = self.test_client.get("/jobs", follow_redirects=True) - response = str(rv.get_data()) - assert f"{self.project.num_jobs()} jobs" in response + response = self.get_response("/jobs") + self.assertTrue(f"{self.project.num_jobs()} jobs" in response) def test_no_view_single_job(self): """Make sure View panel is not shown when on a single job page.""" response = self.get_response("/jobs/7f9fb369851609ce9cb91404549393f3") - assert "Views" not in response + self.assertTrue("Views" not in response) class NoModulesTestCase(DashboardTestCase): @@ -113,17 +105,18 @@ class NoModulesTestCase(DashboardTestCase): def test_job_sidebar(self): response = self.get_response("/jobs/?view=grid") - assert "No modules." in response + self.assertTrue("No modules." in response) def test_project_sidebar(self): response = self.get_response("/project/") - assert "No modules." in response - assert "Views" not in response + self.assertTrue("No modules." in response) + self.assertTrue("Views" not in response) class AllModulesTestCase(DashboardTestCase): """Add all modules and contexts and test again.""" + # todo, keep just the module initialization and move the duplicate code away def setUp(self): self._tmp_dir = tempfile.mkdtemp() self.project = init_project( @@ -155,7 +148,7 @@ def test_module_visible_mobile(self): # Check for two instances of Modules header pattern = re.compile("Modules Date: Tue, 25 Oct 2022 23:24:10 -0400 Subject: [PATCH 3/6] Fix f-string accidentally removed --- tests/test_dashboard.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/test_dashboard.py b/tests/test_dashboard.py index 21274328..dead2497 100644 --- a/tests/test_dashboard.py +++ b/tests/test_dashboard.py @@ -56,14 +56,14 @@ def test_sp_search(self): dictquery = {"a": 0} true_num_jobs = len(list(self.project.find_jobs(dictquery))) query = urlquote(json.dumps(dictquery)) - response = self.get_response("/search?q={query}") + response = self.get_response(f"/search?q={query}") self.assertTrue(f"{true_num_jobs} jobs" in response) def test_doc_search(self): dictquery = {"sum": 1} true_num_jobs = len(list(self.project.find_jobs(doc_filter=dictquery))) query = urlquote("doc:" + json.dumps(dictquery)) - response = self.get_response("/search?q={query}") + response = self.get_response(f"/search?q={query}") self.assertTrue(f"{true_num_jobs} jobs" in response) def test_allow_where_search(self): @@ -72,11 +72,11 @@ def test_allow_where_search(self): query = urlquote('doc:sum.$where "lambda x: x == 1"') self.dashboard.config["ALLOW_WHERE"] = False - response = self.get_response("/search?q={query}") + response = self.get_response(f"/search?q={query}") self.assertTrue("ALLOW_WHERE must be enabled for this query." in response) self.dashboard.config["ALLOW_WHERE"] = True - response = self.get_response("/search?q={query}") + response = self.get_response(f"/search?q={query}") self.assertTrue(f"{true_num_jobs} jobs" in response) def test_update_cache(self): From 0e192978c24ce1c3315d30d4e81d44f8eead08d8 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 26 Oct 2022 03:31:21 +0000 Subject: [PATCH 4/6] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- tests/test_dashboard.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/tests/test_dashboard.py b/tests/test_dashboard.py index dead2497..89640a93 100644 --- a/tests/test_dashboard.py +++ b/tests/test_dashboard.py @@ -163,12 +163,16 @@ def test_module_selector(self): def test_enabled_module_indices_project_session(self): """Ensure that the message is not displayed when modules are actually enabled.""" project_response = self.get_response("/project/") - self.assertTrue("No modules for the ProjectContext are enabled." not in project_response) + self.assertTrue( + "No modules for the ProjectContext are enabled." not in project_response + ) def test_enabled_module_indices_job_session(self): """Ensure that the message is not displayed when modules are actually enabled.""" job_response = self.get_response("/jobs/?view=grid") - self.assertTrue("No modules for the JobContext are enabled." not in job_response) + self.assertTrue( + "No modules for the JobContext are enabled." not in job_response + ) if __name__ == "__main__": From e7c66f01580ca494eed60689b9331b130fa501a5 Mon Sep 17 00:00:00 2001 From: Corwin Kerr Date: Wed, 26 Oct 2022 09:59:29 -0400 Subject: [PATCH 5/6] Use more specific asserts --- tests/test_dashboard.py | 42 ++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/tests/test_dashboard.py b/tests/test_dashboard.py index 89640a93..88be02d5 100644 --- a/tests/test_dashboard.py +++ b/tests/test_dashboard.py @@ -42,29 +42,29 @@ def setUp(self): class DashboardTestCase(DashboardBaseTest): def test_get_project(self): response = self.get_response("/project/") - self.assertTrue("dashboard-test-project" in response) + self.assertIn("dashboard-test-project", response) def test_get_jobs(self): response = self.get_response("/jobs/") - self.assertTrue("dashboard-test-project" in response) + self.assertIn("dashboard-test-project", response) def test_job_count(self): response = self.get_response("/jobs/") - self.assertTrue(f"{self.project.num_jobs()} jobs" in response) + self.assertIn(f"{self.project.num_jobs()} jobs", response) def test_sp_search(self): dictquery = {"a": 0} true_num_jobs = len(list(self.project.find_jobs(dictquery))) query = urlquote(json.dumps(dictquery)) response = self.get_response(f"/search?q={query}") - self.assertTrue(f"{true_num_jobs} jobs" in response) + self.assertIn(f"{true_num_jobs} jobs", response) def test_doc_search(self): dictquery = {"sum": 1} true_num_jobs = len(list(self.project.find_jobs(doc_filter=dictquery))) query = urlquote("doc:" + json.dumps(dictquery)) response = self.get_response(f"/search?q={query}") - self.assertTrue(f"{true_num_jobs} jobs" in response) + self.assertIn(f"{true_num_jobs} jobs", response) def test_allow_where_search(self): dictquery = {"sum": 1} @@ -73,31 +73,31 @@ def test_allow_where_search(self): self.dashboard.config["ALLOW_WHERE"] = False response = self.get_response(f"/search?q={query}") - self.assertTrue("ALLOW_WHERE must be enabled for this query." in response) + self.assertIn("ALLOW_WHERE must be enabled for this query.", response) self.dashboard.config["ALLOW_WHERE"] = True response = self.get_response(f"/search?q={query}") - self.assertTrue(f"{true_num_jobs} jobs" in response) + self.assertIn(f"{true_num_jobs} jobs", response) def test_update_cache(self): response = self.get_response("/jobs") - self.assertTrue(f"{self.project.num_jobs()} jobs" in response) + self.assertIn(f"{self.project.num_jobs()} jobs", response) # Create a new job. Because the project has been cached, the response # will be wrong until the cache is cleared. self.project.open_job({"a": "test-cache"}).init() response = self.get_response("/jobs") - self.assertTrue(f"{self.project.num_jobs()} jobs" not in response) + self.assertNotIn(f"{self.project.num_jobs()} jobs", response) # Clear cache and try again. self.dashboard.update_cache() response = self.get_response("/jobs") - self.assertTrue(f"{self.project.num_jobs()} jobs" in response) + self.assertIn(f"{self.project.num_jobs()} jobs", response) def test_no_view_single_job(self): """Make sure View panel is not shown when on a single job page.""" response = self.get_response("/jobs/7f9fb369851609ce9cb91404549393f3") - self.assertTrue("Views" not in response) + self.assertNotIn("Views", response) class NoModulesTestCase(DashboardTestCase): @@ -105,12 +105,12 @@ class NoModulesTestCase(DashboardTestCase): def test_job_sidebar(self): response = self.get_response("/jobs/?view=grid") - self.assertTrue("No modules." in response) + self.assertIn("No modules.", response) def test_project_sidebar(self): response = self.get_response("/project/") - self.assertTrue("No modules." in response) - self.assertTrue("Views" not in response) + self.assertIn("No modules.", response) + self.assertNotIn("Views", response) class AllModulesTestCase(DashboardTestCase): @@ -148,7 +148,7 @@ def test_module_visible_mobile(self): # Check for two instances of Modules header pattern = re.compile("Modules Date: Wed, 26 Oct 2022 13:59:48 +0000 Subject: [PATCH 6/6] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- tests/test_dashboard.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tests/test_dashboard.py b/tests/test_dashboard.py index 88be02d5..e36fa50e 100644 --- a/tests/test_dashboard.py +++ b/tests/test_dashboard.py @@ -170,9 +170,7 @@ def test_enabled_module_indices_project_session(self): def test_enabled_module_indices_job_session(self): """Ensure that the message is not displayed when modules are actually enabled.""" job_response = self.get_response("/jobs/?view=grid") - self.assertNotIn( - "No modules for the JobContext are enabled.", job_response - ) + self.assertNotIn("No modules for the JobContext are enabled.", job_response) if __name__ == "__main__":