def test_relations_featuredetail_no_crud_view_boths(self): layer_destination = LayerFactory.create() layer_origin = LayerFactory.create() LayerRelation.objects.create(name='layer_layer', relation_type='distance', origin=layer_origin, destination=layer_destination, settings={"distance": 100}) response = self.client.get(reverse('feature-detail', args=(self.crud_view.layer_id, self.feature.identifier)), format="json") self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(len(response.json()['relations']), 0)
def setUp(self): self.layer = LayerFactory.create() self.client = APIClient() self.user = UserFactory(permissions=[ 'geostore.can_manage_layers', ]) self.client.force_authenticate(user=self.user)
def test_relations_featuredetail_crud_view_do_not_show(self, mocked): mocked.return_value = True layer_destination = LayerFactory.create() crud_view = factories.CrudViewFactory() LayerRelation.objects.create(name='layer_view', relation_type='distance', origin=self.crud_view.layer, destination=layer_destination, settings={"distance": 100}) layer_rel = LayerRelation.objects.create(name='view_view', relation_type='distance', origin=self.crud_view.layer, destination=crud_view.layer, settings={"distance": 100}) response = self.client.get(reverse('feature-detail', args=(self.crud_view.layer_id, self.feature.identifier)), format="json") url_relation = reverse('feature-relation', args=(self.crud_view.layer_id, self.feature.identifier, layer_rel.pk)) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.json()['relations'][0]['label'], "view_view") self.assertEqual(response.json()['relations'][0]['url'], url_relation) self.assertEqual(response.json()['relations'][0]['empty'], True) self.assertEqual(len(response.json()['relations']), 1) Feature.objects.create(geom=Point(0, 0, srid=4326), layer=crud_view.layer) self.feature.sync_relations(layer_rel.pk) response = self.client.get(reverse('feature-detail', args=(self.crud_view.layer_id, self.feature.identifier)), format="json") self.assertEqual(response.json()['relations'][0]['empty'], False)
def setUp(self): self.fake_geometry = {"type": "Point", "coordinates": [2., 45.]} self.intersect_geometry = { "type": "LineString", "coordinates": [[1.3839340209960938, 43.602521593464054], [1.4869308471679688, 43.60376465190968]] } self.intersect_ref_geometry = { "type": "LineString", "coordinates": [[1.440925598144531, 43.64750394449096], [1.440582275390625, 43.574421623084234]] } self.fake_linestring = { "type": "LineString", "coordinates": [ [1.3839340209960938, 43.602521593464054], ] } self.fake_polygon = { "type": "Polygon", "coordinates": [[[1.3839340209960938, 43.602521593464054], [1.440582275390625, 43.574421623084234]]] } self.layer = LayerFactory.create(add_features=5) self.group = LayerGroup.objects.create(name='mygroup', slug='mygroup') self.group.layers.add(self.layer) self.user = UserFactory() self.client.force_authenticate(self.user)
def test_relations_featurelist_crud_view_do_not_show(self, mocked): mocked.return_value = True layer_destination = LayerFactory.create() crud_view = factories.CrudViewFactory() LayerRelation.objects.create(name='layer_view', relation_type='distance', origin=self.crud_view.layer, destination=layer_destination, settings={"distance": 100}) layer_rel = LayerRelation.objects.create(name='view_view', relation_type='distance', origin=self.crud_view.layer, destination=crud_view.layer, settings={"distance": 100}) response = self.client.get(reverse('feature-list', args=(self.crud_view.layer_id, )), data={}, format="json") url_relation = reverse('feature-relation', args=(self.crud_view.layer_id, self.feature.identifier, layer_rel.pk)) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.json()[0]['relations']['view_view'], url_relation) self.assertEqual(len(response.json()[0]['relations']), 1)
def setUp(self): self.user = SuperUserFactory() self.client.force_authenticate(user=self.user) factory.random.reseed_random(42) self.layer = LayerFactory.create(add_random_features=20)
def setUp(self): self.test_value = "PotatoSalad" self.layer = LayerFactory.create( geom_type=GeometryTypes.LineString, schema={ "type": "object", "required": [ "name", ], "properties": { "name": { "type": "string", "title": "Name" } }, }, ) self.crud_view = CrudViewFactory(layer=self.layer) CrudViewProperty.objects.create( view=self.crud_view, key="length", editable=False, json_schema={ "type": "integer", "title": "Length" }, function_path="test_terra_geocrud.functions_test.get_length_km", ) CrudViewProperty.objects.create( view=self.crud_view, key="name", editable=True, json_schema={ "type": "string", "title": "Name" }, ) self.test_prop = CrudViewProperty.objects.create( view=self.crud_view, key="test_property", editable=True, json_schema={ "type": "string", "title": "Test Property" }, ) sync_layer_schema(self.crud_view) self.new_object = Feature.objects.create( layer=self.crud_view.layer, properties={"name": "super test"}, geom=LineString((0, 0), (1, 0)), )
def setUp(self): layer = LayerFactory.create(geom_type=GeometryTypes.LineString, schema={ "type": "object", "required": [ "name", ], "properties": { "name": { "type": "string", "title": "Name" } } }) self.crud_view = CrudViewFactory(layer=layer) self.prop_length = CrudViewProperty.objects.create( view=self.crud_view, key="length", editable=False, json_schema={ 'type': "integer", "title": "Length" }, function_path='test_terra_geocrud.functions_test.get_length') self.prop_name = CrudViewProperty.objects.create(view=self.crud_view, key="name", editable=True, json_schema={ 'type': "string", "title": "Name" }) sync_layer_schema(self.crud_view) with patch('terra_geocrud.signals.execute_async_func') as mocked_async: self.add_side_effect_async(mocked_async) with patch('geostore.settings.GEOSTORE_RELATION_CELERY_ASYNC', new_callable=PropertyMock) as mocked: mocked.return_value = True self.feature = Feature.objects.create( layer=self.crud_view.layer, properties={'name': 'toto'}, geom=LineString((0, 0), (1, 0))) self.feature_long = Feature.objects.create( layer=self.crud_view.layer, properties={'name': 'tata'}, geom=LineString((0, 0), (10, 10)))
def test_routing_settings_geostorecrudview_detail(self): layer = LayerFactory.create(routable=True) RoutingSettingsFactory.create(provider="geostore", layer=layer, crud_view=self.view_1) response = self.client.get( reverse('crudview-detail', args=(self.view_1.pk, ))) self.assertEqual(response.status_code, status.HTTP_200_OK) data = response.json() routing_settings = data['routing_settings'] self.assertEqual(routing_settings[0]['provider']['name'], "geostore") self.assertEqual(routing_settings[0]['provider']['options']['url'], reverse('layer-route', args=[layer.pk])) response = self.client.post(reverse('layer-route', args=[layer.pk]), { 'geom': 'SRID=2154;LINESTRING(0 0, 1 1)', }) data = response.json() self.assertNotEqual(data, {'detail': 'Not found.'})
def test_featurerelation_without_crud_view(self, mocked): mocked.return_value = True layer_destination = LayerFactory.create() feature_destination = Feature.objects.create(geom=Point(0, 0, srid=4326), layer=layer_destination) intersect_relation = LayerRelation.objects.create( relation_type='distance', origin=self.crud_view.layer, destination=layer_destination, settings={"distance": 100}) self.feature.sync_relations(intersect_relation.pk) response = self.client.get( reverse('feature-relation', args=(self.crud_view.layer_id, self.feature.identifier, intersect_relation.pk))) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.json()[0]['identifier'], str(feature_destination.identifier))
def setUp(self): self.layer = LayerFactory.create(add_features=5)
def setUp(self): self.crud_view = factories.CrudViewFactory() self.layer = LayerFactory.create()
def setUp(self): layer = LayerFactory.create(geom_type=GeometryTypes.LineString, schema={ "type": "object", "required": [ "name", ], "properties": { "name": { "type": "string", "title": "Name" } } }) self.crud_view = CrudViewFactory(layer=layer) self.layer_city = LayerFactory.create(geom_type=GeometryTypes.Polygon, schema={ "type": "object", "required": [ "name", ], "properties": { "name": { "type": "string", "title": "Name" } } }) crud_view = CrudViewFactory.create(layer=self.layer_city) with patch( 'terra_geocrud.tasks.feature_update_relations_and_properties.delay' ): self.layer_relation = LayerRelation.objects.create( name='cities', relation_type='intersects', origin=self.crud_view.layer, destination=crud_view.layer) self.prop_name = CrudViewProperty.objects.create(view=self.crud_view, key="name", editable=True, json_schema={ 'type': "string", "title": "Name" }) self.prop_relation_first_city = CrudViewProperty.objects.create( view=self.crud_view, key="city", editable=False, json_schema={ 'type': "array", "items": { "type": "string" } }, function_path='test_terra_geocrud.functions_test.get_cities') sync_layer_schema(self.crud_view) sync_layer_schema(crud_view) with patch('terra_geocrud.signals.execute_async_func') as mocked_async: self.add_side_effect_async(mocked_async) with patch('geostore.settings.GEOSTORE_RELATION_CELERY_ASYNC', new_callable=PropertyMock) as mocked: mocked.return_value = True self.feature = Feature.objects.create( layer=self.crud_view.layer, properties={'name': 'toto'}, geom=LineString((0, 0), (1, 0))) self.feature_long = Feature.objects.create( layer=self.crud_view.layer, properties={'name': 'tata'}, geom=LineString((0, 0), (10, 10))) self.feature_city_first = Feature.objects.create( layer=self.layer_city, properties={"name": "Ville 0 0"}, geom=Polygon(((0, 0), (5, 0), (5, 5), (0, 5), (0, 0))), ) Feature.objects.create(layer=self.layer_city, properties={"name": "Ville 5 5"}, geom=Polygon(((5, 5), (10, 5), (10, 10), (5, 10), (5, 5)))) Feature.objects.create(layer=self.layer_city, properties={"name": "Ville 11 11"}, geom=Polygon(((11, 11), (12, 11), (12, 12), (11, 12), (11, 11))))
def test_signal_start_end_cities(self, property_mocked, async_mocked, mock_delay): property_mocked.return_value = True self.add_side_effect_async(async_mocked) layer = LayerFactory.create(geom_type=GeometryTypes.Polygon, schema={ "type": "object", "required": [ "name", ], "properties": { "name": { "type": "string", "title": "Name" } } }) crud_view = CrudViewFactory.create(layer=layer) LayerRelation.objects.create(name='cities', relation_type='intersects', origin=self.crud_view.layer, destination=crud_view.layer) self.prop_relation_first_city = CrudViewProperty.objects.create( view=self.crud_view, key="first_city", editable=False, json_schema={'type': "string"}, function_path='test_terra_geocrud.functions_test.get_first_city') self.prop_relation_last_city = CrudViewProperty.objects.create( view=self.crud_view, key="last_city", editable=False, json_schema={'type': "string"}, function_path='test_terra_geocrud.functions_test.get_last_city') sync_layer_schema(self.crud_view) sync_layer_schema(crud_view) self.feature_long.refresh_from_db() self.feature_long.save() self.feature_long.refresh_from_db() self.assertEqual(self.feature_long.properties, { 'name': 'tata', 'first_city': '', 'last_city': '' }) Feature.objects.create( layer=layer, properties={"name": "Ville 0 0"}, geom=Polygon(((0, 0), (5, 0), (5, 5), (0, 5), (0, 0))), ) Feature.objects.create(layer=layer, properties={"name": "Ville 5 5"}, geom=Polygon(((5, 5), (10, 5), (10, 10), (5, 10), (5, 5)))) self.feature_long.refresh_from_db() self.feature_long.save() self.feature_long.refresh_from_db() feature = Feature.objects.get(pk=self.feature_long.pk) self.assertEqual(feature.properties, { 'first_city': 'Ville 0 0', 'last_city': 'Ville 5 5', 'name': 'tata' })
def test_signal_function_with_relation(self, property_mocked, async_mocked, mock_delay): property_mocked.return_value = True self.add_side_effect_async(async_mocked) layer = LayerFactory.create(geom_type=GeometryTypes.LineString, schema={ "type": "object", "required": [ "name", ], "properties": { "name": { "type": "string", "title": "Name" } } }) crud_view = CrudViewFactory.create(layer=layer) self.prop_relation = CrudViewProperty.objects.create( view=self.crud_view, key="cities", editable=False, json_schema={ 'type': "array", "items": { "type": "string" } }, function_path='test_terra_geocrud.functions_test.get_cities') sync_layer_schema(self.crud_view) sync_layer_schema(crud_view) self.feature.save() self.feature.refresh_from_db() self.assertEqual(self.feature.properties, { 'name': 'toto', 'length': 1.0, 'cities': [] }) LayerRelation.objects.create(name='cities', relation_type='distance', origin=self.crud_view.layer, destination=crud_view.layer, settings={"distance": 100}) self.feature.save() self.feature.refresh_from_db() self.assertEqual(self.feature.properties, { 'name': 'toto', 'length': 1.0, 'cities': [] }) feature_intersect = Feature.objects.create(layer=layer, properties={}, geom=LineString((0, 0), (10, 0))) self.feature.refresh_from_db() self.feature.save() self.feature.refresh_from_db() self.assertEqual(self.feature.properties, { 'name': 'toto', 'length': 1.0, 'cities': [] }) feature_intersect.properties = {'name': 'City'} feature_intersect.save() self.feature.refresh_from_db() self.feature.save() self.feature.refresh_from_db() self.assertEqual(self.feature.properties, { 'name': 'toto', 'length': 1.0, 'cities': ['City'] })