1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
import copy
from unittest import mock
from django.contrib.gis.db.models import GeometryField
from django.contrib.gis.db.models.fields import BaseSpatialField
from django.contrib.gis.db.models.sql import AreaField, DistanceField
from django.test import SimpleTestCase
class FieldsTests(SimpleTestCase):
def test_area_field_deepcopy(self):
field = AreaField(None)
self.assertEqual(copy.deepcopy(field), field)
def test_distance_field_deepcopy(self):
field = DistanceField(None)
self.assertEqual(copy.deepcopy(field), field)
class GeometryFieldTests(SimpleTestCase):
def test_deconstruct_empty(self):
field = GeometryField()
*_, kwargs = field.deconstruct()
self.assertEqual(kwargs, {"srid": 4326})
def test_deconstruct_values(self):
field = GeometryField(
srid=4067,
dim=3,
geography=True,
extent=(
50199.4814,
6582464.0358,
-50000.0,
761274.6247,
7799839.8902,
50000.0,
),
tolerance=0.01,
)
*_, kwargs = field.deconstruct()
self.assertEqual(
kwargs,
{
"srid": 4067,
"dim": 3,
"geography": True,
"extent": (
50199.4814,
6582464.0358,
-50000.0,
761274.6247,
7799839.8902,
50000.0,
),
"tolerance": 0.01,
},
)
def test_deconstruct_max_geom_collections(self):
# The default is omitted, a custom value is preserved.
field = GeometryField()
*_, kwargs = field.deconstruct()
self.assertNotIn("max_geom_collections", kwargs)
field = GeometryField(max_geom_collections=128)
*_, kwargs = field.deconstruct()
self.assertEqual(kwargs["max_geom_collections"], 128)
def test_formfield_forwards_max_geom_collections(self):
field = GeometryField(max_geom_collections=128)
self.assertEqual(field.formfield().max_geom_collections, 128)
def test_get_prep_value_without_max_geom_collections_uses_default(self):
# A spatial field that is not RASTER nor defines max_geom_collections
# still applies the default limit when preparing a lookup value.
class AttrlessSpatialField(BaseSpatialField):
geom_type = "GEOMETRY"
field = AttrlessSpatialField()
geom = "POINT(0 0)"
for _ in range(6):
geom = f"GEOMETRYCOLLECTION({geom})"
msg = "WKT contains too many possible GeometryCollections."
with (
mock.patch("django.contrib.gis.db.models.fields.MAX_GEOM_COLLECTIONS", 5),
self.assertRaisesMessage(ValueError, msg),
):
field.get_prep_value(geom)
|