mirror of
https://github.com/osm-search/Nominatim.git
synced 2024-12-26 06:22:13 +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
|
Then the result is valid json
|
||||||
And result has attributes geometry
|
And result has attributes geometry
|
||||||
And result has not attributes keywords,address,linked_places,parentof
|
And result has not attributes keywords,address,linked_places,parentof
|
||||||
|
And results contain
|
||||||
|
| geometry+type |
|
||||||
|
| Point |
|
||||||
|
|
||||||
Scenario: JSON Details with pretty printing
|
Scenario: JSON Details with pretty printing
|
||||||
When sending json details query for W297699560
|
When sending json details query for W297699560
|
||||||
@ -64,6 +67,7 @@ Feature: Object details
|
|||||||
| keywords |
|
| keywords |
|
||||||
| 1 |
|
| 1 |
|
||||||
Then the result is valid json
|
Then the result is valid json
|
||||||
|
And result has attributes keywords
|
||||||
|
|
||||||
Scenario Outline: JSON details with full geometry
|
Scenario Outline: JSON details with full geometry
|
||||||
When sending json details query for <osmid>
|
When sending json details query for <osmid>
|
||||||
@ -71,12 +75,15 @@ Feature: Object details
|
|||||||
| 1 |
|
| 1 |
|
||||||
Then the result is valid json
|
Then the result is valid json
|
||||||
And result has attributes geometry
|
And result has attributes geometry
|
||||||
|
And results contain
|
||||||
|
| geometry+type |
|
||||||
|
| <geometry> |
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
| osmid |
|
| osmid | geometry |
|
||||||
| W297699560 |
|
| W297699560 | LineString |
|
||||||
| W243055645 |
|
| W243055645 | Polygon |
|
||||||
| W243055716 |
|
| W243055716 | Polygon |
|
||||||
| W43327921 |
|
| W43327921 | LineString |
|
||||||
|
|
||||||
|
|
||||||
|
@ -9,6 +9,7 @@ Feature: Object details
|
|||||||
| place_id |
|
| place_id |
|
||||||
| 107077 |
|
| 107077 |
|
||||||
|
|
||||||
|
|
||||||
Scenario Outline: Details via OSM id
|
Scenario Outline: Details via OSM id
|
||||||
When sending details query for <type><id>
|
When sending details query for <type><id>
|
||||||
Then the result is valid json
|
Then the result is valid json
|
||||||
@ -22,12 +23,6 @@ Feature: Object details
|
|||||||
| W | 43327921 |
|
| W | 43327921 |
|
||||||
| R | 123924 |
|
| 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
|
Scenario Outline: Details for different class types for the same OSM id
|
||||||
When sending details query for N300209696:<class>
|
When sending details query for N300209696:<class>
|
||||||
@ -42,6 +37,7 @@ Feature: Object details
|
|||||||
| natural |
|
| natural |
|
||||||
| mountain_pass |
|
| mountain_pass |
|
||||||
|
|
||||||
|
|
||||||
Scenario Outline: Details via unknown OSM id
|
Scenario Outline: Details via unknown OSM id
|
||||||
When sending details query for <object>
|
When sending details query for <object>
|
||||||
Then a HTTP 404 is returned
|
Then a HTTP 404 is returned
|
||||||
@ -53,3 +49,57 @@ Feature: Object details
|
|||||||
| N300209696:highway |
|
| 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 tag == 'fail-legacy':
|
||||||
if context.config.userdata['TOKENIZER'] == 'legacy':
|
if context.config.userdata['TOKENIZER'] == 'legacy':
|
||||||
context.scenario.skip("Not implemented in legacy tokenizer")
|
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)
|
# 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.
|
# For a full list of authors see the git log.
|
||||||
"""
|
"""
|
||||||
Classes wrapping HTTP responses from the Nominatim API.
|
Classes wrapping HTTP responses from the Nominatim API.
|
||||||
@ -109,6 +109,26 @@ class GenericResponse:
|
|||||||
assert str(self.result[idx][field]) == str(value), \
|
assert str(self.result[idx][field]) == str(value), \
|
||||||
BadRowValueAssert(self, idx, field, 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):
|
def assert_address_field(self, idx, field, value):
|
||||||
""" Check that result rows`idx` has a field `field` with value `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.
|
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")
|
raise RuntimeError("Context needed when using grid coordinates")
|
||||||
self.assert_field(i, 'lat', float(lat))
|
self.assert_field(i, 'lat', float(lat))
|
||||||
self.assert_field(i, 'lon', float(lon))
|
self.assert_field(i, 'lon', float(lon))
|
||||||
|
elif '+' in name:
|
||||||
|
self.assert_subfield(i, name.split('+'), value)
|
||||||
else:
|
else:
|
||||||
self.assert_field(i, name, value)
|
self.assert_field(i, name, value)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user