mirror of
https://github.com/osm-search/Nominatim.git
synced 2024-12-25 05:52:32 +03:00
expand details BDD tests
There are now minor differences in the output between PHP and Python versions, so introduce specific tests.
This commit is contained in:
parent
3ac70f7cc2
commit
b742200442
@ -7,6 +7,9 @@ Feature: Object details
|
||||
Then the result is valid json
|
||||
And result has attributes geometry
|
||||
And result has not attributes keywords,address,linked_places,parentof
|
||||
And results contain
|
||||
| geometry+type |
|
||||
| Point |
|
||||
|
||||
Scenario: JSON Details with pretty printing
|
||||
When sending json details query for W297699560
|
||||
@ -64,6 +67,7 @@ Feature: Object details
|
||||
| keywords |
|
||||
| 1 |
|
||||
Then the result is valid json
|
||||
And result has attributes keywords
|
||||
|
||||
Scenario Outline: JSON details with full geometry
|
||||
When sending json details query for <osmid>
|
||||
@ -71,12 +75,15 @@ Feature: Object details
|
||||
| 1 |
|
||||
Then the result is valid json
|
||||
And result has attributes geometry
|
||||
And results contain
|
||||
| geometry+type |
|
||||
| <geometry> |
|
||||
|
||||
Examples:
|
||||
| osmid |
|
||||
| W297699560 |
|
||||
| W243055645 |
|
||||
| W243055716 |
|
||||
| W43327921 |
|
||||
| osmid | geometry |
|
||||
| W297699560 | LineString |
|
||||
| W243055645 | Polygon |
|
||||
| W243055716 | Polygon |
|
||||
| W43327921 | LineString |
|
||||
|
||||
|
||||
|
@ -9,6 +9,7 @@ Feature: Object details
|
||||
| place_id |
|
||||
| 107077 |
|
||||
|
||||
|
||||
Scenario Outline: Details via OSM id
|
||||
When sending details query for <type><id>
|
||||
Then the result is valid json
|
||||
@ -22,12 +23,6 @@ Feature: Object details
|
||||
| W | 43327921 |
|
||||
| R | 123924 |
|
||||
|
||||
Scenario: Details for interpolation way just return the dependent street
|
||||
When sending details query for W1
|
||||
Then the result is valid json
|
||||
And results contain
|
||||
| category |
|
||||
| highway |
|
||||
|
||||
Scenario Outline: Details for different class types for the same OSM id
|
||||
When sending details query for N300209696:<class>
|
||||
@ -42,6 +37,7 @@ Feature: Object details
|
||||
| natural |
|
||||
| mountain_pass |
|
||||
|
||||
|
||||
Scenario Outline: Details via unknown OSM id
|
||||
When sending details query for <object>
|
||||
Then a HTTP 404 is returned
|
||||
@ -53,3 +49,57 @@ Feature: Object details
|
||||
| N300209696:highway |
|
||||
|
||||
|
||||
@v1-api-php-only
|
||||
Scenario: Details for interpolation way just return the dependent street
|
||||
When sending details query for W1
|
||||
Then the result is valid json
|
||||
And results contain
|
||||
| category |
|
||||
| highway |
|
||||
|
||||
|
||||
@v1-api-python-only
|
||||
Scenario: Details for interpolation way return the interpolation
|
||||
When sending details query for W1
|
||||
Then the result is valid json
|
||||
And results contain
|
||||
| category | type | osm_type | osm_id | admin_level |
|
||||
| place | houses | W | 1 | 15 |
|
||||
|
||||
|
||||
@v1-api-php-only
|
||||
Scenario: Details for Tiger way just return the dependent street
|
||||
When sending details query for 112871
|
||||
Then the result is valid json
|
||||
And results contain
|
||||
| category |
|
||||
| highway |
|
||||
|
||||
|
||||
@v1-api-python-only
|
||||
Scenario: Details for interpolation way return the interpolation
|
||||
When sending details query for 112871
|
||||
Then the result is valid json
|
||||
And results contain
|
||||
| category | type | admin_level |
|
||||
| place | houses | 15 |
|
||||
And result has not attributes osm_type,osm_id
|
||||
|
||||
|
||||
@v1-api-php-only
|
||||
Scenario: Details for postcodes just return the dependent place
|
||||
When sending details query for 112820
|
||||
Then the result is valid json
|
||||
And results contain
|
||||
| category |
|
||||
| boundary |
|
||||
|
||||
|
||||
@v1-api-python-only
|
||||
Scenario: Details for interpolation way return the interpolation
|
||||
When sending details query for 112820
|
||||
Then the result is valid json
|
||||
And results contain
|
||||
| category | type | admin_level |
|
||||
| place | postcode | 15 |
|
||||
And result has not attributes osm_type,osm_id
|
||||
|
@ -62,3 +62,9 @@ def before_tag(context, tag):
|
||||
if tag == 'fail-legacy':
|
||||
if context.config.userdata['TOKENIZER'] == 'legacy':
|
||||
context.scenario.skip("Not implemented in legacy tokenizer")
|
||||
if tag == 'v1-api-php-only':
|
||||
if context.config.userdata['API_ENGINE'] != 'php':
|
||||
context.scenario.skip("Only valid with PHP version of v1 API.")
|
||||
if tag == 'v1-api-python-only':
|
||||
if context.config.userdata['API_ENGINE'] == 'php':
|
||||
context.scenario.skip("Only valid with Python version of v1 API.")
|
||||
|
@ -2,7 +2,7 @@
|
||||
#
|
||||
# This file is part of Nominatim. (https://nominatim.org)
|
||||
#
|
||||
# Copyright (C) 2022 by the Nominatim developer community.
|
||||
# Copyright (C) 2023 by the Nominatim developer community.
|
||||
# For a full list of authors see the git log.
|
||||
"""
|
||||
Classes wrapping HTTP responses from the Nominatim API.
|
||||
@ -109,6 +109,26 @@ class GenericResponse:
|
||||
assert str(self.result[idx][field]) == str(value), \
|
||||
BadRowValueAssert(self, idx, field, value)
|
||||
|
||||
|
||||
def assert_subfield(self, idx, path, value):
|
||||
assert path
|
||||
|
||||
field = self.result[idx]
|
||||
for p in path:
|
||||
assert isinstance(field, OrderedDict)
|
||||
assert p in field
|
||||
field = field[p]
|
||||
|
||||
if isinstance(value, float):
|
||||
assert Almost(value) == float(field)
|
||||
elif value.startswith("^"):
|
||||
assert re.fullmatch(value, field)
|
||||
elif isinstance(field, OrderedDict):
|
||||
assert field, eval('{' + value + '}')
|
||||
else:
|
||||
assert str(field) == str(value)
|
||||
|
||||
|
||||
def assert_address_field(self, idx, field, value):
|
||||
""" Check that result rows`idx` has a field `field` with value `value`
|
||||
in its address. If idx is None, then all results are checked.
|
||||
@ -163,6 +183,8 @@ class GenericResponse:
|
||||
raise RuntimeError("Context needed when using grid coordinates")
|
||||
self.assert_field(i, 'lat', float(lat))
|
||||
self.assert_field(i, 'lon', float(lon))
|
||||
elif '+' in name:
|
||||
self.assert_subfield(i, name.split('+'), value)
|
||||
else:
|
||||
self.assert_field(i, name, value)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user