Beispiel #1
0
    def test_count_none_area(self):
        from c2cgeoportal_geoportal.views.layers import Layers

        layer_id = self._create_layer(none_area=True)
        request = self._get_request(layer_id)

        layers = Layers(request)
        response = layers.count()
        self.assertEqual(response, 2)
Beispiel #2
0
    def test_metadata_exclude_properties(self):
        from c2cgeoportal_geoportal.views.layers import Layers

        layer_id = self._create_layer(exclude_properties=True)
        request = self._get_request(layer_id, username="******")

        layers = Layers(request)
        cls = layers.metadata()
        self.assertFalse(hasattr(cls, "name"))
    def test_delete_none_area(self):
        from c2cgeoportal_geoportal.views.layers import Layers

        layer_id = self._create_layer(none_area=True)
        request = self._get_request(layer_id, username="******")
        request.matchdict["feature_id"] = 1
        request.method = "DELETE"
        layers = Layers(request)
        response = layers.delete()
        self.assertEqual(response.status_int, 204)
Beispiel #4
0
    def test_read_public_none_area(self):
        from geojson.feature import FeatureCollection
        from c2cgeoportal_geoportal.views.layers import Layers

        layer_id = self._create_layer(public=True, none_area=True)
        request = self._get_request(layer_id)

        layers = Layers(request)
        collection = layers.read_many()
        self.assertTrue(isinstance(collection, FeatureCollection))
        self.assertEqual([f.properties["child"] for f in collection.features], ["c1é", "c2é"])
Beispiel #5
0
    def test_read_many(self):
        from geojson.feature import FeatureCollection
        from c2cgeoportal_geoportal.views.layers import Layers

        layer_id = self._create_layer()
        request = self._get_request(layer_id, username="******")

        layers = Layers(request)
        collection = layers.read_many()
        self.assertTrue(isinstance(collection, FeatureCollection))
        self.assertEqual([f.properties["child"] for f in collection.features], ["c1é"])
    def test_metadata(self):
        from c2cgeoportal_geoportal.views.layers import Layers

        layer_id = self._create_layer()
        request = self._get_request(layer_id, username="******")

        layers = Layers(request)
        cls = layers.metadata()
        self.assertEqual(cls.__table__.name, "table_{0:d}".format(layer_id))
        self.assertTrue(hasattr(cls, "name"))
        self.assertTrue("child" in cls.__dict__)
Beispiel #7
0
    def test_read_one_public_notfound(self):
        from pyramid.httpexceptions import HTTPNotFound
        from c2cgeoportal_geoportal.views.layers import Layers

        layer_id = self._create_layer(public=True)
        request = self._get_request(layer_id)
        request.matchdict["feature_id"] = 10000

        layers = Layers(request)
        feature = layers.read_one()
        self.assertTrue(isinstance(feature, HTTPNotFound))
Beispiel #8
0
    def test_create_none_area(self):
        from geojson.feature import FeatureCollection
        from c2cgeoportal_geoportal.views.layers import Layers

        layer_id = self._create_layer(none_area=True)
        request = self._get_request(layer_id, username="******")
        request.method = "POST"
        request.body = '{"type": "FeatureCollection", "features": [{"type": "Feature", "properties": {"name": "foo", "child": "c1é"}, "geometry": {"type": "Point", "coordinates": [5, 45]}}, {"type": "Feature", "properties": {"text": "foo", "child": "c2é"}, "geometry": {"type": "Point", "coordinates": [5, 45]}}]}'  # noqa
        layers = Layers(request)
        collection = layers.create()
        self.assertTrue(isinstance(collection, FeatureCollection))
        self.assertEqual(len(collection.features), 2)
Beispiel #9
0
    def test_read_many_none_area(self):
        from geojson.feature import FeatureCollection
        from c2cgeoportal_geoportal.views.layers import Layers

        layer_id = self._create_layer(none_area=True)
        request = self._get_request(layer_id, username="******")

        layers = Layers(request)
        collection = layers.read_many()
        self.assertTrue(isinstance(collection, FeatureCollection))
        self.assertEqual(len(collection.features), 2)
        self.assertEqual(collection.features[0].properties["child"], "c1é")
        self.assertEqual(collection.features[1].properties["child"], "c2é")
Beispiel #10
0
    def test_create_validation_fails(self):
        from c2cgeoportal_geoportal.views.layers import Layers

        layer_id = self._create_layer()
        request = self._get_request(layer_id, username="******")
        request.method = "POST"
        request.body = '{"type": "FeatureCollection", "features": [{"type": "Feature", "properties": {"name": "foo", "child": "c1é"}, "geometry": {"type": "Point", "coordinates": [5, 45]}}, {"type": "Feature", "properties": {"text": "foo", "child": "c2é"}, "geometry": {"type": "LineString", "coordinates": [[5, 45], [5, 45]]}}]}'  # noqa
        layers = Layers(request)
        response = layers.create()
        self.assertEqual(request.response.status_int, 400)
        self.assertTrue("validation_error" in response)
        self.assertEqual(response["validation_error"],
                         "Too few points in geometry component[5 45]")
