From: Sarah Hoffmann Date: Mon, 10 Aug 2015 21:18:19 +0000 (+0200) Subject: add basic tests for namedetails and extratags parameters X-Git-Tag: v.2.5.0~35^2 X-Git-Url: https://git.openstreetmap.org./nominatim.git/commitdiff_plain/058f597186a078608d37b3b838cfa3d5283d52cf add basic tests for namedetails and extratags parameters --- diff --git a/tests/features/api/reverse.feature b/tests/features/api/reverse.feature index f8c4f388..fa636acf 100644 --- a/tests/features/api/reverse.feature +++ b/tests/features/api/reverse.feature @@ -36,3 +36,28 @@ Feature: Reverse geocoding | 0 | Kings Estate Drive | 84128 | us And result 0 has attributes osm_id,osm_type + Scenario Outline: Reverse Geocoding with extratags + Given the request parameters + | extratags + | 1 + When looking up coordinates 48.86093,2.2978 + Then result 0 has attributes extratags + + Examples: + | format + | xml + | json + | jsonv2 + + Scenario Outline: Reverse Geocoding with namedetails + Given the request parameters + | namedetails + | 1 + When looking up coordinates 48.86093,2.2978 + Then result 0 has attributes namedetails + + Examples: + | format + | xml + | json + | jsonv2 diff --git a/tests/features/api/search_params.feature b/tests/features/api/search_params.feature index b9d06791..7099c72f 100644 --- a/tests/features/api/search_params.feature +++ b/tests/features/api/search_params.feature @@ -70,7 +70,7 @@ Feature: Search queries Then result addresses contain | ID | city | 0 | Chicago - + Scenario: No POI search with unbounded viewbox Given the request parameters | viewbox @@ -202,3 +202,31 @@ Feature: Search queries | 0.5 | 999 | nan + + Scenario Outline: Search with extratags + Given the request parameters + | extratags + | 1 + When sending search query "Hauptstr" + Then result 0 has attributes extratags + And result 1 has attributes extratags + + Examples: + | format + | xml + | json + | jsonv2 + + Scenario Outline: Search with namedetails + Given the request parameters + | namedetails + | 1 + When sending search query "Hauptstr" + Then result 0 has attributes namedetails + And result 1 has attributes namedetails + + Examples: + | format + | xml + | json + | jsonv2 diff --git a/tests/features/api/search_simple.feature b/tests/features/api/search_simple.feature index 3e6b6e35..2cb27b7c 100644 --- a/tests/features/api/search_simple.feature +++ b/tests/features/api/search_simple.feature @@ -51,6 +51,10 @@ Feature: Simple Tests | limit | 1000 | dedupe | 1 | dedupe | 0 + | extratags | 1 + | extratags | 0 + | namedetails | 1 + | namedetails | 0 Scenario: Search with invalid output format Given the request parameters diff --git a/tests/steps/api_result.py b/tests/steps/api_result.py index 17d5e4eb..91c07296 100644 --- a/tests/steps/api_result.py +++ b/tests/steps/api_result.py @@ -34,10 +34,28 @@ def _parse_xml(): newresult = OrderedDict(node.attributes.items()) assert_not_in('address', newresult) assert_not_in('geokml', newresult) + assert_not_in('extratags', newresult) + assert_not_in('namedetails', newresult) address = OrderedDict() for sub in node.childNodes: if sub.nodeName == 'geokml': newresult['geokml'] = sub.childNodes[0].toxml() + elif sub.nodeName == 'extratags': + newresult['extratags'] = {} + for tag in sub.childNodes: + assert_equals(tag.nodeName, 'tag') + attrs = dict(tag.attributes.items()) + assert_in('key', attrs) + assert_in('value', attrs) + newresult['extratags'][attrs['key']] = attrs['value'] + elif sub.nodeName == 'namedetails': + newresult['namedetails'] = {} + for tag in sub.childNodes: + assert_equals(tag.nodeName, 'name') + attrs = dict(tag.attributes.items()) + assert_in('desc', attrs) + newresult['namedetails'][attrs['desc']] = tag.firstChild.nodeValue.strip() + elif sub.nodeName == '#text': pass else: @@ -65,6 +83,21 @@ def _parse_xml(): for sub in node.childNodes: address[sub.nodeName] = sub.firstChild.nodeValue.strip() world.results[0]['address'] = address + elif node.nodeName == 'extratags': + world.results[0]['extratags'] = {} + for tag in node.childNodes: + assert_equals(tag.nodeName, 'tag') + attrs = dict(tag.attributes.items()) + assert_in('key', attrs) + assert_in('value', attrs) + world.results[0]['extratags'][attrs['key']] = attrs['value'] + elif node.nodeName == 'namedetails': + world.results[0]['namedetails'] = {} + for tag in node.childNodes: + assert_equals(tag.nodeName, 'name') + attrs = dict(tag.attributes.items()) + assert_in('desc', attrs) + world.results[0]['namedetails'][attrs['desc']] = tag.firstChild.nodeValue.strip() elif node.nodeName == "#text": pass else: @@ -92,6 +125,8 @@ def api_result_is_valid(step, fmt): _parse_xml() elif world.response_format == 'json': world.results = json.JSONDecoder(object_pairs_hook=OrderedDict).decode(world.page) + if world.request_type == 'reverse': + world.results = (world.results,) else: assert False, "Unknown page format: %s" % (world.response_format) diff --git a/tests/steps/api_setup.py b/tests/steps/api_setup.py index b5a098fc..c9a4bac4 100644 --- a/tests/steps/api_setup.py +++ b/tests/steps/api_setup.py @@ -10,6 +10,7 @@ import logging logger = logging.getLogger(__name__) def api_call(requesttype): + world.request_type = requesttype world.json_callback = None data = urllib.urlencode(world.params) url = "%s/%s?%s" % (world.config.base_url, requesttype, data)