X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/db1aa4d02eeb4f878b3f9b4883cd21e8ba51ca0d..b730d286ad38eaa866bebbeadc476e2021a9c8e5:/test/bdd/steps/steps_api_queries.py diff --git a/test/bdd/steps/steps_api_queries.py b/test/bdd/steps/steps_api_queries.py index 9f865ab7..1c6fac69 100644 --- a/test/bdd/steps/steps_api_queries.py +++ b/test/bdd/steps/steps_api_queries.py @@ -15,6 +15,7 @@ import os import re import logging import asyncio +import xml.etree.ElementTree as ET from urllib.parse import urlencode from utils import run_script @@ -73,8 +74,12 @@ def compare(operator, op1, op2): def send_api_query(endpoint, params, fmt, context): - if fmt is not None and fmt.strip() != 'debug': - params['format'] = fmt.strip() + if fmt is not None: + if fmt.strip() == 'debug': + params['debug'] = '1' + else: + params['format'] = fmt.strip() + if context.table: if context.table.headings[0] == 'param': for line in context.table: @@ -154,41 +159,37 @@ def website_search_request(context, fmt, query, addr): params['q'] = query if addr is not None: params['addressdetails'] = '1' - if fmt and fmt.strip() == 'debug': - params['debug'] = '1' outp, status = send_api_query('search', params, fmt, context) context.response = SearchResponse(outp, fmt or 'json', status) -@when(u'sending (?P\S+ )?reverse coordinates (?P.+)?,(?P.+)?') -def website_reverse_request(context, fmt, lat, lon): + +@when('sending v1/reverse at (?P[\d.-]*),(?P[\d.-]*)(?: with format (?P.+))?') +def api_endpoint_v1_reverse(context, lat, lon, fmt): params = {} if lat is not None: params['lat'] = lat if lon is not None: params['lon'] = lon - if fmt and fmt.strip() == 'debug': - params['debug'] = '1' + if fmt is None: + fmt = 'jsonv2' + elif fmt == "''": + fmt = None outp, status = send_api_query('reverse', params, fmt, context) - context.response = ReverseResponse(outp, fmt or 'xml', status) -@when(u'sending (?P\S+ )?reverse point (?P.+)') -def website_reverse_request(context, fmt, nodeid): + +@when('sending v1/reverse N(?P\d+)(?: with format (?P.+))?') +def api_endpoint_v1_reverse_from_node(context, nodeid, fmt): params = {} - if fmt and fmt.strip() == 'debug': - params['debug'] = '1' params['lon'], params['lat'] = (f'{c:f}' for c in context.osm.grid_node(int(nodeid))) - outp, status = send_api_query('reverse', params, fmt, context) - context.response = ReverseResponse(outp, fmt or 'xml', status) - @when(u'sending (?P\S+ )?details query for (?P.*)') def website_details_request(context, fmt, query): params = {} @@ -220,7 +221,7 @@ def website_status_request(context, fmt): @step(u'(?Pless than|more than|exactly|at least|at most) (?P\d+) results? (?:is|are) returned') def validate_result_number(context, operator, number): - assert context.response.errorcode == 200 + context.execute_steps("Then a HTTP 200 is returned") numres = len(context.response.result) assert compare(operator, numres, int(number)), \ f"Bad number of results: expected {operator} {number}, got {numres}." @@ -237,7 +238,19 @@ def check_page_content_equals(context, text): @then(u'the result is valid (?P\w+)') def step_impl(context, fmt): context.execute_steps("Then a HTTP 200 is returned") - assert context.response.format == fmt + if fmt.strip() == 'html': + try: + tree = ET.fromstring(context.response.page) + except Exception as ex: + assert False, f"Could not parse page:\n{context.response.page}" + + assert tree.tag == 'html' + body = tree.find('./body') + assert body is not None + assert body.find('.//script') is None + else: + assert context.response.format == fmt + @then(u'a (?P\w+) user error is returned') def check_page_error(context, fmt):