forked from hans/Nominatim
bdd: clean up and extend API tests for details
- remove duplicates created by replacing HTML tests with JSON tests - add tests for newer functions for returning geometries and hierarchies
This commit is contained in:
62
test/bdd/api/details/language.feature
Normal file
62
test/bdd/api/details/language.feature
Normal file
@@ -0,0 +1,62 @@
|
||||
@APIDB
|
||||
Feature: Localization of search results
|
||||
|
||||
Scenario: default language
|
||||
When sending details query for R1155955
|
||||
Then results contain
|
||||
| ID | localname |
|
||||
| 0 | Liechtenstein |
|
||||
|
||||
Scenario: accept-language first
|
||||
When sending details query for R1155955
|
||||
| accept-language |
|
||||
| zh,de |
|
||||
Then results contain
|
||||
| ID | localname |
|
||||
| 0 | 列支敦士登 |
|
||||
|
||||
Scenario: accept-language missing
|
||||
When sending details query for R1155955
|
||||
| accept-language |
|
||||
| xx,fr,en,de |
|
||||
Then results contain
|
||||
| ID | localname |
|
||||
| 0 | Liechtenstein |
|
||||
|
||||
Scenario: http accept language header first
|
||||
Given the HTTP header
|
||||
| accept-language |
|
||||
| fo;q=0.8,en-ca;q=0.5,en;q=0.3 |
|
||||
When sending details query for R1155955
|
||||
Then results contain
|
||||
| ID | localname |
|
||||
| 0 | Liktinstein |
|
||||
|
||||
Scenario: http accept language header and accept-language
|
||||
Given the HTTP header
|
||||
| accept-language |
|
||||
| fr-ca,fr;q=0.8,en-ca;q=0.5,en;q=0.3 |
|
||||
When sending details query for R1155955
|
||||
| accept-language |
|
||||
| fo,en |
|
||||
Then results contain
|
||||
| ID | localname |
|
||||
| 0 | Liktinstein |
|
||||
|
||||
Scenario: http accept language header fallback
|
||||
Given the HTTP header
|
||||
| accept-language |
|
||||
| fo-ca,en-ca;q=0.5 |
|
||||
When sending details query for R1155955
|
||||
Then results contain
|
||||
| ID | localname |
|
||||
| 0 | Liktinstein |
|
||||
|
||||
Scenario: http accept language header fallback (upper case)
|
||||
Given the HTTP header
|
||||
| accept-language |
|
||||
| fo-FR;q=0.8,en-ca;q=0.5 |
|
||||
When sending details query for R1155955
|
||||
Then results contain
|
||||
| ID | localname |
|
||||
| 0 | Liktinstein |
|
||||
@@ -8,14 +8,15 @@ Feature: Object details
|
||||
And result has attributes geometry
|
||||
And result has not attributes keywords,address,linked_places,parentof
|
||||
|
||||
Scenario: JSON Details with keywords
|
||||
Scenario: JSON Details with pretty printing
|
||||
When sending json details query for W297699560
|
||||
| keywords |
|
||||
| 1 |
|
||||
| pretty |
|
||||
| 1 |
|
||||
Then the result is valid json
|
||||
And result has attributes keywords
|
||||
And result has attributes geometry
|
||||
And result has not attributes keywords,address,linked_places,parentof
|
||||
|
||||
Scenario: JSON Details with addressdetails
|
||||
Scenario: JSON Details with addressdetails
|
||||
When sending json details query for W297699560
|
||||
| addressdetails |
|
||||
| 1 |
|
||||
@@ -36,22 +37,46 @@ Feature: Object details
|
||||
Then the result is valid json
|
||||
And result has attributes hierarchy
|
||||
|
||||
Scenario: JSON Details with linkedplaces
|
||||
When sending json details query for R123924
|
||||
| linkedplaces |
|
||||
| 1 |
|
||||
Scenario: JSON Details with grouped hierarchy
|
||||
When sending json details query for W297699560
|
||||
| hierarchy | group_hierarchy |
|
||||
| 1 | 1 |
|
||||
Then the result is valid json
|
||||
And result has attributes hierarchy
|
||||
|
||||
Scenario Outline: HTML Details with keywords
|
||||
Scenario Outline: JSON Details with keywords
|
||||
When sending json details query for <osmid>
|
||||
| keywords |
|
||||
| 1 |
|
||||
Then the result is valid json
|
||||
And result has attributes keywords
|
||||
|
||||
Examples:
|
||||
| osmid |
|
||||
| W297699560 |
|
||||
| W243055645 |
|
||||
| W243055716 |
|
||||
| W43327921 |
|
||||
|
||||
# ticket #1343
|
||||
Scenario: Details of a country with keywords
|
||||
When sending details query for R1155955
|
||||
| keywords |
|
||||
| 1 |
|
||||
Then the result is valid json
|
||||
|
||||
Scenario Outline: JSON details with full geometry
|
||||
When sending json details query for <osmid>
|
||||
| polygon_geojson |
|
||||
| 1 |
|
||||
Then the result is valid json
|
||||
And result has attributes geometry
|
||||
|
||||
Examples:
|
||||
| osmid |
|
||||
| W297699560 |
|
||||
| W243055645 |
|
||||
| W243055716 |
|
||||
| W43327921 |
|
||||
|
||||
|
||||
|
||||
@@ -2,36 +2,54 @@
|
||||
Feature: Object details
|
||||
Check details page for correctness
|
||||
|
||||
Scenario: Details by place ID
|
||||
When sending details query for 107077
|
||||
Then the result is valid json
|
||||
And results contain
|
||||
| place_id |
|
||||
| 107077 |
|
||||
|
||||
Scenario Outline: Details via OSM id
|
||||
When sending <format> details query for <object>
|
||||
Then the result is valid <format>
|
||||
When sending details query for <type><id>
|
||||
Then the result is valid json
|
||||
And results contain
|
||||
| osm_type | osm_id |
|
||||
| <type> | <id> |
|
||||
|
||||
Examples:
|
||||
| format | object |
|
||||
| json | 107077 |
|
||||
| json | N5484325405 |
|
||||
| json | W43327921 |
|
||||
| json | R123924 |
|
||||
| type | id |
|
||||
| N | 5484325405 |
|
||||
| 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>
|
||||
Then the result is valid json
|
||||
And results contain
|
||||
| osm_type | osm_id | category |
|
||||
| N | 300209696 | <class> |
|
||||
|
||||
Examples:
|
||||
| class |
|
||||
| tourism |
|
||||
| natural |
|
||||
| mountain_pass |
|
||||
|
||||
Scenario Outline: Details via unknown OSM id
|
||||
When sending <format> details query for <object>
|
||||
When sending details query for <object>
|
||||
Then a HTTP 400 is returned
|
||||
|
||||
Examples:
|
||||
| format | object |
|
||||
| json | 1 |
|
||||
| json | R1 |
|
||||
| object |
|
||||
| 1 |
|
||||
| R1 |
|
||||
| N300209696:highway |
|
||||
|
||||
Scenario: Details with keywords
|
||||
When sending details query for W43327921
|
||||
| keywords |
|
||||
| 1 |
|
||||
Then the result is valid json
|
||||
|
||||
# ticket #1343
|
||||
Scenario: Details of a country with keywords
|
||||
When sending details query for R1155955
|
||||
| keywords |
|
||||
| 1 |
|
||||
Then the result is valid json
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@ from urllib.parse import urlencode
|
||||
from utils import run_script
|
||||
from http_responses import GenericResponse, SearchResponse, ReverseResponse, StatusResponse
|
||||
from check_functions import Bbox
|
||||
from table_compare import NominatimID
|
||||
|
||||
LOG = logging.getLogger(__name__)
|
||||
|
||||
@@ -168,8 +169,11 @@ def website_reverse_request(context, fmt, lat, lon):
|
||||
def website_details_request(context, fmt, query):
|
||||
params = {}
|
||||
if query[0] in 'NWR':
|
||||
params['osmtype'] = query[0]
|
||||
params['osmid'] = query[1:]
|
||||
nid = NominatimID(query)
|
||||
params['osmtype'] = nid.typ
|
||||
params['osmid'] = nid.oid
|
||||
if nid.cls:
|
||||
params['class'] = nid.cls
|
||||
else:
|
||||
params['place_id'] = query
|
||||
outp, status = send_api_query('details', params, fmt, context)
|
||||
@@ -232,9 +236,13 @@ def check_header_attr(context):
|
||||
def check_header_no_attr(context, neg, attrs):
|
||||
for attr in attrs.split(','):
|
||||
if neg:
|
||||
assert attr not in context.response.header
|
||||
assert attr not in context.response.header, \
|
||||
"Unexpected attribute {}. Full response:\n{}".format(
|
||||
attr, json.dumps(context.response.header, sort_keys=True, indent=2))
|
||||
else:
|
||||
assert attr in context.response.header
|
||||
assert attr in context.response.header, \
|
||||
"No attribute {}. Full response:\n{}".format(
|
||||
attr, json.dumps(context.response.header, sort_keys=True, indent=2))
|
||||
|
||||
@then(u'results contain')
|
||||
def step_impl(context):
|
||||
@@ -255,9 +263,13 @@ def validate_attributes(context, lid, neg, attrs):
|
||||
for i in idx:
|
||||
for attr in attrs.split(','):
|
||||
if neg:
|
||||
assert attr not in context.response.result[i]
|
||||
assert attr not in context.response.result[i],\
|
||||
"Unexpected attribute {}. Full response:\n{}".format(
|
||||
attr, json.dumps(context.response.result[i], sort_keys=True, indent=2))
|
||||
else:
|
||||
assert attr in context.response.result[i]
|
||||
assert attr in context.response.result[i], \
|
||||
"No attribute {}. Full response:\n{}".format(
|
||||
attr, json.dumps(context.response.result[i], sort_keys=True, indent=2))
|
||||
|
||||
@then(u'result addresses contain')
|
||||
def step_impl(context):
|
||||
|
||||
Reference in New Issue
Block a user