--- /dev/null
+@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 |
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 |
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 |
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 |
-
- Scenario: Details with keywords
- When sending details query for W43327921
- | keywords |
- | 1 |
- Then the result is valid json
+ | object |
+ | 1 |
+ | R1 |
+ | N300209696:highway |
- # ticket #1343
- Scenario: Details of a country with keywords
- When sending details query for R1155955
- | keywords |
- | 1 |
- Then the result is valid json
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__)
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)
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):
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):