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 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_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'] })