X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/b328bcf5186ddfe9f1c2f8acf9eee6859d1410da..0419aada6e1045b8702bdf6ef4496c8c36d07695:/tests/steps/api_result.py diff --git a/tests/steps/api_result.py b/tests/steps/api_result.py index 17d5e4eb..2644d4a2 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,23 @@ 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 == "geokml": + world.results[0]['geokml'] = node elif node.nodeName == "#text": pass else: @@ -86,12 +121,14 @@ def api_result_is_valid(step, fmt): if world.response_format == 'html': document, errors = tidy_document(world.page, options={'char-encoding' : 'utf8'}) - assert(len(errors) == 0), "Errors found in HTML document:\n%s" % errors + # assert(len(errors) == 0), "Errors found in HTML document:\n%s" % errors world.results = document elif world.response_format == 'xml': _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) @@ -174,6 +211,15 @@ def api_result_contains(step): m = re.match("%s$" % (v,), curres[k]) assert_is_not_none(m, msg="field %s does not match: %s$ != %s." % (k, v, curres[k])) +@step(u'results contain valid boundingboxes$') +def api_result_address_contains(step): + step.given('the result is valid') + for curres in world.results: + bb = curres['boundingbox'] + if world.response_format == 'json': + bb = ','.join(bb) + m = re.match('^(-?\d+\.\d+),(-?\d+\.\d+),(-?\d+\.\d+),(-?\d+\.\d+)$', bb) + assert_is_not_none(m, msg="invalid boundingbox: %s." % (curres['boundingbox'])) @step(u'result addresses contain$') def api_result_address_contains(step):