示例#1
0
 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)
示例#2
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)
示例#3
0
 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)
示例#4
0
    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)
示例#5
0
 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)
示例#6
0
    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)
示例#7
0
    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)),
        )
示例#8
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)))
示例#9
0
    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.'})
示例#10
0
    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))
示例#11
0
 def setUp(self):
     self.layer = LayerFactory.create(add_features=5)
示例#12
0
 def setUp(self):
     self.crud_view = factories.CrudViewFactory()
     self.layer = LayerFactory.create()
示例#13
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.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))))
示例#14
0
    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'
        })
示例#15
0
    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']
        })