tests.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. from django.contrib.gis.geos import Point
  2. from django.test import SimpleTestCase, override_settings
  3. from .models import City, site, site_gis, site_gis_custom
  4. @override_settings(ROOT_URLCONF="django.contrib.gis.tests.geoadmin.urls")
  5. class GeoAdminTest(SimpleTestCase):
  6. admin_site = site # ModelAdmin
  7. def test_widget_empty_string(self):
  8. geoadmin = self.admin_site.get_model_admin(City)
  9. form = geoadmin.get_changelist_form(None)({"point": ""})
  10. with self.assertRaisesMessage(AssertionError, "no logs"):
  11. with self.assertLogs("django.contrib.gis", "ERROR"):
  12. output = str(form["point"])
  13. self.assertInHTML(
  14. '<textarea id="id_point" class="vSerializedField required" cols="150"'
  15. ' rows="10" name="point" hidden></textarea>',
  16. output,
  17. )
  18. def test_widget_invalid_string(self):
  19. geoadmin = self.admin_site.get_model_admin(City)
  20. form = geoadmin.get_changelist_form(None)({"point": "INVALID()"})
  21. with self.assertLogs("django.contrib.gis", "ERROR") as cm:
  22. output = str(form["point"])
  23. self.assertInHTML(
  24. '<textarea id="id_point" class="vSerializedField required" cols="150"'
  25. ' rows="10" name="point" hidden></textarea>',
  26. output,
  27. )
  28. self.assertEqual(len(cm.records), 2)
  29. self.assertEqual(
  30. cm.records[0].getMessage(),
  31. "Error creating geometry from value 'INVALID()' (String input "
  32. "unrecognized as WKT EWKT, and HEXEWKB.)",
  33. )
  34. def test_widget_has_changed(self):
  35. geoadmin = self.admin_site.get_model_admin(City)
  36. form = geoadmin.get_changelist_form(None)()
  37. has_changed = form.fields["point"].has_changed
  38. initial = Point(13.4197458572965953, 52.5194108501149799, srid=4326)
  39. data_same = "SRID=3857;POINT(1493879.2754093995 6894592.019687599)"
  40. data_almost_same = "SRID=3857;POINT(1493879.2754093990 6894592.019687590)"
  41. data_changed = "SRID=3857;POINT(1493884.0527237 6894593.8111804)"
  42. self.assertIs(has_changed(None, data_changed), True)
  43. self.assertIs(has_changed(initial, ""), True)
  44. self.assertIs(has_changed(None, ""), False)
  45. self.assertIs(has_changed(initial, data_same), False)
  46. self.assertIs(has_changed(initial, data_almost_same), False)
  47. self.assertIs(has_changed(initial, data_changed), True)
  48. class GISAdminTests(GeoAdminTest):
  49. admin_site = site_gis # GISModelAdmin
  50. def test_default_gis_widget_kwargs(self):
  51. geoadmin = self.admin_site.get_model_admin(City)
  52. form = geoadmin.get_changelist_form(None)()
  53. widget = form["point"].field.widget
  54. self.assertEqual(widget.attrs["default_lat"], 47)
  55. self.assertEqual(widget.attrs["default_lon"], 5)
  56. self.assertEqual(widget.attrs["default_zoom"], 12)
  57. def test_custom_gis_widget_kwargs(self):
  58. geoadmin = site_gis_custom.get_model_admin(City)
  59. form = geoadmin.get_changelist_form(None)()
  60. widget = form["point"].field.widget
  61. self.assertEqual(widget.attrs["default_lat"], 55)
  62. self.assertEqual(widget.attrs["default_lon"], 37)
  63. self.assertEqual(widget.attrs["default_zoom"], 12)