summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRémy Sanchez <remy.sanchez@hyperthese.net>2014-03-25 16:24:47 +0100
committerClaude Paroz <claude@2xlibre.net>2014-03-29 15:37:40 +0100
commit88f1e3d93d8f48a302ff75b1936e471c4a52fff9 (patch)
tree5257647d0937249996d1bcffe8abf221c37d5e2a
parentf30e6590f40c8b008cbe5833579fca4fd93ecc61 (diff)
Unit testing Postgis version check
Refs #22334.
-rw-r--r--django/contrib/gis/tests/tests.py74
1 files changed, 74 insertions, 0 deletions
diff --git a/django/contrib/gis/tests/tests.py b/django/contrib/gis/tests/tests.py
new file mode 100644
index 0000000000..2caf7878c3
--- /dev/null
+++ b/django/contrib/gis/tests/tests.py
@@ -0,0 +1,74 @@
+import unittest
+
+from django.contrib.gis.db.backends.postgis.operations import PostGISOperations
+from django.core.exceptions import ImproperlyConfigured
+from django.db import ProgrammingError
+
+
+class FakeConnection(object):
+ def __init__(self):
+ self.settings_dict = {
+ 'NAME': 'test',
+ }
+
+
+class FakePostGISOperations(PostGISOperations):
+ def __init__(self, version=None):
+ self.version = version
+ self.connection = FakeConnection()
+
+ def _get_postgis_func(self, func):
+ if func == 'postgis_lib_version':
+ if self.version is None:
+ raise ProgrammingError
+ else:
+ return self.version
+ else:
+ raise NotImplementedError('This function was not expected to be called')
+
+
+class TestPostgisVersionCheck(unittest.TestCase):
+ """
+ Tests that the postgis version check parses correctly the version numbers
+ """
+
+ def test_get_version(self):
+ expect = '1.0.0'
+ ops = FakePostGISOperations(expect)
+ actual = ops.postgis_lib_version()
+ self.assertEqual(expect, actual)
+
+ def test_version_classic_tuple(self):
+ expect = ('1.2.3', 1, 2, 3)
+ ops = FakePostGISOperations(expect[0])
+ actual = ops.postgis_version_tuple()
+ self.assertEqual(expect, actual)
+
+ def test_version_dev_tuple(self):
+ expect = ('1.2.3dev', 1, 2, 3)
+ ops = FakePostGISOperations(expect[0])
+ actual = ops.postgis_version_tuple()
+ self.assertEqual(expect, actual)
+
+ def test_valid_version_numbers(self):
+ versions = [
+ ('1.3.0', 1, 3, 0),
+ ('2.1.1', 2, 1, 1),
+ ('2.2.0dev', 2, 2, 0),
+ ]
+
+ for version in versions:
+ ops = FakePostGISOperations(version[0])
+ actual = ops.spatial_version
+ self.assertEqual(version[1:], actual)
+
+ def test_invalid_version_numbers(self):
+ versions = ['nope', '123']
+
+ for version in versions:
+ ops = FakePostGISOperations(version)
+ self.assertRaises(Exception, lambda: ops.spatial_version)
+
+ def test_no_version_number(self):
+ ops = FakePostGISOperations()
+ self.assertRaises(ImproperlyConfigured, lambda: ops.spatial_version)