Skip to content

Commit 287c122

Browse files
committed
Add Postgis to tests, attemt to add regression test
1 parent bf1bfa1 commit 287c122

File tree

5 files changed

+51
-8
lines changed

5 files changed

+51
-8
lines changed

tests/models.py

Lines changed: 8 additions & 0 deletions
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

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,10 @@ def test_default_case(self):
2828
)
2929
self.assertEqual(self.panel.num_used, 0)
3030
self.assertNotEqual(self.panel.num_found, 0)
31-
self.assertEqual(
32-
self.panel.get_staticfiles_apps(), ["django.contrib.admin", "debug_toolbar"]
33-
)
31+
expected_apps = ["django.contrib.admin", "debug_toolbar"]
32+
if settings.USE_GIS:
33+
expected_apps = ["django.contrib.gis"] + expected_apps
34+
self.assertEqual(self.panel.get_staticfiles_apps(), expected_apps)
3435
self.assertEqual(
3536
self.panel.get_staticfiles_dirs(), finders.FileSystemFinder().locations
3637
)
@@ -75,9 +76,10 @@ def test_finder_directory_does_not_exist(self):
7576
)
7677
self.assertEqual(self.panel.num_used, 0)
7778
self.assertNotEqual(self.panel.num_found, 0)
78-
self.assertEqual(
79-
self.panel.get_staticfiles_apps(), ["django.contrib.admin", "debug_toolbar"]
80-
)
79+
expected_apps = ["django.contrib.admin", "debug_toolbar"]
80+
if settings.USE_GIS:
81+
expected_apps = ["django.contrib.gis"] + expected_apps
82+
self.assertEqual(self.panel.get_staticfiles_apps(), expected_apps)
8183
self.assertEqual(
8284
self.panel.get_staticfiles_dirs(), finders.FileSystemFinder().locations
8385
)

tests/settings.py

Lines changed: 8 additions & 1 deletion
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 = [
@@ -81,7 +86,9 @@
8186

8287
DATABASES = {
8388
"default": {
84-
"ENGINE": "django.db.backends.%s" % os.getenv("DB_BACKEND"),
89+
"ENGINE": "django.{}db.backends.{}".format(
90+
"contrib.gis." if USE_GIS else "", os.getenv("DB_BACKEND")
91+
),
8592
"NAME": os.getenv("DB_NAME"),
8693
"USER": os.getenv("DB_USER"),
8794
"PASSWORD": os.getenv("DB_PASSWORD"),

tests/test_integration.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
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
9+
from django.contrib.gis.geos import GEOSGeometry
710
from django.contrib.staticfiles.testing import StaticLiveServerTestCase
811
from django.core import signing
912
from django.db import connection
@@ -14,6 +17,7 @@
1417

1518
from debug_toolbar.middleware import DebugToolbarMiddleware, show_toolbar
1619
from debug_toolbar.panels import Panel
20+
from debug_toolbar.panels.sql.forms import SQLSelectForm
1721
from debug_toolbar.toolbar import DebugToolbar
1822

1923
from .base import BaseTestCase, IntegrationTestCase
@@ -236,6 +240,26 @@ def test_sql_explain_checks_show_toolbar(self):
236240
)
237241
self.assertEqual(response.status_code, 404)
238242

243+
@unittest.skipUnless(settings.USE_GIS, "Test only valid with gis support")
244+
def test_sql_explain_gis(self):
245+
from .models import Location
246+
247+
db_table = Location._meta.db_table
248+
249+
url = "/__debug__/sql_explain/"
250+
geom = GEOSGeometry("POLYGON((0 0, 0 1, 1 1, 0 0))")
251+
data = {
252+
"sql": f'SELECT "{db_table}"."point" FROM "{db_table}" WHERE "{db_table}"."point" @ {geom.hex} LIMIT 1',
253+
"raw_sql": f'SELECT "{db_table}"."point" FROM "{db_table}" WHERE "{db_table}"."point" @ %s LIMIT 1',
254+
"params": json.dumps([geom.hex]),
255+
"alias": "default",
256+
"duration": "0",
257+
}
258+
data["hash"] = SQLSelectForm().make_hash(data)
259+
260+
response = self.client.post(url, data=data)
261+
self.assertEqual(response.status_code, 200)
262+
239263
@unittest.skipUnless(
240264
connection.vendor == "postgresql", "Test valid only on PostgreSQL"
241265
)

tox.ini

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ envlist =
66
py{36,37,38,39}-dj22-sqlite
77
py{36,37,38,39}-dj{30,31}-sqlite
88
py{36,37,38,39}-djmaster-sqlite
9-
py{37,38,39}-dj{22,30,31}-{postgresql,mysql}
9+
py{37,38,39}-dj{22,30,31}-{postgresql,mysql,postgis}
1010

1111
[testenv]
1212
deps =
@@ -15,6 +15,7 @@ deps =
1515
dj31: Django==3.1.*
1616
sqlite: mock
1717
postgresql: psycopg2-binary
18+
postgis: psycopg2-binary
1819
mysql: mysqlclient
1920
djmaster: https://github.com/django/django/archive/master.tar.gz
2021
coverage
@@ -69,4 +70,5 @@ python =
6970
DB_BACKEND =
7071
mysql: mysql
7172
postgresql: postgresql
73+
postgis: postgresql
7274
sqlite3: sqlite

0 commit comments

Comments
 (0)