Skip to content

Commit 8f3cbfa

Browse files
committed
Add tests for MultiPointField, MultiLineStringField, and GeometryCollectionField
These should be contributed upstream to Django.
1 parent be2918e commit 8f3cbfa

File tree

2 files changed

+56
-0
lines changed

2 files changed

+56
-0
lines changed

tests/gis_tests/geoapp/models.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,3 +102,15 @@ class ManyPointModel(NamedModel):
102102
point1 = models.PointField()
103103
point2 = models.PointField()
104104
point3 = models.PointField(srid=3857)
105+
106+
107+
class Points(models.Model):
108+
geom = models.MultiPointField()
109+
110+
111+
class Lines(models.Model):
112+
geom = models.MultiLineStringField()
113+
114+
115+
class GeometryCollections(models.Model):
116+
geom = models.GeometryCollectionField()

tests/gis_tests/geoapp/tests.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,13 @@
2626
City,
2727
Country,
2828
Feature,
29+
GeometryCollections,
30+
Lines,
2931
MinusOneSRID,
3032
MultiFields,
3133
NonConcreteModel,
3234
PennsylvaniaCity,
35+
Points,
3336
State,
3437
ThreeDimensionalFeature,
3538
Track,
@@ -269,6 +272,47 @@ def test_empty_geometries(self):
269272
self.assertEqual(feature.geom.srid, g.srid)
270273

271274

275+
# TODO: contribute these tests added to the MongoDB fork upstream to Django.
276+
class SaveLoadTests(TestCase):
277+
def test_multi_line_string_field(self):
278+
geom = MultiLineString(
279+
LineString((0, 0), (1, 1), (5, 5)),
280+
LineString((0, 0), (0, 5), (5, 5), (5, 0), (0, 0)),
281+
)
282+
obj = Lines.objects.create(geom=geom)
283+
obj.refresh_from_db()
284+
self.assertEqual(obj.geom.tuple, geom.tuple)
285+
286+
def test_multi_line_string_with_linear_ring(self):
287+
# LinearRings are transformed to LineString
288+
geom = MultiLineString(
289+
LineString((0, 0), (1, 1), (5, 5)),
290+
LinearRing((0, 0), (0, 5), (5, 5), (5, 0), (0, 0)),
291+
)
292+
obj = Lines.objects.create(geom=geom)
293+
obj.refresh_from_db()
294+
self.assertEqual(obj.geom.tuple, geom.tuple)
295+
self.assertEqual(obj.geom[0].tuple, geom[0].tuple)
296+
self.assertEqual(obj.geom[1].__class__.__name__, "LineString")
297+
self.assertEqual(obj.geom[1].tuple, geom[1].tuple)
298+
299+
def test_multi_point_field(self):
300+
geom = MultiPoint(Point(1, 1), Point(0, 0))
301+
obj = Points.objects.create(geom=geom)
302+
obj.refresh_from_db()
303+
self.assertEqual(obj.geom, geom)
304+
305+
def test_geometry_collection_field(self):
306+
geom = GeometryCollection(
307+
Point(2, 2),
308+
LineString((0, 0), (2, 2)),
309+
Polygon(LinearRing((0, 0), (0, 5), (5, 5), (5, 0), (0, 0))),
310+
)
311+
obj = GeometryCollections.objects.create(geom=geom)
312+
obj.refresh_from_db()
313+
self.assertEqual(obj.geom, geom)
314+
315+
272316
class GeoLookupTest(TestCase):
273317
fixtures = ["initial"]
274318

0 commit comments

Comments
 (0)