diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-02-19 20:12:56 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-04-24 19:38:56 +0200 |
commit | 0e34062d370da99b1c1711a0045bd639d1add20e (patch) | |
tree | a25c51fe15544468460b93825f8b12d926c05de9 /archaeological_finds/tests.py | |
parent | 34868fbe8f2f733d4d8513c8f5f2b0656f62abff (diff) | |
download | Ishtar-0e34062d370da99b1c1711a0045bd639d1add20e.tar.bz2 Ishtar-0e34062d370da99b1c1711a0045bd639d1add20e.zip |
Geom: fi x, y overload by form - geo tests
Diffstat (limited to 'archaeological_finds/tests.py')
-rw-r--r-- | archaeological_finds/tests.py | 98 |
1 files changed, 97 insertions, 1 deletions
diff --git a/archaeological_finds/tests.py b/archaeological_finds/tests.py index 7303ed56d..9efd6ac79 100644 --- a/archaeological_finds/tests.py +++ b/archaeological_finds/tests.py @@ -22,6 +22,7 @@ import json from django.conf import settings from django.contrib.auth.models import User, Permission, ContentType +from django.contrib.gis.geos import GEOSGeometry from django.core.files import File from django.core.files.uploadedfile import SimpleUploadedFile from django.core.urlresolvers import reverse @@ -31,7 +32,7 @@ from ishtar_common.models import ImporterType, IshtarUser, ImporterColumn,\ from django.utils.translation import pgettext_lazy, gettext_lazy as _ from ishtar_common.models import Person, get_current_profile, UserProfile, \ - Town, Area, Document + Town, Area, Document, SpatialReferenceSystem from archaeological_context_records.models import Period, Dating, \ ContextRecord, DatingType, DatingQuality from archaeological_finds import models, views @@ -1444,3 +1445,98 @@ class TreatmentTest(FindInit, TestCase): self.assertEqual(q.count(), 1) initial_find = q.all()[0] self.assertEqual(initial_find.upstream_treatment, None) + + +class GeomaticTest(FindInit, TestCase): + fixtures = FIND_FIXTURES + model = models.Find + + def setUp(self): + self.create_finds(data_base={"label": u"Find 1"}, force=True) + + def test_post_save_point(self): + find = self.finds[0] + base_find = find.base_finds.all()[0] + + srs, __ = SpatialReferenceSystem.objects.get_or_create( + txt_idx='wgs84', defaults={"srid": 4326, "label": 'WGS84', + 'auth_name': 'EPSG'} + ) + + # db source + geom = GEOSGeometry('POINT({} {} {})'.format(2, 43, 1), srid=4326) + base_find.point = geom + base_find.save() + base_find = models.BaseFind.objects.get(pk=base_find.pk) + self.assertIsNotNone(base_find.point) + self.assertIsNotNone(base_find.point_2d) + self.assertIsNotNone(base_find.x) + self.assertIsNotNone(base_find.y) + self.assertIsNotNone(base_find.z) + self.assertEqual(base_find.point_source, 'P') # precise + self.assertEqual(base_find.point_source_item, + unicode(models.BaseFind._meta.verbose_name)) + + # form input + base_find.x = 2 + base_find.y = 3 + base_find.z = 4 + base_find.spatial_reference_system = srs + base_find.save() + base_find = models.BaseFind.objects.get(pk=base_find.pk) + self.assertIsNotNone(base_find.point_2d) + self.assertIsNotNone(base_find.point) + self.assertEqual(base_find.point_source, 'P') # precise + self.assertEqual(base_find.point_source_item, + unicode(models.BaseFind._meta.verbose_name)) + + # reinit + base_find.x = None + base_find.y = None + base_find.z = None + base_find.save() + base_find = models.BaseFind.objects.get(pk=base_find.pk) + self.assertIsNone(base_find.point_2d) + self.assertIsNone(base_find.point) + self.assertEqual(base_find.point_source, None) + self.assertEqual(base_find.point_source_item, None) + + profile, created = IshtarSiteProfile.objects.get_or_create( + slug='default', active=True) + profile.use_town_for_geo = True + profile.save() + + # geom from context record town + center = 'POINT(6 10)' + limit = 'MULTIPOLYGON(((1 1,5 1,5 5,1 5,1 1),(2 2,2 3,3 3,3 2,2 2)),'\ + '((6 3,9 2,9 4,6 3)))' + cr = ContextRecord.objects.get(pk=base_find.context_record.pk) + t = cr.town + t.center ='SRID=4326;' + center + t.limit = 'SRID=4326;' + limit + t.save() + cr = ContextRecord.objects.get(pk=base_find.context_record.pk) + base_find = models.BaseFind.objects.get(pk=base_find.pk) + base_find.save() + self.assertEqual(base_find.point_2d, cr.town.center) + self.assertEqual(base_find.multi_polygon, cr.town.limit) + self.assertEqual(base_find.point_source, 'T') # town + self.assertEqual(base_find.point_source_item, + unicode(ContextRecord._meta.verbose_name)) + + # overload of coordinates by form + base_find = models.BaseFind.objects.get(pk=base_find.pk) + base_find.x = 5 + base_find.y = 6 + base_find.z = 1 + base_find.spatial_reference_system = srs + base_find.save() + + base_find = models.BaseFind.objects.get(pk=base_find.pk) + self.assertIsNotNone(base_find.point_2d) + self.assertIsNotNone(base_find.point) + self.assertEqual(base_find.point_2d.wkt, 'POINT (5 6)') + self.assertEqual(base_find.point_source, 'P') # precise + self.assertEqual(base_find.point_source_item, + unicode(models.BaseFind._meta.verbose_name)) + |