X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/eb1d8894b943eb0f07747d1dab203217860b6930..051998dd80b0def50058266b7adbdf2e971032eb:/tests/steps/api_result.py diff --git a/tests/steps/api_result.py b/tests/steps/api_result.py index 369127d8..2644d4a2 100644 --- a/tests/steps/api_result.py +++ b/tests/steps/api_result.py @@ -27,17 +27,35 @@ def _parse_xml(): world.results = [] # results - if page.nodeName == 'searchresults': + if page.nodeName == 'searchresults' or page.nodeName == 'lookupresults': for node in page.childNodes: if node.nodeName != "#text": assert_equals(node.nodeName, 'place', msg="Unexpected element '%s'" % node.nodeName) 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): @@ -199,7 +245,10 @@ def api_result_address_exact(step, resid): addr = world.results[resid]['address'] for line in step.hashes: assert_in(line['type'], addr) - assert_equals(line['value'], addr[line['type']]) + m = re.match("%s$" % line['value'], addr[line['type']]) + assert_is_not_none(m, msg="field %s does not match: %s$ != %s." % ( + line['type'], line['value'], addr[line['type']])) + #assert_equals(line['value'], addr[line['type']]) @step(u'address of result (\d+) does not contain (.*)') def api_result_address_details_missing(step, resid, types):