Skip to content

Commit 632e02c

Browse files
jieterauvipy
authored andcommitted
Add Postgis to tests, attemt to add regression test
1 parent 1e873bc commit 632e02c

File tree

5 files changed

+53
-10
lines changed

5 files changed

+53
-10
lines changed

tests/models.py

+8
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from django.conf import settings
12
from django.db import models
23

34

@@ -23,3 +24,10 @@ class Binary(models.Model):
2324

2425
class PostgresJSON(models.Model):
2526
field = JSONField()
27+
28+
29+
if settings.USE_GIS:
30+
from django.contrib.gis.db import models as gismodels
31+
32+
class Location(gismodels.Model):
33+
point = gismodels.PointField()

tests/panels/test_staticfiles.py

+8-6
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,10 @@ def test_default_case(self):
2626
)
2727
self.assertEqual(self.panel.num_used, 0)
2828
self.assertNotEqual(self.panel.num_found, 0)
29-
self.assertEqual(
30-
self.panel.get_staticfiles_apps(), ["django.contrib.admin", "debug_toolbar"]
31-
)
29+
expected_apps = ["django.contrib.admin", "debug_toolbar"]
30+
if settings.USE_GIS:
31+
expected_apps = ["django.contrib.gis"] + expected_apps
32+
self.assertEqual(self.panel.get_staticfiles_apps(), expected_apps)
3233
self.assertEqual(
3334
self.panel.get_staticfiles_dirs(), finders.FileSystemFinder().locations
3435
)
@@ -74,9 +75,10 @@ def test_finder_directory_does_not_exist(self):
7475
)
7576
self.assertEqual(self.panel.num_used, 0)
7677
self.assertNotEqual(self.panel.num_found, 0)
77-
self.assertEqual(
78-
self.panel.get_staticfiles_apps(), ["django.contrib.admin", "debug_toolbar"]
79-
)
78+
expected_apps = ["django.contrib.admin", "debug_toolbar"]
79+
if settings.USE_GIS:
80+
expected_apps = ["django.contrib.gis"] + expected_apps
81+
self.assertEqual(self.panel.get_staticfiles_apps(), expected_apps)
8082
self.assertEqual(
8183
self.panel.get_staticfiles_dirs(), finders.FileSystemFinder().locations
8284
)

tests/settings.py

+8-1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@
2727
"tests",
2828
]
2929

30+
USE_GIS = os.getenv("DB_BACKEND") in ("postgis",)
31+
32+
if USE_GIS:
33+
INSTALLED_APPS = ["django.contrib.gis"] + INSTALLED_APPS
34+
3035
MEDIA_URL = "/media/" # Avoids https://code.djangoproject.com/ticket/21451
3136

3237
MIDDLEWARE = [
@@ -82,7 +87,9 @@
8287

8388
DATABASES = {
8489
"default": {
85-
"ENGINE": "django.db.backends.%s" % os.getenv("DB_BACKEND", "sqlite3"),
90+
"ENGINE": "django.{}db.backends.{}".format(
91+
"contrib.gis." if USE_GIS else "", os.getenv("DB_BACKEND", "sqlite3")
92+
),
8693
"NAME": os.getenv("DB_NAME", ":memory:"),
8794
"USER": os.getenv("DB_USER"),
8895
"PASSWORD": os.getenv("DB_PASSWORD"),

tests/test_integration.py

+24
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1+
import json
12
import os
23
import re
34
import unittest
45

56
import django
67
import html5lib
8+
from django.conf import settings
79
from django.contrib.staticfiles.testing import StaticLiveServerTestCase
810
from django.core import signing
911
from django.core.cache import cache
@@ -16,6 +18,7 @@
1618
from debug_toolbar.forms import SignedDataForm
1719
from debug_toolbar.middleware import DebugToolbarMiddleware, show_toolbar
1820
from debug_toolbar.panels import Panel
21+
from debug_toolbar.panels.sql.forms import SQLSelectForm
1922
from debug_toolbar.toolbar import DebugToolbar
2023

2124
from .base import BaseTestCase, IntegrationTestCase
@@ -293,6 +296,27 @@ def test_sql_explain_checks_show_toolbar(self):
293296
)
294297
self.assertEqual(response.status_code, 404)
295298

299+
@unittest.skipUnless(settings.USE_GIS, "Test only valid with gis support")
300+
def test_sql_explain_gis(self):
301+
from django.contrib.gis.geos import GEOSGeometry
302+
from .models import Location
303+
304+
db_table = Location._meta.db_table
305+
306+
url = "/__debug__/sql_explain/"
307+
geom = GEOSGeometry("POLYGON((0 0, 0 1, 1 1, 0 0))")
308+
data = {
309+
"sql": f'SELECT "{db_table}"."point" FROM "{db_table}" WHERE "{db_table}"."point" @ {geom.hex} LIMIT 1',
310+
"raw_sql": f'SELECT "{db_table}"."point" FROM "{db_table}" WHERE "{db_table}"."point" @ %s LIMIT 1',
311+
"params": json.dumps([geom.hex]),
312+
"alias": "default",
313+
"duration": "0",
314+
}
315+
data["hash"] = SQLSelectForm().make_hash(data)
316+
317+
response = self.client.post(url, data=data)
318+
self.assertEqual(response.status_code, 200)
319+
296320
@unittest.skipUnless(
297321
connection.vendor == "postgresql", "Test valid only on PostgreSQL"
298322
)

tox.ini

+5-3
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ envlist =
33
docs
44
style
55
packaging
6-
py{36,37}-dj{22,31,32}-{sqlite,postgresql,mysql}
7-
py{38,39}-dj{22,31,32,40,main}-{sqlite,postgresql,mysql}
8-
py{310}-dj{40,main}-{sqlite,postgresql,mysql}
6+
py{36,37}-dj{22,31,32}-{sqlite,postgresql,postgis,mysql}
7+
py{38,39}-dj{22,31,32,40,main}-{sqlite,postgresql,postgis,mysql}
8+
py{310}-dj{40,main}-{sqlite,postgresql,postgis,mysql}
99

1010
[testenv]
1111
deps =
@@ -15,6 +15,7 @@ deps =
1515
dj40: Django>=4.0a1,<4.1
1616
sqlite: mock
1717
postgresql: psycopg2-binary
18+
postgis: psycopg2-binary
1819
mysql: mysqlclient
1920
djmain: https://github.com/django/django/archive/main.tar.gz
2021
coverage
@@ -97,4 +98,5 @@ python =
9798
DB_BACKEND =
9899
mysql: mysql
99100
postgresql: postgresql
101+
postgis: postgresql
100102
sqlite3: sqlite

0 commit comments

Comments
 (0)