+@SQLITE
@APIDB
Feature: Search queries
Testing different queries and parameters
Then result 0 has attributes place_id,osm_type,osm_id
And result 0 has attributes place_rank,boundingbox
And result 0 has attributes lat,lon,display_name
- And result 0 has attributes class,type,importance,icon
+ And result 0 has attributes class,type,importance
And result 0 has not attributes address
And result 0 has bounding box in 46.5,47.5,9,10
Scenario: Simple JSON search
When sending json search query "Vaduz"
- Then result 0 has attributes place_id,licence,icon,class,type
+ Then result 0 has attributes place_id,licence,class,type
And result 0 has attributes osm_type,osm_id,boundingbox
And result 0 has attributes lat,lon,display_name,importance
And result 0 has not attributes address
And result 0 has bounding box in 46.5,47.5,9,10
- Scenario: JSON search with addressdetails
- When sending json search query "Montevideo" with address
- Then address of result 0 is
- | type | value |
- | city | Montevideo |
- | state | Montevideo |
- | country | Uruguay |
- | country_code | uy |
+ Scenario: Unknown formats returns a user error
+ When sending search query "Vaduz"
+ | format |
+ | x45 |
+ Then a HTTP 400 is returned
- Scenario: XML search with addressdetails
- When sending xml search query "Aleg" with address
- | accept-language |
- | en |
+ Scenario Outline: Search with addressdetails
+ When sending <format> search query "Triesen" with address
Then address of result 0 is
| type | value |
- | city | Aleg |
- | state | Brakna |
- | country | Mauritania |
- | country_code | mr |
+ | village | Triesen |
+ | county | Oberland |
+ | postcode | 9495 |
+ | country | Liechtenstein |
+ | country_code | li |
+ | ISO3166-2-lvl8 | LI-09 |
- Scenario: coordinate search with addressdetails
- When sending json search query "14.271104294939,107.69828796387"
+ Examples:
+ | format |
+ | json |
+ | jsonv2 |
+ | geojson |
+ | xml |
+
+ Scenario: Coordinate search with addressdetails
+ When sending json search query "47.12400621,9.6047552"
| accept-language |
| en |
Then results contain
| display_name |
- | Plei Ya Rê, Kon Tum province, Vietnam |
+ | Guschg, Valorschstrasse, Balzers, Oberland, 9497, Liechtenstein |
Scenario: Address details with unknown class types
- When sending json search query "Hundeauslauf, Hamburg" with address
+ When sending json search query "Kloster St. Elisabeth" with address
Then results contain
| ID | class | type |
- | 0 | leisure | dog_park |
+ | 0 | amenity | monastery |
And result addresses contain
- | ID | address29 |
- | 0 | Hundeauslauf |
- And address of result 0 has no types leisure,dog_park
+ | ID | amenity |
+ | 0 | Kloster St. Elisabeth |
Scenario: Disabling deduplication
- When sending json search query "Sievekingsallee, Hamburg"
+ When sending json search query "Malbunstr"
Then there are no duplicates
- When sending json search query "Sievekingsallee, Hamburg"
+ When sending json search query "Malbunstr"
| dedupe |
| 0 |
Then there are duplicates
+ @fail-legacy
Scenario: Search with bounded viewbox in right area
- When sending json search query "bar" with address
+ When sending json search query "post" with address
| bounded | viewbox |
- | 1 | -56.16786,-34.84061,-56.12525,-34.86526 |
+ | 1 | 9,47,10,48 |
Then result addresses contain
- | city |
- | Montevideo |
+ | ID | town |
+ | 0 | Vaduz |
+ When sending json search query "post" with address
+ | bounded | viewbox |
+ | 1 | 9.49712,47.17122,9.52605,47.16242 |
+ Then result addresses contain
+ | town |
+ | Schaan |
+
+ Scenario: Country search with bounded viewbox remain in the area
+ When sending json search query "" with address
+ | bounded | viewbox | country |
+ | 1 | 9.49712,47.17122,9.52605,47.16242 | de |
+ Then less than 1 result is returned
Scenario: Search with bounded viewboxlbrt in right area
When sending json search query "bar" with address
| bounded | viewboxlbrt |
- | 1 | -56.16786,-34.86526,-56.12525,-34.84061 |
+ | 1 | 9.49712,47.16242,9.52605,47.17122 |
Then result addresses contain
- | city |
- | Montevideo |
+ | town |
+ | Schaan |
+ @Fail
Scenario: No POI search with unbounded viewbox
When sending json search query "restaurant"
| viewbox |
| ^[^,]*[Rr]estaurant.* |
Scenario: bounded search remains within viewbox, even with no results
- When sending json search query "restaurant"
+ When sending json search query "[restaurant]"
| bounded | viewbox |
| 1 | 43.5403125,-5.6563282,43.54285,-5.662003 |
Then less than 1 result is returned
Scenario: bounded search remains within viewbox with results
When sending json search query "restaurant"
| bounded | viewbox |
- | 1 | 9.93027,53.61634,10.10073,53.54500 |
- Then result has bounding box in 53.54500,53.61634,9.93027,10.10073
+ | 1 | 9.49712,47.17122,9.52605,47.16242 |
+ Then result has centroid in 9.49712,47.16242,9.52605,47.17122
Scenario: Prefer results within viewbox
- When sending json search query "25 de Mayo" with address
- | accept-language |
- | en |
+ When sending json search query "Gässle" with address
+ | accept-language | viewbox |
+ | en | 9.52413,47.10759,9.53140,47.10539 |
Then result addresses contain
- | ID | state |
- | 0 | Salto |
- When sending json search query "25 de Mayo" with address
+ | ID | village |
+ | 0 | Triesen |
+ When sending json search query "Gässle" with address
| accept-language | viewbox |
- | en | -56.35879,-34.18330,-56.31618,-34.20815 |
+ | en | 9.45949,47.08421,9.54094,47.05466 |
Then result addresses contain
- | ID | state |
- | 0 | Florida |
+ | ID | town |
+ | 0 | Balzers |
+
+ Scenario: viewboxes cannot be points
+ When sending json search query "foo"
+ | viewbox |
+ | 1.01,34.6,1.01,34.6 |
+ Then a HTTP 400 is returned
+
+ Scenario Outline: viewbox must have four coordinate numbers
+ When sending json search query "foo"
+ | viewbox |
+ | <viewbox> |
+ Then a HTTP 400 is returned
+
+ Examples:
+ | viewbox |
+ | 34 |
+ | 0.003,-84.4 |
+ | 5.2,4.5542,12.4 |
+ | 23.1,-6,0.11,44.2,9.1 |
+
+ Scenario Outline: viewboxlbrt must have four coordinate numbers
+ When sending json search query "foo"
+ | viewboxlbrt |
+ | <viewbox> |
+ Then a HTTP 400 is returned
+
+ Examples:
+ | viewbox |
+ | 34 |
+ | 0.003,-84.4 |
+ | 5.2,4.5542,12.4 |
+ | 23.1,-6,0.11,44.2,9.1 |
Scenario: Overly large limit number for search results
When sending json search query "restaurant"
Then at most 50 results are returned
Scenario: Limit number of search results
- When sending json search query "restaurant"
- | limit |
- | 4 |
+ When sending json search query "landstr"
+ | dedupe |
+ | 0 |
+ Then more than 4 results are returned
+ When sending json search query "landstr"
+ | limit | dedupe |
+ | 4 | 0 |
Then exactly 4 results are returned
+ Scenario: Limit parameter must be a number
+ When sending search query "Blue Laguna"
+ | limit |
+ | ); |
+ Then a HTTP 400 is returned
+
Scenario: Restrict to feature type country
- When sending xml search query "Uruguay"
- Then results contain
- | ID | place_rank |
- | 1 | 16 |
- When sending xml search query "Uruguay"
+ When sending xml search query "fürstentum"
| featureType |
| country |
Then results contain
| 4 |
Scenario: Restrict to feature type state
- When sending xml search query "Dakota"
- Then results contain
- | place_rank |
- | 12 |
- When sending xml search query "Dakota"
+ When sending xml search query "Wangerberg"
+ Then at least 1 result is returned
+ When sending xml search query "Wangerberg"
| featureType |
| state |
- Then results contain
- | place_rank |
- | 8 |
+ Then exactly 0 results are returned
Scenario: Restrict to feature type city
When sending xml search query "vaduz"
- Then results contain
- | ID | place_rank |
- | 1 | 30 |
+ Then at least 1 result is returned
When sending xml search query "vaduz"
| featureType |
| city |
| 16 |
Scenario: Restrict to feature type settlement
- When sending json search query "Burg"
+ When sending json search query "Malbun"
Then results contain
| ID | class |
- | 1 | amenity |
- When sending json search query "Burg"
+ | 1 | landuse |
+ When sending json search query "Malbun"
| featureType |
| settlement |
Then results contain
- | class | type |
- | boundary | administrative |
+ | class | type |
+ | place | village |
Scenario Outline: Search with polygon threshold (json)
- When sending json search query "switzerland"
+ When sending json search query "triesenberg"
| polygon_geojson | polygon_threshold |
| 1 | <th> |
Then at least 1 result is returned
| 999 |
Scenario Outline: Search with polygon threshold (xml)
- When sending xml search query "switzerland"
+ When sending xml search query "triesenberg"
| polygon_geojson | polygon_threshold |
| 1 | <th> |
Then at least 1 result is returned
| 999 |
Scenario Outline: Search with invalid polygon threshold (xml)
- When sending xml search query "switzerland"
+ When sending xml search query "triesenberg"
| polygon_geojson | polygon_threshold |
| 1 | <th> |
Then a HTTP 400 is returned
| 1m |
Scenario Outline: Search with extratags
- When sending <format> search query "Hauptstr"
+ When sending <format> search query "Landstr"
| extratags |
| 1 |
Then result has attributes extratags
| xml |
| json |
| jsonv2 |
+ | geojson |
Scenario Outline: Search with namedetails
- When sending <format> search query "Hauptstr"
+ When sending <format> search query "Landstr"
| namedetails |
| 1 |
Then result has attributes namedetails
| xml |
| json |
| jsonv2 |
+ | geojson |
Scenario Outline: Search result with contains TEXT geometry
- When sending <format> search query "Highmore"
+ When sending <format> search query "triesenberg"
| polygon_text |
| 1 |
Then result has attributes <response_attribute>
| json | geotext |
| jsonv2 | geotext |
- Scenario Outline: Search result contains polygon-as-points geometry
- When sending <format> search query "Highmore"
- | polygon |
- | 1 |
- Then result has attributes <response_attribute>
-
- Examples:
- | format | response_attribute |
- | xml | polygonpoints |
- | json | polygonpoints |
- | jsonv2 | polygonpoints |
-
Scenario Outline: Search result contains SVG geometry
- When sending <format> search query "Highmore"
+ When sending <format> search query "triesenberg"
| polygon_svg |
| 1 |
Then result has attributes <response_attribute>
| jsonv2 | svg |
Scenario Outline: Search result contains KML geometry
- When sending <format> search query "Highmore"
+ When sending <format> search query "triesenberg"
| polygon_kml |
| 1 |
Then result has attributes <response_attribute>
| jsonv2 | geokml |
Scenario Outline: Search result contains GEOJSON geometry
- When sending <format> search query "Highmore"
+ When sending <format> search query "triesenberg"
| polygon_geojson |
| 1 |
Then result has attributes <response_attribute>
| xml | geojson |
| json | geojson |
| jsonv2 | geojson |
+ | geojson | geojson |
+
+ Scenario Outline: Search result in geojson format contains no non-geojson geometry
+ When sending geojson search query "triesenberg"
+ | polygon_text | polygon_svg | polygon_geokml |
+ | 1 | 1 | 1 |
+ Then result 0 has not attributes <response_attribute>
+
+ Examples:
+ | response_attribute |
+ | geotext |
+ | polygonpoints |
+ | svg |
+ | geokml |
+
+
+ Scenario: Array parameters are ignored
+ When sending json search query "Vaduz" with address
+ | countrycodes[] | polygon_svg[] | limit[] | polygon_threshold[] |
+ | IT | 1 | 3 | 3.4 |
+ Then result addresses contain
+ | ID | country_code |
+ | 0 | li |