diff options
author | Giannis Adamopoulos <gadamopoulos@outlook.com> | 2020-12-09 19:12:56 +0200 |
---|---|---|
committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2021-09-17 08:56:16 +0200 |
commit | 4555aa0a489cb9dcf764edf12339097cdfa5ff84 (patch) | |
tree | 45862fd927ecc343590ed0827af911dd9002c266 /tests/gis_tests | |
parent | b5bf026813ca9aff83243f901edd722e0d60c2ea (diff) | |
download | django-4555aa0a489cb9dcf764edf12339097cdfa5ff84.tar.gz |
Fixed #27674 -- Deprecated GeoModelAdmin and OSMGeoAdmin.
Co-authored-by: Mariusz Felisiak <felisiak.mariusz@gmail.com>
Diffstat (limited to 'tests/gis_tests')
-rw-r--r-- | tests/gis_tests/admin.py | 2 | ||||
-rw-r--r-- | tests/gis_tests/geoadmin/models.py | 7 | ||||
-rw-r--r-- | tests/gis_tests/geoadmin/tests.py | 109 | ||||
-rw-r--r-- | tests/gis_tests/geoadmin_deprecated/__init__.py | 0 | ||||
-rw-r--r-- | tests/gis_tests/geoadmin_deprecated/admin.py (renamed from tests/gis_tests/geoadmin/admin.py) | 0 | ||||
-rw-r--r-- | tests/gis_tests/geoadmin_deprecated/models.py | 21 | ||||
-rw-r--r-- | tests/gis_tests/geoadmin_deprecated/tests.py | 119 | ||||
-rw-r--r-- | tests/gis_tests/geoadmin_deprecated/urls.py | 6 |
8 files changed, 188 insertions, 76 deletions
diff --git a/tests/gis_tests/admin.py b/tests/gis_tests/admin.py index f693ef34de..2662013f78 100644 --- a/tests/gis_tests/admin.py +++ b/tests/gis_tests/admin.py @@ -3,4 +3,6 @@ try: except ImportError: from django.contrib import admin + admin.GISModelAdmin = admin.ModelAdmin + # RemovedInDjango50Warning. admin.OSMGeoAdmin = admin.ModelAdmin diff --git a/tests/gis_tests/geoadmin/models.py b/tests/gis_tests/geoadmin/models.py index 731753f50b..6839099039 100644 --- a/tests/gis_tests/geoadmin/models.py +++ b/tests/gis_tests/geoadmin/models.py @@ -14,5 +14,8 @@ class City(models.Model): return self.name -site = admin.AdminSite(name='admin_gis') -site.register(City, admin.OSMGeoAdmin) +site = admin.AdminSite(name='gis_admin_modeladmin') +site.register(City, admin.ModelAdmin) + +site_gis = admin.AdminSite(name='gis_admin_gismodeladmin') +site_gis.register(City, admin.GISModelAdmin) diff --git a/tests/gis_tests/geoadmin/tests.py b/tests/gis_tests/geoadmin/tests.py index 67cc8101ef..00191e193f 100644 --- a/tests/gis_tests/geoadmin/tests.py +++ b/tests/gis_tests/geoadmin/tests.py @@ -1,98 +1,59 @@ -from django.contrib.gis import admin from django.contrib.gis.geos import Point from django.test import SimpleTestCase, override_settings -from .admin import UnmodifiableAdmin -from .models import City, site +from .models import City, site, site_gis @override_settings(ROOT_URLCONF='django.contrib.gis.tests.geoadmin.urls') class GeoAdminTest(SimpleTestCase): + admin_site = site # ModelAdmin - def test_ensure_geographic_media(self): - geoadmin = site._registry[City] - admin_js = geoadmin.media.render_js() - self.assertTrue(any(geoadmin.openlayers_url in js for js in admin_js)) - - def test_olmap_OSM_rendering(self): - delete_all_btn = """<a href="javascript:geodjango_point.clearFeatures()">Delete all Features</a>""" - - original_geoadmin = site._registry[City] - params = original_geoadmin.get_map_widget(City._meta.get_field('point')).params - result = original_geoadmin.get_map_widget(City._meta.get_field('point'))( - ).render('point', Point(-79.460734, 40.18476), params) - self.assertIn( - """geodjango_point.layers.base = new OpenLayers.Layer.OSM("OpenStreetMap (Mapnik)");""", - result) - - self.assertIn(delete_all_btn, result) - - site.unregister(City) - site.register(City, UnmodifiableAdmin) - try: - geoadmin = site._registry[City] - params = geoadmin.get_map_widget(City._meta.get_field('point')).params - result = geoadmin.get_map_widget(City._meta.get_field('point'))( - ).render('point', Point(-79.460734, 40.18476), params) - - self.assertNotIn(delete_all_btn, result) - finally: - site.unregister(City) - site.register(City, original_geoadmin.__class__) - - def test_olmap_WMS_rendering(self): - geoadmin = admin.GeoModelAdmin(City, site) - result = geoadmin.get_map_widget(City._meta.get_field('point'))( - ).render('point', Point(-79.460734, 40.18476)) - self.assertIn( - """geodjango_point.layers.base = new OpenLayers.Layer.WMS("OpenLayers WMS", """ - """"http://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic', format: 'image/jpeg'});""", - result) - - def test_olwidget_has_changed(self): - """ - Changes are accurately noticed by OpenLayersWidget. - """ - geoadmin = site._registry[City] - form = geoadmin.get_changelist_form(None)() - has_changed = form.fields['point'].has_changed - - initial = Point(13.4197458572965953, 52.5194108501149799, srid=4326) - data_same = "SRID=3857;POINT(1493879.2754093995 6894592.019687599)" - data_almost_same = "SRID=3857;POINT(1493879.2754093990 6894592.019687590)" - data_changed = "SRID=3857;POINT(1493884.0527237 6894593.8111804)" - - self.assertTrue(has_changed(None, data_changed)) - self.assertTrue(has_changed(initial, "")) - self.assertFalse(has_changed(None, "")) - self.assertFalse(has_changed(initial, data_same)) - self.assertFalse(has_changed(initial, data_almost_same)) - self.assertTrue(has_changed(initial, data_changed)) - - def test_olwidget_empty_string(self): - geoadmin = site._registry[City] + def test_widget_empty_string(self): + geoadmin = self.admin_site._registry[City] form = geoadmin.get_changelist_form(None)({'point': ''}) - with self.assertNoLogs('django.contrib.gis', 'ERROR'): - output = str(form['point']) + with self.assertRaisesMessage(AssertionError, 'no logs'): + with self.assertLogs('django.contrib.gis', 'ERROR'): + output = str(form['point']) self.assertInHTML( - '<textarea id="id_point" class="vWKTField required" cols="150"' + '<textarea id="id_point" class="vSerializedField required" cols="150"' ' rows="10" name="point"></textarea>', - output + output, ) - def test_olwidget_invalid_string(self): - geoadmin = site._registry[City] + def test_widget_invalid_string(self): + geoadmin = self.admin_site._registry[City] form = geoadmin.get_changelist_form(None)({'point': 'INVALID()'}) with self.assertLogs('django.contrib.gis', 'ERROR') as cm: output = str(form['point']) self.assertInHTML( - '<textarea id="id_point" class="vWKTField required" cols="150"' + '<textarea id="id_point" class="vSerializedField required" cols="150"' ' rows="10" name="point"></textarea>', - output + output, ) self.assertEqual(len(cm.records), 1) self.assertEqual( cm.records[0].getMessage(), "Error creating geometry from value 'INVALID()' (String input " - "unrecognized as WKT EWKT, and HEXEWKB.)" + "unrecognized as WKT EWKT, and HEXEWKB.)", ) + + def test_widget_has_changed(self): + geoadmin = self.admin_site._registry[City] + form = geoadmin.get_changelist_form(None)() + has_changed = form.fields['point'].has_changed + + initial = Point(13.4197458572965953, 52.5194108501149799, srid=4326) + data_same = 'SRID=3857;POINT(1493879.2754093995 6894592.019687599)' + data_almost_same = 'SRID=3857;POINT(1493879.2754093990 6894592.019687590)' + data_changed = 'SRID=3857;POINT(1493884.0527237 6894593.8111804)' + + self.assertIs(has_changed(None, data_changed), True) + self.assertIs(has_changed(initial, ''), True) + self.assertIs(has_changed(None, ''), False) + self.assertIs(has_changed(initial, data_same), False) + self.assertIs(has_changed(initial, data_almost_same), False) + self.assertIs(has_changed(initial, data_changed), True) + + +class GISAdminTests(GeoAdminTest): + admin_site = site_gis # GISModelAdmin diff --git a/tests/gis_tests/geoadmin_deprecated/__init__.py b/tests/gis_tests/geoadmin_deprecated/__init__.py new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/tests/gis_tests/geoadmin_deprecated/__init__.py diff --git a/tests/gis_tests/geoadmin/admin.py b/tests/gis_tests/geoadmin_deprecated/admin.py index ab39c28885..ab39c28885 100644 --- a/tests/gis_tests/geoadmin/admin.py +++ b/tests/gis_tests/geoadmin_deprecated/admin.py diff --git a/tests/gis_tests/geoadmin_deprecated/models.py b/tests/gis_tests/geoadmin_deprecated/models.py new file mode 100644 index 0000000000..efd9535977 --- /dev/null +++ b/tests/gis_tests/geoadmin_deprecated/models.py @@ -0,0 +1,21 @@ +from django.contrib.gis.db import models +from django.test import ignore_warnings +from django.utils.deprecation import RemovedInDjango50Warning + +from ..admin import admin + + +class City(models.Model): + name = models.CharField(max_length=30) + point = models.PointField() + + class Meta: + app_label = 'geoadmini_deprecated' + + def __str__(self): + return self.name + + +site = admin.AdminSite(name='admin_gis') +with ignore_warnings(category=RemovedInDjango50Warning): + site.register(City, admin.OSMGeoAdmin) diff --git a/tests/gis_tests/geoadmin_deprecated/tests.py b/tests/gis_tests/geoadmin_deprecated/tests.py new file mode 100644 index 0000000000..4240de98b1 --- /dev/null +++ b/tests/gis_tests/geoadmin_deprecated/tests.py @@ -0,0 +1,119 @@ +from django.contrib.gis import admin +from django.contrib.gis.geos import Point +from django.test import SimpleTestCase, ignore_warnings, override_settings +from django.utils.deprecation import RemovedInDjango50Warning + +from .admin import UnmodifiableAdmin +from .models import City, site + + +@ignore_warnings(category=RemovedInDjango50Warning) +@override_settings(ROOT_URLCONF='django.contrib.gis.tests.geoadmin.urls') +class GeoAdminTest(SimpleTestCase): + + def test_ensure_geographic_media(self): + geoadmin = site._registry[City] + admin_js = geoadmin.media.render_js() + self.assertTrue(any(geoadmin.openlayers_url in js for js in admin_js)) + + def test_olmap_OSM_rendering(self): + delete_all_btn = """<a href="javascript:geodjango_point.clearFeatures()">Delete all Features</a>""" + + original_geoadmin = site._registry[City] + params = original_geoadmin.get_map_widget(City._meta.get_field('point')).params + result = original_geoadmin.get_map_widget(City._meta.get_field('point'))( + ).render('point', Point(-79.460734, 40.18476), params) + self.assertIn( + """geodjango_point.layers.base = new OpenLayers.Layer.OSM("OpenStreetMap (Mapnik)");""", + result) + + self.assertIn(delete_all_btn, result) + + site.unregister(City) + site.register(City, UnmodifiableAdmin) + try: + geoadmin = site._registry[City] + params = geoadmin.get_map_widget(City._meta.get_field('point')).params + result = geoadmin.get_map_widget(City._meta.get_field('point'))( + ).render('point', Point(-79.460734, 40.18476), params) + + self.assertNotIn(delete_all_btn, result) + finally: + site.unregister(City) + site.register(City, original_geoadmin.__class__) + + def test_olmap_WMS_rendering(self): + geoadmin = admin.GeoModelAdmin(City, site) + result = geoadmin.get_map_widget(City._meta.get_field('point'))( + ).render('point', Point(-79.460734, 40.18476)) + self.assertIn( + """geodjango_point.layers.base = new OpenLayers.Layer.WMS("OpenLayers WMS", """ + """"http://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic', format: 'image/jpeg'});""", + result) + + def test_olwidget_has_changed(self): + """ + Changes are accurately noticed by OpenLayersWidget. + """ + geoadmin = site._registry[City] + form = geoadmin.get_changelist_form(None)() + has_changed = form.fields['point'].has_changed + + initial = Point(13.4197458572965953, 52.5194108501149799, srid=4326) + data_same = "SRID=3857;POINT(1493879.2754093995 6894592.019687599)" + data_almost_same = "SRID=3857;POINT(1493879.2754093990 6894592.019687590)" + data_changed = "SRID=3857;POINT(1493884.0527237 6894593.8111804)" + + self.assertTrue(has_changed(None, data_changed)) + self.assertTrue(has_changed(initial, "")) + self.assertFalse(has_changed(None, "")) + self.assertFalse(has_changed(initial, data_same)) + self.assertFalse(has_changed(initial, data_almost_same)) + self.assertTrue(has_changed(initial, data_changed)) + + def test_olwidget_empty_string(self): + geoadmin = site._registry[City] + form = geoadmin.get_changelist_form(None)({'point': ''}) + with self.assertNoLogs('django.contrib.gis', 'ERROR'): + output = str(form['point']) + self.assertInHTML( + '<textarea id="id_point" class="vWKTField required" cols="150"' + ' rows="10" name="point"></textarea>', + output + ) + + def test_olwidget_invalid_string(self): + geoadmin = site._registry[City] + form = geoadmin.get_changelist_form(None)({'point': 'INVALID()'}) + with self.assertLogs('django.contrib.gis', 'ERROR') as cm: + output = str(form['point']) + self.assertInHTML( + '<textarea id="id_point" class="vWKTField required" cols="150"' + ' rows="10" name="point"></textarea>', + output + ) + self.assertEqual(len(cm.records), 1) + self.assertEqual( + cm.records[0].getMessage(), + "Error creating geometry from value 'INVALID()' (String input " + "unrecognized as WKT EWKT, and HEXEWKB.)" + ) + + +class DeprecationTests(SimpleTestCase): + def test_warning(self): + class DeprecatedOSMGeoAdmin(admin.OSMGeoAdmin): + pass + + class DeprecatedGeoModelAdmin(admin.GeoModelAdmin): + pass + + msg = ( + 'django.contrib.gis.admin.GeoModelAdmin and OSMGeoAdmin are ' + 'deprecated in favor of django.contrib.admin.ModelAdmin and ' + 'django.contrib.gis.admin.GISModelAdmin.' + ) + with self.assertRaisesMessage(RemovedInDjango50Warning, msg): + DeprecatedOSMGeoAdmin(City, site) + with self.assertRaisesMessage(RemovedInDjango50Warning, msg): + DeprecatedGeoModelAdmin(City, site) diff --git a/tests/gis_tests/geoadmin_deprecated/urls.py b/tests/gis_tests/geoadmin_deprecated/urls.py new file mode 100644 index 0000000000..c27b1d7cda --- /dev/null +++ b/tests/gis_tests/geoadmin_deprecated/urls.py @@ -0,0 +1,6 @@ +from django.contrib import admin +from django.urls import include, path + +urlpatterns = [ + path('admin/', include(admin.site.urls)), +] |