From 311f9c8677c29e6f283c59f781f4c53263e602e0 Mon Sep 17 00:00:00 2001 From: Daniel Harding Date: Mon, 15 May 2023 15:48:56 +0300 Subject: [PATCH 1/3] Minor updates to tox.ini * Simplify envlist specification (no functional changes) * Tweak dj42 django dependency specification * Enable selenium tests for Python 3.11/Django 4.2 instead of for Python 3.10/Django 4.1. * Minor file formatting tweaks. --- tox.ini | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/tox.ini b/tox.ini index d751d5325..b1c194c61 100644 --- a/tox.ini +++ b/tox.ini @@ -3,23 +3,22 @@ isolated_build = true envlist = docs packaging - py{38,39,310}-dj{32}-{sqlite,postgresql,postgis,mysql} - py{310}-dj{40}-{sqlite} - py{310,311}-dj{41}-{sqlite,postgresql,postgis,mysql} - py{310,311}-dj{42,main}-{sqlite,postgresql,postgis,mysql} - py{310,311}-dj{42,main}-psycopg3 + py{38,39,310}-dj32-{sqlite,postgresql,postgis,mysql} + py310-dj40-sqlite + py{310,311}-dj41-{sqlite,postgresql,postgis,mysql} + py{310,311}-dj{42,main}-{sqlite,postgresql,psycopg3,postgis,mysql} [testenv] deps = dj32: django~=3.2.9 dj40: django~=4.0.0 dj41: django~=4.1.3 - dj42: django>=4.2a1,<5 + dj42: django~=4.2.1 + djmain: https://github.com/django/django/archive/main.tar.gz postgresql: psycopg2-binary psycopg3: psycopg[binary] postgis: psycopg2-binary mysql: mysqlclient - djmain: https://github.com/django/django/archive/main.tar.gz coverage[toml] Jinja2 html5lib @@ -40,7 +39,7 @@ setenv = PYTHONPATH = {toxinidir} PYTHONWARNINGS = d py39-dj32-postgresql: DJANGO_SELENIUM_TESTS = true - py310-dj41-postgresql: DJANGO_SELENIUM_TESTS = true + py311-dj42-postgresql: DJANGO_SELENIUM_TESTS = true DB_NAME = {env:DB_NAME:debug_toolbar} DB_USER = {env:DB_USER:debug_toolbar} DB_HOST = {env:DB_HOST:localhost} @@ -56,7 +55,6 @@ setenv = DB_BACKEND = postgresql DB_PORT = {env:DB_PORT:5432} - [testenv:py{38,39,310,311}-dj{32,40,41,42,main}-postgis] setenv = {[testenv]setenv} From 1034d173fdf9c690a28726dc1e555ad386cbf5ea Mon Sep 17 00:00:00 2001 From: Daniel Harding Date: Mon, 15 May 2023 15:59:56 +0300 Subject: [PATCH 2/3] Avoid selenium deprecation warning when testing Switch from setting the options.headless attribute to calling options.add_argument("-headless"). See [1] for more info. [1] https://www.selenium.dev/blog/2023/headless-is-going-away/ --- tests/test_integration.py | 3 ++- tox.ini | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/test_integration.py b/tests/test_integration.py index 71340709a..b77b7cede 100644 --- a/tests/test_integration.py +++ b/tests/test_integration.py @@ -533,7 +533,8 @@ class DebugToolbarLiveTestCase(StaticLiveServerTestCase): def setUpClass(cls): super().setUpClass() options = Options() - options.headless = bool(os.environ.get("CI")) + if os.environ.get("CI"): + options.add_argument("-headless") cls.selenium = webdriver.Firefox(options=options) @classmethod diff --git a/tox.ini b/tox.ini index b1c194c61..87c8ff175 100644 --- a/tox.ini +++ b/tox.ini @@ -23,7 +23,7 @@ deps = Jinja2 html5lib pygments - selenium + selenium>=4.8.0 sqlparse passenv= CI From 9706b2466d9ca6fc8dda0e34c395388409e86ee5 Mon Sep 17 00:00:00 2001 From: Daniel Harding Date: Tue, 16 May 2023 14:33:05 +0300 Subject: [PATCH 3/3] Fix BytesWarnings in tests Don't pass bytes objects as filter arguments for CharField fields. They get passed to str() internally within Django which results in a BytesWaring. --- tests/panels/test_sql.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/panels/test_sql.py b/tests/panels/test_sql.py index 7b3452935..f4dcfaa2a 100644 --- a/tests/panels/test_sql.py +++ b/tests/panels/test_sql.py @@ -21,7 +21,7 @@ psycopg = None from ..base import BaseMultiDBTestCase, BaseTestCase -from ..models import PostgresJSON +from ..models import Binary, PostgresJSON def sql_call(use_iterator=False): @@ -149,7 +149,7 @@ def test_non_ascii_query(self): self.assertEqual(len(self.panel._queries), 2) # non-ASCII bytes parameters - list(User.objects.filter(username="café".encode())) + list(Binary.objects.filter(field__in=["café".encode()])) self.assertEqual(len(self.panel._queries), 3) response = self.panel.process_request(self.request) @@ -335,7 +335,7 @@ def test_insert_content(self): Test that the panel only inserts content after generate_stats and not the process_request. """ - list(User.objects.filter(username="café".encode())) + list(User.objects.filter(username="café")) response = self.panel.process_request(self.request) # ensure the panel does not have content yet. self.assertNotIn("café", self.panel.content) @@ -351,7 +351,7 @@ def test_insert_locals(self): Test that the panel inserts locals() content. """ local_var = "" # noqa: F841 - list(User.objects.filter(username="café".encode())) + list(User.objects.filter(username="café")) response = self.panel.process_request(self.request) self.panel.generate_stats(self.request, response) self.assertIn("local_var", self.panel.content) @@ -365,7 +365,7 @@ def test_not_insert_locals(self): """ Test that the panel does not insert locals() content. """ - list(User.objects.filter(username="café".encode())) + list(User.objects.filter(username="café")) response = self.panel.process_request(self.request) self.panel.generate_stats(self.request, response) self.assertNotIn("djdt-locals", self.panel.content)