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)
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)
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é"])
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__)
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))
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)
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é")
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]")
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__)
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")
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é")
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")
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")
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é")
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é")
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"))
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)
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
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
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__)
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] )
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"}]})
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)
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)
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)
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)
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)
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)