summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorDavid Smith <smithdc@gmail.com>2024-09-23 18:21:02 +0100
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2025-11-25 10:10:06 +0100
commitd86802f13fd821f006371b95d888d294297874fd (patch)
tree7487556b06689ca860f4ee0e1fbdc26caf125973 /tests
parente3d8f557ff3bab2b37a55db83f71ceb90bc4ebc8 (diff)
Fixed #35783 -- Added NumDimensions GIS database function and __num_dimensions lookup.
Diffstat (limited to 'tests')
-rw-r--r--tests/gis_tests/geoapp/test_functions.py25
1 files changed, 24 insertions, 1 deletions
diff --git a/tests/gis_tests/geoapp/test_functions.py b/tests/gis_tests/geoapp/test_functions.py
index 917e63cd57..a6b072542c 100644
--- a/tests/gis_tests/geoapp/test_functions.py
+++ b/tests/gis_tests/geoapp/test_functions.py
@@ -17,7 +17,7 @@ from django.contrib.gis.geos import (
from django.contrib.gis.geos.libgeos import geos_version_tuple
from django.contrib.gis.measure import Area
from django.db import NotSupportedError, connection
-from django.db.models import IntegerField, Sum, Value
+from django.db.models import F, IntegerField, Sum, Value
from django.test import TestCase, skipUnlessDBFeature
from ..utils import FuncTestMixin
@@ -28,6 +28,7 @@ from .models import (
Feature,
ManyPointModel,
State,
+ ThreeDimensionalFeature,
Track,
)
@@ -608,6 +609,28 @@ class GISFunctionsTests(FuncTestMixin, TestCase):
else:
self.assertEqual(1, city.num_geom)
+ @skipUnlessDBFeature("has_NumDimensions_function")
+ def test_num_dimensions(self):
+ for c in Country.objects.annotate(num_dims=functions.NumDimensions("mpoly")):
+ self.assertEqual(2, c.num_dims)
+
+ ThreeDimensionalFeature.objects.create(
+ name="London", geom=Point(-0.126418, 51.500832, 0)
+ )
+ qs = ThreeDimensionalFeature.objects.annotate(
+ num_dims=functions.NumDimensions("geom")
+ )
+ self.assertEqual(qs[0].num_dims, 3)
+
+ qs = ThreeDimensionalFeature.objects.annotate(
+ num_dims=F("geom__num_dimensions")
+ )
+ self.assertEqual(qs[0].num_dims, 3)
+
+ msg = "'NumDimensions' takes exactly 1 argument (2 given)"
+ with self.assertRaisesMessage(TypeError, msg):
+ Country.objects.annotate(num_dims=functions.NumDimensions("point", "error"))
+
@skipUnlessDBFeature("has_NumPoints_function")
def test_num_points(self):
coords = [(-95.363151, 29.763374), (-95.448601, 29.713803)]