tests.py 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import unittest
  2. from django.core.exceptions import ImproperlyConfigured
  3. from django.db import ProgrammingError
  4. try:
  5. from django.contrib.gis.db.backends.postgis.operations import (
  6. PostGISOperations,
  7. )
  8. HAS_POSTGRES = True
  9. except ImportError:
  10. HAS_POSTGRES = False
  11. if HAS_POSTGRES:
  12. class FakeConnection:
  13. def __init__(self):
  14. self.settings_dict = {
  15. 'NAME': 'test',
  16. }
  17. class FakePostGISOperations(PostGISOperations):
  18. def __init__(self, version=None):
  19. self.version = version
  20. self.connection = FakeConnection()
  21. def _get_postgis_func(self, func):
  22. if func == 'postgis_lib_version':
  23. if self.version is None:
  24. raise ProgrammingError
  25. else:
  26. return self.version
  27. elif func == 'version':
  28. pass
  29. else:
  30. raise NotImplementedError('This function was not expected to be called')
  31. @unittest.skipUnless(HAS_POSTGRES, "The psycopg2 driver is needed for these tests")
  32. class TestPostGISVersionCheck(unittest.TestCase):
  33. """
  34. The PostGIS version check parses correctly the version numbers
  35. """
  36. def test_get_version(self):
  37. expect = '1.0.0'
  38. ops = FakePostGISOperations(expect)
  39. actual = ops.postgis_lib_version()
  40. self.assertEqual(expect, actual)
  41. def test_version_classic_tuple(self):
  42. expect = ('1.2.3', 1, 2, 3)
  43. ops = FakePostGISOperations(expect[0])
  44. actual = ops.postgis_version_tuple()
  45. self.assertEqual(expect, actual)
  46. def test_version_dev_tuple(self):
  47. expect = ('1.2.3dev', 1, 2, 3)
  48. ops = FakePostGISOperations(expect[0])
  49. actual = ops.postgis_version_tuple()
  50. self.assertEqual(expect, actual)
  51. def test_version_loose_tuple(self):
  52. expect = ('1.2.3b1.dev0', 1, 2, 3)
  53. ops = FakePostGISOperations(expect[0])
  54. actual = ops.postgis_version_tuple()
  55. self.assertEqual(expect, actual)
  56. def test_valid_version_numbers(self):
  57. versions = [
  58. ('1.3.0', 1, 3, 0),
  59. ('2.1.1', 2, 1, 1),
  60. ('2.2.0dev', 2, 2, 0),
  61. ]
  62. for version in versions:
  63. with self.subTest(version=version):
  64. ops = FakePostGISOperations(version[0])
  65. actual = ops.spatial_version
  66. self.assertEqual(version[1:], actual)
  67. def test_no_version_number(self):
  68. ops = FakePostGISOperations()
  69. with self.assertRaises(ImproperlyConfigured):
  70. ops.spatial_version