Beispiel #11
0
    def test_metadata_columns_order(self):
        from c2cgeoportal_geoportal.views.layers import Layers
        from c2cgeoportal_commons.models.main import Metadata

        attributes_order = "name,email,child_id"

        layer_id = self._create_layer(metadatas=[Metadata("editingAttributesOrder", attributes_order)])
        request = self._get_request(layer_id, username="******")

        layers = Layers(request)
        cls = layers.metadata()

        self.assertEqual(attributes_order.split(","), cls.__attributes_order__)
Beispiel #12
0
    def test_create_with_constraint_fail_integrity(self):
        from c2cgeoportal_geoportal.views.layers import Layers

        layer_id = self._create_layer()
        request = self._get_request(layer_id, username="******")
        request.method = "POST"
        request.body = '{"type": "FeatureCollection", "features": [{"type": "Feature", "properties": {"email": "novalidemail", "name": "foo", "child": "c1é"}, "geometry": {"type": "Point", "coordinates": [5, 45]}}, {"type": "Feature", "properties": {"text": "foo", "child": "c2é"}, "geometry": {"type": "Point", "coordinates": [5, 45]}}]}'  # noqa
        layers = Layers(request)
        response = layers.create()
        self.assertEqual(request.response.status_int, 400)
        self.assertTrue("error_type" in response)
        self.assertTrue("message" in response)
        self.assertEqual(response["error_type"], "integrity_error")
Beispiel #13
0
    def test_update_none_area(self):
        from c2cgeoportal_geoportal.views.layers import Layers

        layer_id = self._create_layer(none_area=True)
        request = self._get_request(layer_id, username="******")
        request.matchdict["feature_id"] = 1
        request.method = "PUT"
        request.body = '{"type": "Feature", "id": 1, "properties": {"name": "foobar", "child": "c2é"}, "geometry": {"type": "Point", "coordinates": [5, 45]}}'  # noqa
        layers = Layers(request)
        feature = layers.update()
        self.assertEqual(feature.id, 1)
        self.assertEqual(feature.name, "foobar")
        self.assertEqual(feature.child, "c2é")
Beispiel #14
0
    def test_update_validation_fails_simple(self):
        from c2cgeoportal_geoportal.views.layers import Layers

        layer_id = self._create_layer()
        request = self._get_request(layer_id, username="******")
        request.matchdict["feature_id"] = 1
        request.method = "PUT"
        request.body = '{"type": "Feature", "id": 1, "properties": {"name": "foobar", "child": "c2é"}, "geometry": {"type": "LineString", "coordinates": [[5, 45], [6, 45], [5, 45]]}}'  # noqa
        layers = Layers(request)
        response = layers.update()
        self.assertEqual(request.response.status_int, 400)
        self.assertTrue("validation_error" in response)
        self.assertEqual(response["validation_error"], "Not simple")
Beispiel #15
0
    def test_update_validation_fails_constraint(self):
        from c2cgeoportal_geoportal.views.layers import Layers

        layer_id = self._create_layer()
        request = self._get_request(layer_id, username="******")
        request.matchdict["feature_id"] = 1
        request.method = "PUT"
        request.body = '{"type": "Feature", "id": 1, "properties": {"email": "novalidemail"}, "geometry": {"type": "Point", "coordinates": [5, 45]}}'  # noqa
        layers = Layers(request)
        response = layers.update()
        self.assertEqual(request.response.status_int, 400)
        self.assertTrue("error_type" in response)
        self.assertTrue("message" in response)
        self.assertEqual(response["error_type"], "integrity_error")
Beispiel #16
0
    def test_read_one_none_area(self):
        from geojson.feature import Feature
        from c2cgeoportal_geoportal.views.layers import Layers

        layer_id = self._create_layer(none_area=True)
        request = self._get_request(layer_id, username="******")
        request.matchdict["feature_id"] = 1

        layers = Layers(request)
        feature = layers.read_one()
        self.assertTrue(isinstance(feature, Feature))
        self.assertEqual(feature.id, 1)
        self.assertEqual(feature.properties["name"], "foo")
        self.assertEqual(feature.properties["child"], "c1é")
