opengis: fix features endpoint with bad json response (#78901)
gitea/passerelle/pipeline/head Build queued...
Details
gitea/passerelle/pipeline/head Build queued...
Details
This commit is contained in:
parent
002af7c243
commit
468e5309a9
|
@ -215,12 +215,16 @@ class OpenGIS(BaseResource):
|
|||
response = self.requests.get(self.wfs_service_url, params=params)
|
||||
data = []
|
||||
try:
|
||||
response = response.json()
|
||||
json_response = response.json()
|
||||
except ValueError:
|
||||
self.handle_opengis_error(response)
|
||||
# if handle_opengis_error did not raise an error, we raise a generic one
|
||||
raise APIError('OpenGIS Error: unparsable error', data={'content': repr(response.content[:1024])})
|
||||
for feature in response['features']:
|
||||
if not isinstance(json_response, dict) or 'features' not in json_response:
|
||||
raise APIError(
|
||||
'OpenGIS Error: bad result format', data={'content': repr(response.content[:1024])}
|
||||
)
|
||||
for feature in json_response['features']:
|
||||
feature['text'] = feature['properties'].get(property_name)
|
||||
data.append(feature)
|
||||
return {'data': data}
|
||||
|
|
|
@ -585,6 +585,34 @@ def test_get_feature_error2(mocked_get, app, connector):
|
|||
assert '<ows:' in result['data']['content']
|
||||
|
||||
|
||||
@mock.patch('passerelle.utils.Request.get')
|
||||
def test_get_feature_bad_result(mocked_get, app, connector):
|
||||
def keyerror(url, **kwargs):
|
||||
if kwargs['params'].get('request') == 'GetCapabilities':
|
||||
assert kwargs['params'].get('service')
|
||||
return tests.utils.FakedResponse(status_code=200, content=FAKE_SERVICE_CAPABILITIES)
|
||||
return tests.utils.FakedResponse(status_code=200, content=json.dumps({}))
|
||||
|
||||
endpoint = tests.utils.generic_endpoint_url('opengis', 'features', slug=connector.slug)
|
||||
mocked_get.side_effect = keyerror
|
||||
resp = app.get(endpoint, params={'type_names': 'ref_metro_limites_communales', 'property_name': 'nom'})
|
||||
assert resp.json['err'] == 1
|
||||
assert resp.json['err_desc'] == 'OpenGIS Error: bad result format'
|
||||
assert resp.json['data'] == {'content': "'{}'"}
|
||||
|
||||
def typeerror(url, **kwargs):
|
||||
if kwargs['params'].get('request') == 'GetCapabilities':
|
||||
assert kwargs['params'].get('service')
|
||||
return tests.utils.FakedResponse(status_code=200, content=FAKE_SERVICE_CAPABILITIES)
|
||||
return tests.utils.FakedResponse(status_code=200, content=json.dumps([]))
|
||||
|
||||
mocked_get.side_effect = typeerror
|
||||
resp = app.get(endpoint, params={'type_names': 'ref_metro_limites_communales', 'property_name': 'nom'})
|
||||
assert resp.json['err'] == 1
|
||||
assert resp.json['err_desc'] == 'OpenGIS Error: bad result format'
|
||||
assert resp.json['data'] == {'content': "'[]'"}
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"server_responses, version, typename_label",
|
||||
[(geoserver_responses_v1_0_0, '1.0.0', 'typename'), (geoserver_responses, '2.0.0', 'typenames')],
|
||||
|
|
Loading…
Reference in New Issue