mirror of
https://github.com/osm-search/Nominatim.git
synced 2024-11-27 00:49:55 +03:00
add api tests for language, details and lookup
This commit is contained in:
parent
3a787df934
commit
b2c1d086b5
14
test/bdd/api/details/simple.feature
Normal file
14
test/bdd/api/details/simple.feature
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
@APIDB
|
||||||
|
Feature: Object details
|
||||||
|
Check details page for correctness
|
||||||
|
|
||||||
|
Scenario Outline: Details via OSM id
|
||||||
|
When sending details query for <object>
|
||||||
|
Then the result is valid html
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
| object |
|
||||||
|
| 492887 |
|
||||||
|
| N4267356889 |
|
||||||
|
| W230804120 |
|
||||||
|
| R123924 |
|
17
test/bdd/api/lookup/simple.feature
Normal file
17
test/bdd/api/lookup/simple.feature
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
@APIDB
|
||||||
|
Feature: Places by osm_type and osm_id Tests
|
||||||
|
Simple tests for internal server errors and response format.
|
||||||
|
|
||||||
|
Scenario Outline: address lookup for existing node, way, relation
|
||||||
|
When sending <format> lookup query for N3284625766,W6065798,,R123924,X99,N0
|
||||||
|
Then the result is valid <format>
|
||||||
|
And exactly 3 results are returned
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
| format |
|
||||||
|
| xml |
|
||||||
|
| json |
|
||||||
|
|
||||||
|
Scenario: address lookup for non-existing or invalid node, way, relation
|
||||||
|
When sending xml lookup query for X99,,N0,nN158845944,ABC,,W9
|
||||||
|
Then exactly 0 results are returned
|
36
test/bdd/api/reverse/language.feature
Normal file
36
test/bdd/api/reverse/language.feature
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
@APIDB
|
||||||
|
Feature: Localization of reverse search results
|
||||||
|
|
||||||
|
Scenario: default language
|
||||||
|
When sending json reverse coordinates 18.1147,-15.95
|
||||||
|
Then result addresses contain
|
||||||
|
| ID | country |
|
||||||
|
| 0 | Mauritanie موريتانيا |
|
||||||
|
|
||||||
|
Scenario: accept-language parameter
|
||||||
|
When sending json reverse coordinates 18.1147,-15.95
|
||||||
|
| accept-language |
|
||||||
|
| en,fr |
|
||||||
|
Then result addresses contain
|
||||||
|
| ID | country |
|
||||||
|
| 0 | Mauritania |
|
||||||
|
|
||||||
|
Scenario: HTTP accept language header
|
||||||
|
Given the HTTP header
|
||||||
|
| accept-language |
|
||||||
|
| fr-ca,fr;q=0.8,en-ca;q=0.5,en;q=0.3 |
|
||||||
|
When sending json reverse coordinates 18.1147,-15.95
|
||||||
|
Then result addresses contain
|
||||||
|
| ID | country |
|
||||||
|
| 0 | Mauritanie |
|
||||||
|
|
||||||
|
Scenario: accept-language parameter and HTTP header
|
||||||
|
Given the HTTP header
|
||||||
|
| accept-language |
|
||||||
|
| fr-ca,fr;q=0.8,en-ca;q=0.5,en;q=0.3 |
|
||||||
|
When sending json reverse coordinates 18.1147,-15.95
|
||||||
|
| accept-language |
|
||||||
|
| en |
|
||||||
|
Then result addresses contain
|
||||||
|
| ID | country |
|
||||||
|
| 0 | Mauritania |
|
62
test/bdd/api/search/language.feature
Normal file
62
test/bdd/api/search/language.feature
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
@APIDB
|
||||||
|
Feature: Localization of search results
|
||||||
|
|
||||||
|
Scenario: default language
|
||||||
|
When sending json search query "Vietnam"
|
||||||
|
Then results contain
|
||||||
|
| ID | display_name |
|
||||||
|
| 0 | Việt Nam |
|
||||||
|
|
||||||
|
Scenario: accept-language first
|
||||||
|
When sending json search query "Mauretanien"
|
||||||
|
| accept-language |
|
||||||
|
| en,de |
|
||||||
|
Then results contain
|
||||||
|
| ID | display_name |
|
||||||
|
| 0 | Mauritania |
|
||||||
|
|
||||||
|
Scenario: accept-language missing
|
||||||
|
When sending json search query "Mauretanien"
|
||||||
|
| accept-language |
|
||||||
|
| xx,fr,en,de |
|
||||||
|
Then results contain
|
||||||
|
| ID | display_name |
|
||||||
|
| 0 | Mauritanie |
|
||||||
|
|
||||||
|
Scenario: http accept language header first
|
||||||
|
Given the HTTP header
|
||||||
|
| accept-language |
|
||||||
|
| fr-ca,fr;q=0.8,en-ca;q=0.5,en;q=0.3 |
|
||||||
|
When sending json search query "Mauretanien"
|
||||||
|
Then results contain
|
||||||
|
| ID | display_name |
|
||||||
|
| 0 | Mauritanie |
|
||||||
|
|
||||||
|
Scenario: http accept language header and accept-language
|
||||||
|
Given the HTTP header
|
||||||
|
| accept-language |
|
||||||
|
| fr-ca,fr;q=0.8,en-ca;q=0.5,en;q=0.3 |
|
||||||
|
When sending json search query "Mauretanien"
|
||||||
|
| accept-language |
|
||||||
|
| de,en |
|
||||||
|
Then results contain
|
||||||
|
| ID | display_name |
|
||||||
|
| 0 | Mauretanien |
|
||||||
|
|
||||||
|
Scenario: http accept language header fallback
|
||||||
|
Given the HTTP header
|
||||||
|
| accept-language |
|
||||||
|
| fr-ca,en-ca;q=0.5 |
|
||||||
|
When sending json search query "Mauretanien"
|
||||||
|
Then results contain
|
||||||
|
| ID | display_name |
|
||||||
|
| 0 | Mauritanie |
|
||||||
|
|
||||||
|
Scenario: http accept language header fallback (upper case)
|
||||||
|
Given the HTTP header
|
||||||
|
| accept-language |
|
||||||
|
| fr-FR;q=0.8,en-ca;q=0.5 |
|
||||||
|
When sending json search query "Mauretanie"
|
||||||
|
Then results contain
|
||||||
|
| ID | display_name |
|
||||||
|
| 0 | Mauritanie |
|
@ -30,6 +30,8 @@ Feature: Search queries
|
|||||||
|
|
||||||
Scenario: XML search with addressdetails
|
Scenario: XML search with addressdetails
|
||||||
When sending xml search query "Aleg" with address
|
When sending xml search query "Aleg" with address
|
||||||
|
| accept-language |
|
||||||
|
| en |
|
||||||
Then address of result 0 is
|
Then address of result 0 is
|
||||||
| type | value |
|
| type | value |
|
||||||
| city | Aleg |
|
| city | Aleg |
|
||||||
@ -39,6 +41,8 @@ Feature: Search queries
|
|||||||
|
|
||||||
Scenario: coordinate search with addressdetails
|
Scenario: coordinate search with addressdetails
|
||||||
When sending json search query "14.271104294939,107.69828796387"
|
When sending json search query "14.271104294939,107.69828796387"
|
||||||
|
| accept-language |
|
||||||
|
| en |
|
||||||
Then results contain
|
Then results contain
|
||||||
| display_name |
|
| display_name |
|
||||||
| Plei Ya Rê, Kon Tum province, Vietnam |
|
| Plei Ya Rê, Kon Tum province, Vietnam |
|
||||||
|
@ -19,7 +19,6 @@ BASE_SERVER_ENV = {
|
|||||||
'HTTP_HOST' : 'localhost',
|
'HTTP_HOST' : 'localhost',
|
||||||
'HTTP_USER_AGENT' : 'Mozilla/5.0 (X11; Linux x86_64; rv:51.0) Gecko/20100101 Firefox/51.0',
|
'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' : '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_ACCEPT_ENCODING' : 'gzip, deflate',
|
||||||
'HTTP_CONNECTION' : 'keep-alive',
|
'HTTP_CONNECTION' : 'keep-alive',
|
||||||
'SERVER_SIGNATURE' : '<address>Nominatim BDD Tests</address>',
|
'SERVER_SIGNATURE' : '<address>Nominatim BDD Tests</address>',
|
||||||
@ -149,7 +148,6 @@ class SearchResponse(GenericResponse):
|
|||||||
self.result[-1]['address'] = address
|
self.result[-1]['address'] = address
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class ReverseResponse(GenericResponse):
|
class ReverseResponse(GenericResponse):
|
||||||
|
|
||||||
def __init__(self, page, fmt='json', errorcode=200):
|
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)
|
"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<query>.*)"(?P<dups> with dups)?')
|
@when(u'searching for "(?P<query>.*)"(?P<dups> with dups)?')
|
||||||
def query_cmd(context, query, dups):
|
def query_cmd(context, query, dups):
|
||||||
""" Query directly via PHP script.
|
""" Query directly via PHP script.
|
||||||
@ -259,6 +274,9 @@ def send_api_query(endpoint, params, fmt, context):
|
|||||||
'%s.php' % endpoint)
|
'%s.php' % endpoint)
|
||||||
env['NOMINATIM_SETTINGS'] = context.nominatim.local_settings_file
|
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']]
|
cmd = ['/usr/bin/php-cgi', env['SCRIPT_FILENAME']]
|
||||||
for k,v in params.items():
|
for k,v in params.items():
|
||||||
cmd.append("%s=%s" % (k, v))
|
cmd.append("%s=%s" % (k, v))
|
||||||
@ -284,10 +302,18 @@ def send_api_query(endpoint, params, fmt, context):
|
|||||||
|
|
||||||
return outp[content_start + 4:], status
|
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<fmt>\S+ )?search query "(?P<query>.*)"(?P<addr> with address)?')
|
@when(u'sending (?P<fmt>\S+ )?search query "(?P<query>.*)"(?P<addr> with address)?')
|
||||||
def website_search_request(context, fmt, query, addr):
|
def website_search_request(context, fmt, query, addr):
|
||||||
|
|
||||||
params = {}
|
params = {}
|
||||||
if query:
|
if query:
|
||||||
params['q'] = query
|
params['q'] = query
|
||||||
@ -324,6 +350,29 @@ def website_reverse_request(context, fmt, lat, lon):
|
|||||||
|
|
||||||
context.response = ReverseResponse(outp, outfmt, status)
|
context.response = ReverseResponse(outp, outfmt, status)
|
||||||
|
|
||||||
|
@when(u'sending (?P<fmt>\S+ )?details query for (?P<query>.*)')
|
||||||
|
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<fmt>\S+ )?lookup query for (?P<query>.*)')
|
||||||
|
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'(?P<operator>less than|more than|exactly|at least|at most) (?P<number>\d+) results? (?:is|are) returned')
|
@step(u'(?P<operator>less than|more than|exactly|at least|at most) (?P<number>\d+) results? (?:is|are) returned')
|
||||||
|
Loading…
Reference in New Issue
Block a user