Beispiel #17
0
    def test_update_no_validation(self):
        from c2cgeoportal_commons.models.main import Metadata
        from c2cgeoportal_geoportal.views.layers import Layers

        metadatas = [Metadata("geometryValidation", "False")]
        layer_id = self._create_layer(metadatas=metadatas, geom_type=False)
        request = self._get_request(layer_id, username="******")
        request.matchdict["feature_id"] = 1
        request.method = "PUT"
        request.body = '{"type": "Feature", "id": 1, "properties": {"name": "foobar", "child": "c2é"}, "geometry": {"type": "LineString", "coordinates": [[5, 45], [5, 45]]}}'  # noqa
        layers = Layers(request)
        feature = layers.update()
        self.assertEqual(feature.id, 1)
        self.assertEqual(feature.name, "foobar")
        self.assertEqual(feature.child, "c2é")
Beispiel #18
0
    def test_metadata_log(self):
        from c2cgeoportal_commons.models.main import Metadata
        from c2cgeoportal_geoportal.views.layers import Layers

        metadatas = [
            Metadata("lastUpdateDateColumn", "last_update_date"),
            Metadata("lastUpdateUserColumn", "last_update_user"),
        ]
        layer_id = self._create_layer(metadatas=metadatas)
        request = self._get_request(layer_id, username="******")

        layers = Layers(request)
        cls = layers.metadata()
        self.assertFalse(hasattr(cls, "last_update_date"))
        self.assertFalse(hasattr(cls, "last_update_user"))
Beispiel #19
0
    def test_create_no_validation(self):
        from geojson.feature import FeatureCollection
        from c2cgeoportal_geoportal.views.layers import Layers
        from c2cgeoportal_commons.models.main import Metadata

        metadatas = [Metadata("geometryValidation", "False")]
        layer_id = self._create_layer(metadatas=metadatas, geom_type=False)
        request = self._get_request(layer_id, username="******")
        request.method = "POST"
        request.body = '{"type": "FeatureCollection", "features": [{"type": "Feature", "properties": {"name": "foo", "child": "c1é"}, "geometry": {"type": "Point", "coordinates": [5, 45]}}, {"type": "Feature", "properties": {"text": "foo", "child": "c2é"}, "geometry": {"type": "LineString", "coordinates": [[5, 45], [5, 45]]}}]}'  # noqa
        layers = Layers(request)
        collection = layers.create()
        self.assertEqual(request.response.status_int, 201)
        self.assertTrue(isinstance(collection, FeatureCollection))
        self.assertEqual(len(collection.features), 2)
Beispiel #20
0
 def _enumerate_attributes_values(dbsessions: Dict[str, Session],
                                  layerinfos: Dict[str, Any],
                                  fieldname: str) -> List[Message]:
     dbname = layerinfos.get("dbsession", "dbsession")
     translate = cast(Dict[str, Any], layerinfos["attributes"]).get(
         fieldname, {}).get("translate", True)
     if not translate:
         return []
     try:
         dbsession = dbsessions.get(dbname)
         return Layers.query_enumerate_attribute_values(
             dbsession, layerinfos, fieldname)
     except Exception as e:
         table = cast(Dict[str, Any],
                      layerinfos["attributes"]).get(fieldname,
                                                    {}).get("table")
         print(
             colorize(
                 "ERROR! Unable to collect enumerate attributes for "
                 "db: {}, table: {}, column: {} ({})".format(
                     dbname, table, fieldname, e),
                 Color.RED,
             ))
         if os.environ.get("IGNORE_I18N_ERRORS", "FALSE") == "TRUE":
             return []
         raise
Beispiel #21
0
 def _enumerate_attributes_values(dbsessions: Dict[str, Session],
                                  layerinfos: Dict[str, Any],
                                  fieldname: str) -> Set[Tuple[str, ...]]:
     dbname = layerinfos.get("dbsession", "dbsession")
     translate = cast(Dict[str, Any], layerinfos["attributes"]).get(
         fieldname, {}).get("translate", True)
     if not translate:
         return set()
     try:
         dbsession = dbsessions.get(dbname)
         return Layers.query_enumerate_attribute_values(
             dbsession, layerinfos, fieldname)
     except Exception as e:
         table = cast(Dict[str, Any],
                      layerinfos["attributes"]).get(fieldname,
                                                    {}).get("table")
         print(
             colorize(
                 "ERROR! Unable to collect enumerate attributes for "
                 f"db: {dbname}, table: {table}, column: {fieldname} ({e!s})",
                 Color.RED,
             ))
         if _get_config_str("IGNORE_I18N_ERRORS", "FALSE") == "TRUE":
             return set()
         raise
