mirror of
https://github.com/osm-search/Nominatim.git
synced 2024-11-23 05:35:13 +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
|
||||
When sending xml search query "Aleg" with address
|
||||
| accept-language |
|
||||
| en |
|
||||
Then address of result 0 is
|
||||
| type | value |
|
||||
| city | Aleg |
|
||||
@ -39,6 +41,8 @@ Feature: Search queries
|
||||
|
||||
Scenario: coordinate search with addressdetails
|
||||
When sending json search query "14.271104294939,107.69828796387"
|
||||
| accept-language |
|
||||
| en |
|
||||
Then results contain
|
||||
| display_name |
|
||||
| Plei Ya Rê, Kon Tum province, Vietnam |
|
||||
|
@ -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' : '<address>Nominatim BDD Tests</address>',
|
||||
@ -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<query>.*)"(?P<dups> with dups)?')
|
||||
def query_cmd(context, query, dups):
|
||||
""" Query directly via PHP script.
|
||||
@ -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<fmt>\S+ )?search query "(?P<query>.*)"(?P<addr> 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<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')
|
||||
|
Loading…
Reference in New Issue
Block a user