X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/3a787df9347454396c963353e3ae89bbc3501fd1..b2be8c3ab7baca371ae2d2f65555e0a5ca09f531:/test/bdd/steps/queries.py
diff --git a/test/bdd/steps/queries.py b/test/bdd/steps/queries.py
index 175a85ae..c429f082 100644
--- a/test/bdd/steps/queries.py
+++ b/test/bdd/steps/queries.py
@@ -19,7 +19,6 @@ BASE_SERVER_ENV = {
'HTTP_HOST' : 'localhost',
'HTTP_USER_AGENT' : 'Mozilla/5.0 (X11; Linux x86_64; rv:51.0) Gecko/20100101 Firefox/51.0',
'HTTP_ACCEPT' : 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
- 'HTTP_ACCEPT_LANGUAGE' : 'en,de;q=0.5',
'HTTP_ACCEPT_ENCODING' : 'gzip, deflate',
'HTTP_CONNECTION' : 'keep-alive',
'SERVER_SIGNATURE' : '
Nominatim BDD Tests',
@@ -149,7 +148,6 @@ class SearchResponse(GenericResponse):
self.result[-1]['address'] = address
-
class ReverseResponse(GenericResponse):
def __init__(self, page, fmt='json', errorcode=200):
@@ -214,6 +212,23 @@ class ReverseResponse(GenericResponse):
"Unknown XML tag %s on page: %s" % (child.tag, self.page)
+class DetailsResponse(GenericResponse):
+
+ def __init__(self, page, fmt='json', errorcode=200):
+ self.page = page
+ self.format = fmt
+ self.errorcode = errorcode
+ self.result = []
+ self.header = dict()
+
+ if errorcode == 200:
+ getattr(self, 'parse_' + fmt)()
+
+ def parse_html(self):
+ content, errors = tidy_document(self.page,
+ options={'char-encoding' : 'utf8'})
+ self.result = {}
+
@when(u'searching for "(?P.*)"(?P with dups)?')
def query_cmd(context, query, dups):
""" Query directly via PHP script.
@@ -249,7 +264,7 @@ def send_api_query(endpoint, params, fmt, context):
for h in context.table.headings:
params[h] = context.table[0][h]
- env = BASE_SERVER_ENV
+ env = dict(BASE_SERVER_ENV)
env['QUERY_STRING'] = urlencode(params)
env['SCRIPT_NAME'] = '/%s.php' % endpoint
@@ -259,6 +274,9 @@ def send_api_query(endpoint, params, fmt, context):
'%s.php' % endpoint)
env['NOMINATIM_SETTINGS'] = context.nominatim.local_settings_file
+ if hasattr(context, 'http_headers'):
+ env.update(context.http_headers)
+
cmd = ['/usr/bin/php-cgi', env['SCRIPT_FILENAME']]
for k,v in params.items():
cmd.append("%s=%s" % (k, v))
@@ -284,10 +302,18 @@ def send_api_query(endpoint, params, fmt, context):
return outp[content_start + 4:], status
+@given(u'the HTTP header')
+def add_http_header(context):
+ if not hasattr(context, 'http_headers'):
+ context.http_headers = {}
+
+ for h in context.table.headings:
+ envvar = 'HTTP_' + h.upper().replace('-', '_')
+ context.http_headers[envvar] = context.table[0][h]
+
@when(u'sending (?P\S+ )?search query "(?P.*)"(?P with address)?')
def website_search_request(context, fmt, query, addr):
-
params = {}
if query:
params['q'] = query
@@ -324,6 +350,29 @@ def website_reverse_request(context, fmt, lat, lon):
context.response = ReverseResponse(outp, outfmt, status)
+@when(u'sending (?P\S+ )?details query for (?P.*)')
+def website_details_request(context, fmt, query):
+ params = {}
+ if query[0] in 'NWR':
+ params['osmtype'] = query[0]
+ params['osmid'] = query[1:]
+ else:
+ params['place_id'] = query
+ outp, status = send_api_query('details', params, fmt, context)
+
+ context.response = DetailsResponse(outp, 'html', status)
+
+@when(u'sending (?P\S+ )?lookup query for (?P.*)')
+def website_lookup_request(context, fmt, query):
+ params = { 'osm_ids' : query }
+ outp, status = send_api_query('lookup', params, fmt, context)
+
+ if fmt == 'json ':
+ outfmt = 'json'
+ else:
+ outfmt = 'xml'
+
+ context.response = SearchResponse(outp, outfmt, status)
@step(u'(?Pless than|more than|exactly|at least|at most) (?P\d+) results? (?:is|are) returned')