Beispiel #22
0
    def test_metadata_editing_enumeration_config(self):
        import json

        from c2cgeoportal_commons.models.main import Metadata
        from c2cgeoportal_geoportal.views.layers import Layers

        editing_enumerations = '{"a_column": {"value": "value_column", "order_by": "order_column"}}'

        metadatas = [Metadata("editingEnumerations", editing_enumerations)]
        layer_id = self._create_layer(metadatas=metadatas)
        request = self._get_request(layer_id, username="******")

        layers = Layers(request)
        cls = layers.metadata()

        self.assertEqual(json.loads(editing_enumerations),
                         cls.__enumerations_config__)
Beispiel #23
0
    def test_read_many_multi(self):
        from geojson.feature import FeatureCollection
        from c2cgeoportal_geoportal.views.layers import Layers

        layer_id1 = self._create_layer()
        layer_id2 = self._create_layer()
        layer_id3 = self._create_layer()

        layer_ids = "{0:d},{1:d},{2:d}".format(layer_id1, layer_id2, layer_id3)
        request = self._get_request(layer_ids, username="******")

        layers = Layers(request)
        collection = layers.read_many()
        self.assertTrue(isinstance(collection, FeatureCollection))
        self.assertEqual(
            [f.properties["__layer_id__"] for f in collection.features], [layer_id1, layer_id2, layer_id3]
        )
Beispiel #24
0
    def test_enumerate_attribute_values(self):
        from c2cgeoportal_geoportal.views.layers import Layers

        layer_id = self._create_layer(public=True)
        tablename = "table_{0:d}".format(layer_id)
        settings = {
            "layers": {
                "enum": {"layer_test": {"attributes": {"label": {"table": tablename, "column_name": "name"}}}}
            }
        }

        request = self._get_request(layer_id)
        request.registry.settings.update(settings)
        request.matchdict["layer_name"] = "layer_test"
        request.matchdict["field_name"] = "label"
        layers = Layers(request)
        response = layers.enumerate_attribute_values()
        self.assertEqual(response, {"items": [{"value": "bar"}, {"value": "foo"}]})
Beispiel #25
0
    def test_read_many_layer_not_found(self):
        from pyramid.httpexceptions import HTTPNotFound
        from c2cgeoportal_geoportal.views.layers import Layers

        self._create_layer()
        request = self._get_request(10000, username="******")

        layers = Layers(request)
        self.assertRaises(HTTPNotFound, layers.read_many)
Beispiel #26
0
    def test_metadata_no_auth(self):
        from pyramid.httpexceptions import HTTPForbidden
        from c2cgeoportal_geoportal.views.layers import Layers

        layer_id = self._create_layer()
        request = self._get_request(layer_id)

        layers = Layers(request)
        self.assertRaises(HTTPForbidden, layers.metadata)
Beispiel #27
0
    def test_read_many_no_auth_none_area(self):
        from pyramid.httpexceptions import HTTPForbidden
        from c2cgeoportal_geoportal.views.layers import Layers

        layer_id = self._create_layer(none_area=True)
        request = self._get_request(layer_id)

        layers = Layers(request)
        self.assertRaises(HTTPForbidden, layers.read_many)
Beispiel #28
0
    def test_create_no_auth_none_area(self):
        from pyramid.httpexceptions import HTTPForbidden
        from c2cgeoportal_geoportal.views.layers import Layers

        layer_id = self._create_layer(none_area=True)
        request = self._get_request(layer_id)
        request.method = "POST"
        request.body = '{"type": "FeatureCollection", "features": [{"type": "Feature", "properties": {"name": "foo", "child": "c1é"}, "geometry": {"type": "Point", "coordinates": [5, 45]}}, {"type": "Feature", "properties": {"text": "foo", "child": "c2é"}, "geometry": {"type": "Point", "coordinates": [5, 45]}}]}'  # noqa
        layers = Layers(request)
        self.assertRaises(HTTPForbidden, layers.create)
Beispiel #29
0
    def test_delete_no_auth_none_area(self):
        from pyramid.httpexceptions import HTTPForbidden
        from c2cgeoportal_geoportal.views.layers import Layers

        layer_id = self._create_layer(none_area=True)
        request = self._get_request(layer_id)
        request.matchdict["feature_id"] = 2
        request.method = "DELETE"
        layers = Layers(request)
        self.assertRaises(HTTPForbidden, layers.delete)
Beispiel #30
0
    def test_delete_no_perm(self):
        from pyramid.httpexceptions import HTTPForbidden
        from c2cgeoportal_geoportal.views.layers import Layers

        layer_id = self._create_layer()
        request = self._get_request(layer_id, username="******")
        request.matchdict["feature_id"] = 2
        request.method = "DELETE"
        layers = Layers(request)
        self.assertRaises(HTTPForbidden, layers.delete)