]> git.openstreetmap.org Git - nominatim.git/blob - test/bdd/api/search/params.feature
more API tests (mostly for user errors)
[nominatim.git] / test / bdd / api / search / params.feature
1 @APIDB
2 Feature: Search queries
3     Testing different queries and parameters
4
5     Scenario: Simple XML search
6         When sending xml search query "Schaan"
7         Then result 0 has attributes place_id,osm_type,osm_id
8         And result 0 has attributes place_rank,boundingbox
9         And result 0 has attributes lat,lon,display_name
10         And result 0 has attributes class,type,importance,icon
11         And result 0 has not attributes address
12         And result 0 has bounding box in 46.5,47.5,9,10
13
14     Scenario: Simple JSON search
15         When sending json search query "Vaduz"
16         Then result 0 has attributes place_id,licence,icon,class,type
17         And result 0 has attributes osm_type,osm_id,boundingbox
18         And result 0 has attributes lat,lon,display_name,importance
19         And result 0 has not attributes address
20         And result 0 has bounding box in 46.5,47.5,9,10
21
22     Scenario: Unknown formats returns a user error
23         When sending search query "Vaduz"
24           | format |
25           | x45    |
26         Then a HTTP 400 is returned
27
28     Scenario: JSON search with addressdetails
29         When sending json search query "Montevideo" with address
30         Then address of result 0 is
31           | type         | value |
32           | city         | Montevideo |
33           | state        | Montevideo |
34           | country      | Uruguay |
35           | country_code | uy |
36
37     Scenario: XML search with addressdetails
38         When sending xml search query "Aleg" with address
39           | accept-language |
40           | en |
41         Then address of result 0 is
42           | type         | value |
43           | city         | Aleg |
44           | state        | Brakna |
45           | country      | Mauritania |
46           | country_code | mr |
47
48     Scenario: coordinate search with addressdetails
49         When sending json search query "14.271104294939,107.69828796387"
50           | accept-language |
51           | en |
52         Then results contain
53           | display_name |
54           | Plei Ya RĂȘ, Kon Tum province, Vietnam |
55
56     Scenario: Address details with unknown class types
57         When sending json search query "Hundeauslauf, Hamburg" with address
58         Then results contain
59           | ID | class   | type |
60           | 0  | leisure | dog_park |
61         And result addresses contain
62           | ID | address29 |
63           | 0  | Hundeauslauf |
64         And address of result 0 has no types leisure,dog_park
65
66     Scenario: Disabling deduplication
67         When sending json search query "Sievekingsallee, Hamburg"
68         Then there are no duplicates
69         When sending json search query "Sievekingsallee, Hamburg"
70           | dedupe |
71           | 0 |
72         Then there are duplicates
73
74     Scenario: Search with bounded viewbox in right area
75         When sending json search query "bar" with address
76           | bounded | viewbox |
77           | 1       | -56.16786,-34.84061,-56.12525,-34.86526 |
78         Then result addresses contain
79           | city |
80           | Montevideo |
81
82     Scenario: Country search with bounded viewbox remain in the area
83         When sending json search query "" with address
84           | bounded | viewbox                                 | country |
85           | 1       | -56.16786,-34.84061,-56.12525,-34.86526 | de |
86         Then less than 1 result is returned
87
88     Scenario: Search with bounded viewboxlbrt in right area
89         When sending json search query "bar" with address
90           | bounded | viewboxlbrt |
91           | 1       | -56.16786,-34.86526,-56.12525,-34.84061 |
92         Then result addresses contain
93           | city |
94           | Montevideo |
95
96     Scenario: No POI search with unbounded viewbox
97         When sending json search query "restaurant"
98           | viewbox |
99           | 9.93027,53.61634,10.10073,53.54500 |
100         Then results contain
101           | display_name |
102           | ^[^,]*[Rr]estaurant.* |
103
104     Scenario: bounded search remains within viewbox, even with no results
105          When sending json search query "[restaurant]"
106            | bounded | viewbox |
107            | 1       | 43.5403125,-5.6563282,43.54285,-5.662003 |
108         Then less than 1 result is returned
109
110     Scenario: bounded search remains within viewbox with results
111         When sending json search query "restaurant"
112          | bounded | viewbox |
113          | 1       | 9.93027,53.61634,10.10073,53.54500 |
114         Then result has bounding box in 53.54500,53.61634,9.93027,10.10073
115
116     Scenario: Prefer results within viewbox
117         When sending json search query "25 de Mayo" with address
118           | accept-language |
119           | en |
120         Then result addresses contain
121           | ID | state |
122           | 0  | Salto |
123         When sending json search query "25 de Mayo" with address
124           | accept-language | viewbox |
125           | en              | -56.35879,-34.18330,-56.31618,-34.20815 |
126         Then result addresses contain
127           | ID | state |
128           | 0  | Florida |
129
130     Scenario: viewboxes cannot be points
131         When sending json search query "foo"
132           | viewbox |
133           | 1.01,34.6,1.01,34.6 |
134         Then a HTTP 400 is returned
135
136     Scenario Outline: viewbox must have four coordinate numbers
137         When sending json search query "foo"
138           | viewbox |
139           | <viewbox> |
140         Then a HTTP 400 is returned
141
142     Examples:
143         | viewbox |
144         | 34      |
145         | 0.003,-84.4 |
146         | 5.2,4.5542,12.4 |
147         | 23.1,-6,0.11,44.2,9.1 |
148
149     Scenario Outline: viewboxlbrt must have four coordinate numbers
150         When sending json search query "foo"
151           | viewboxlbrt |
152           | <viewbox> |
153         Then a HTTP 400 is returned
154
155     Examples:
156         | viewbox |
157         | 34      |
158         | 0.003,-84.4 |
159         | 5.2,4.5542,12.4 |
160         | 23.1,-6,0.11,44.2,9.1 |
161
162     Scenario: Overly large limit number for search results
163         When sending json search query "restaurant"
164           | limit |
165           | 1000 |
166         Then at most 50 results are returned
167
168     Scenario: Limit number of search results
169         When sending json search query "restaurant"
170           | limit |
171           | 4 |
172         Then exactly 4 results are returned
173
174     Scenario: Limit parameter must be a number
175         When sending search query "Blue Laguna"
176           | limit |
177           | );    |
178         Then a HTTP 400 is returned
179
180     Scenario: Restrict to feature type country
181         When sending xml search query "Uruguay"
182         Then results contain
183           | ID | place_rank |
184           | 1  | 16 |
185         When sending xml search query "Uruguay"
186           | featureType |
187           | country |
188         Then results contain
189           | place_rank |
190           | 4 |
191
192     Scenario: Restrict to feature type state
193         When sending xml search query "Dakota"
194         Then results contain
195           | place_rank |
196           | 12 |
197         When sending xml search query "Dakota"
198           | featureType |
199           | state |
200         Then results contain
201           | place_rank |
202           | 8 |
203
204     Scenario: Restrict to feature type city
205         When sending xml search query "vaduz"
206         Then results contain
207           | ID | place_rank |
208           | 1  | 30 |
209         When sending xml search query "vaduz"
210           | featureType |
211           | city |
212         Then results contain
213           | place_rank |
214           | 16 |
215
216     Scenario: Restrict to feature type settlement
217         When sending json search query "Burg"
218         Then results contain
219           | ID | class |
220           | 1  | amenity |
221         When sending json search query "Burg"
222           | featureType |
223           | settlement |
224         Then results contain
225           | class    | type |
226           | boundary | administrative | 
227
228     Scenario Outline: Search with polygon threshold (json)
229         When sending json search query "switzerland"
230           | polygon_geojson | polygon_threshold |
231           | 1               | <th> |
232         Then at least 1 result is returned
233         And result 0 has attributes geojson
234
235      Examples:
236         | th |
237         | -1 |
238         | 0.0 |
239         | 0.5 |
240         | 999 |
241
242     Scenario Outline: Search with polygon threshold (xml)
243         When sending xml search query "switzerland"
244           | polygon_geojson | polygon_threshold |
245           | 1               | <th> |
246         Then at least 1 result is returned
247         And result 0 has attributes geojson
248
249      Examples:
250         | th |
251         | -1 |
252         | 0.0 |
253         | 0.5 |
254         | 999 |
255
256     Scenario Outline: Search with invalid polygon threshold (xml)
257         When sending xml search query "switzerland"
258           | polygon_geojson | polygon_threshold |
259           | 1               | <th> |
260         Then a HTTP 400 is returned
261
262      Examples:
263         | th |
264         | x |
265         | ;; |
266         | 1m |
267
268     Scenario Outline: Search with extratags
269         When sending <format> search query "Hauptstr"
270           | extratags |
271           | 1 |
272         Then result has attributes extratags
273
274     Examples:
275         | format |
276         | xml |
277         | json |
278         | jsonv2 |
279
280     Scenario Outline: Search with namedetails
281         When sending <format> search query "Hauptstr"
282           | namedetails |
283           | 1 |
284         Then result has attributes namedetails
285
286     Examples:
287         | format |
288         | xml |
289         | json |
290         | jsonv2 |
291
292     Scenario Outline: Search result with contains TEXT geometry
293         When sending <format> search query "Highmore"
294           | polygon_text |
295           | 1 |
296         Then result has attributes <response_attribute>
297
298     Examples:
299         | format   | response_attribute |
300         | xml      | geotext |
301         | json     | geotext |
302         | jsonv2   | geotext |
303
304     Scenario Outline: Search result contains polygon-as-points geometry
305         When sending <format> search query "Highmore"
306           | polygon |
307           | 1 |
308         Then result has attributes <response_attribute>
309
310     Examples:
311         | format   | response_attribute |
312         | xml      | polygonpoints |
313         | json     | polygonpoints |
314         | jsonv2   | polygonpoints |
315
316     Scenario Outline: Search result contains SVG geometry
317         When sending <format> search query "Highmore"
318           | polygon_svg |
319           | 1 |
320         Then result has attributes <response_attribute>
321
322     Examples:
323         | format   | response_attribute |
324         | xml      | geosvg |
325         | json     | svg |
326         | jsonv2   | svg |
327
328     Scenario Outline: Search result contains KML geometry
329         When sending <format> search query "Highmore"
330           | polygon_kml |
331           | 1 |
332         Then result has attributes <response_attribute>
333
334     Examples:
335         | format   | response_attribute |
336         | xml      | geokml |
337         | json     | geokml |
338         | jsonv2   | geokml |
339
340     Scenario Outline: Search result contains GEOJSON geometry
341         When sending <format> search query "Highmore"
342           | polygon_geojson |
343           | 1 |
344         Then result has attributes <response_attribute>
345
346     Examples:
347         | format   | response_attribute |
348         | xml      | geojson |
349         | json     | geojson |
350         | jsonv2   | geojson |
351
352     Scenario: Search along a route
353         When sending json search query "restaurant" with address
354           | bounded | routewidth | route                                   |
355           | 1       | 0.1        | -103.23255,44.08198,-103.22516,44.08079 |
356         Then result addresses contain
357           | city |
358           | Rapid City |