]> git.openstreetmap.org Git - nominatim.git/blob - test/bdd/api/search/params.feature
Merge remote-tracking branch 'upstream/master'
[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
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,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 Outline: Search with addressdetails
29         When sending <format> search query "Triesen" with address
30         Then address of result 0 is
31           | type         | value |
32           | village      | Triesen |
33           | county       | Oberland |
34           | postcode     | 9495 |
35           | country      | Liechtenstein |
36           | country_code | li |
37           | ISO3166-2-lvl8 | LI-09 |
38
39     Examples:
40           | format |
41           | json   |
42           | jsonv2 |
43           | geojson |
44           | xml |
45
46     Scenario: Coordinate search with addressdetails
47         When sending json search query "47.12400621,9.6047552"
48           | accept-language |
49           | en |
50         Then results contain
51           | display_name |
52           | Guschg, Valorschstrasse, Balzers, Oberland, 9497, Liechtenstein |
53
54     Scenario: Address details with unknown class types
55         When sending json search query "Kloster St. Elisabeth" with address
56         Then results contain
57           | ID | class   | type |
58           | 0  | amenity | monastery |
59         And result addresses contain
60           | ID | amenity |
61           | 0  | Kloster St. Elisabeth |
62
63     Scenario: Disabling deduplication
64         When sending json search query "Malbunstr"
65         Then there are no duplicates
66         When sending json search query "Malbunstr"
67           | dedupe |
68           | 0 |
69         Then there are duplicates
70
71     @fail-legacy
72     Scenario: Search with bounded viewbox in right area
73         When sending json search query "post" with address
74           | bounded | viewbox |
75           | 1       |  9,47,10,48 |
76         Then result addresses contain
77           | ID | town |
78           | 0  | Vaduz |
79         When sending json search query "post" with address
80           | bounded | viewbox |
81           | 1       |  9.49712,47.17122,9.52605,47.16242 |
82         Then result addresses contain
83           | town |
84           | Schaan |
85
86     Scenario: Country search with bounded viewbox remain in the area
87         When sending json search query "" with address
88           | bounded | viewbox                                 | country |
89           | 1       | 9.49712,47.17122,9.52605,47.16242 | de |
90         Then less than 1 result is returned
91
92     Scenario: Search with bounded viewboxlbrt in right area
93         When sending json search query "bar" with address
94           | bounded | viewboxlbrt |
95           | 1       | 9.49712,47.16242,9.52605,47.17122 |
96         Then result addresses contain
97           | town |
98           | Schaan |
99
100     @Fail
101     Scenario: No POI search with unbounded viewbox
102         When sending json search query "restaurant"
103           | viewbox |
104           | 9.93027,53.61634,10.10073,53.54500 |
105         Then results contain
106           | display_name |
107           | ^[^,]*[Rr]estaurant.* |
108
109     Scenario: bounded search remains within viewbox, even with no results
110          When sending json search query "[restaurant]"
111            | bounded | viewbox |
112            | 1       | 43.5403125,-5.6563282,43.54285,-5.662003 |
113         Then less than 1 result is returned
114
115     Scenario: bounded search remains within viewbox with results
116         When sending json search query "restaurant"
117          | bounded | viewbox |
118          | 1       | 9.49712,47.17122,9.52605,47.16242 |
119         Then result has centroid in 9.49712,47.16242,9.52605,47.17122
120
121     Scenario: Prefer results within viewbox
122         When sending json search query "Gässle" with address
123           | accept-language | viewbox |
124           | en              | 9.52413,47.10759,9.53140,47.10539 |
125         Then result addresses contain
126           | ID | village |
127           | 0  | Triesen |
128         When sending json search query "Gässle" with address
129           | accept-language | viewbox |
130           | en              | 9.45949,47.08421,9.54094,47.05466 |
131         Then result addresses contain
132           | ID | town |
133           | 0  | Balzers |
134
135     Scenario: viewboxes cannot be points
136         When sending json search query "foo"
137           | viewbox |
138           | 1.01,34.6,1.01,34.6 |
139         Then a HTTP 400 is returned
140
141     Scenario Outline: viewbox must have four coordinate numbers
142         When sending json search query "foo"
143           | viewbox |
144           | <viewbox> |
145         Then a HTTP 400 is returned
146
147     Examples:
148         | viewbox |
149         | 34      |
150         | 0.003,-84.4 |
151         | 5.2,4.5542,12.4 |
152         | 23.1,-6,0.11,44.2,9.1 |
153
154     Scenario Outline: viewboxlbrt must have four coordinate numbers
155         When sending json search query "foo"
156           | viewboxlbrt |
157           | <viewbox> |
158         Then a HTTP 400 is returned
159
160     Examples:
161         | viewbox |
162         | 34      |
163         | 0.003,-84.4 |
164         | 5.2,4.5542,12.4 |
165         | 23.1,-6,0.11,44.2,9.1 |
166
167     Scenario: Overly large limit number for search results
168         When sending json search query "restaurant"
169           | limit |
170           | 1000 |
171         Then at most 50 results are returned
172
173     Scenario: Limit number of search results
174         When sending json search query "landstr"
175           | dedupe |
176           | 0      |
177         Then more than 4 results are returned
178         When sending json search query "landstr"
179           | limit | dedupe |
180           | 4     | 0      |
181         Then exactly 4 results are returned
182
183     Scenario: Limit parameter must be a number
184         When sending search query "Blue Laguna"
185           | limit |
186           | );    |
187         Then a HTTP 400 is returned
188
189     Scenario: Restrict to feature type country
190         When sending xml search query "fürstentum"
191         Then results contain
192           | ID | class |
193           | 1  | building |
194         When sending xml search query "fürstentum"
195           | featureType |
196           | country |
197         Then results contain
198           | place_rank |
199           | 4 |
200
201     Scenario: Restrict to feature type state
202         When sending xml search query "Wangerberg"
203         Then more than 1 result is returned
204         When sending xml search query "Wangerberg"
205           | featureType |
206           | state |
207         Then exactly 0 results are returned
208
209     Scenario: Restrict to feature type city
210         When sending xml search query "vaduz"
211         Then results contain
212           | ID | place_rank |
213           | 1  | 30 |
214         When sending xml search query "vaduz"
215           | featureType |
216           | city |
217         Then results contain
218           | place_rank |
219           | 16 |
220
221     Scenario: Restrict to feature type settlement
222         When sending json search query "Malbun"
223         Then results contain
224           | ID | class |
225           | 1  | landuse |
226         When sending json search query "Malbun"
227           | featureType |
228           | settlement |
229         Then results contain
230           | class | type |
231           | place | village |
232
233     Scenario Outline: Search with polygon threshold (json)
234         When sending json search query "triesenberg"
235           | polygon_geojson | polygon_threshold |
236           | 1               | <th> |
237         Then at least 1 result is returned
238         And result 0 has attributes geojson
239
240      Examples:
241         | th |
242         | -1 |
243         | 0.0 |
244         | 0.5 |
245         | 999 |
246
247     Scenario Outline: Search with polygon threshold (xml)
248         When sending xml search query "triesenberg"
249           | polygon_geojson | polygon_threshold |
250           | 1               | <th> |
251         Then at least 1 result is returned
252         And result 0 has attributes geojson
253
254      Examples:
255         | th |
256         | -1 |
257         | 0.0 |
258         | 0.5 |
259         | 999 |
260
261     Scenario Outline: Search with invalid polygon threshold (xml)
262         When sending xml search query "triesenberg"
263           | polygon_geojson | polygon_threshold |
264           | 1               | <th> |
265         Then a HTTP 400 is returned
266
267      Examples:
268         | th |
269         | x |
270         | ;; |
271         | 1m |
272
273     Scenario Outline: Search with extratags
274         When sending <format> search query "Landstr"
275           | extratags |
276           | 1 |
277         Then result has attributes extratags
278
279     Examples:
280         | format |
281         | xml |
282         | json |
283         | jsonv2 |
284         | geojson |
285
286     Scenario Outline: Search with namedetails
287         When sending <format> search query "Landstr"
288           | namedetails |
289           | 1 |
290         Then result has attributes namedetails
291
292     Examples:
293         | format |
294         | xml |
295         | json |
296         | jsonv2 |
297         | geojson |
298
299     Scenario Outline: Search result with contains TEXT geometry
300         When sending <format> search query "triesenberg"
301           | polygon_text |
302           | 1 |
303         Then result has attributes <response_attribute>
304
305     Examples:
306         | format   | response_attribute |
307         | xml      | geotext |
308         | json     | geotext |
309         | jsonv2   | geotext |
310
311     Scenario Outline: Search result contains SVG geometry
312         When sending <format> search query "triesenberg"
313           | polygon_svg |
314           | 1 |
315         Then result has attributes <response_attribute>
316
317     Examples:
318         | format   | response_attribute |
319         | xml      | geosvg |
320         | json     | svg |
321         | jsonv2   | svg |
322
323     Scenario Outline: Search result contains KML geometry
324         When sending <format> search query "triesenberg"
325           | polygon_kml |
326           | 1 |
327         Then result has attributes <response_attribute>
328
329     Examples:
330         | format   | response_attribute |
331         | xml      | geokml |
332         | json     | geokml |
333         | jsonv2   | geokml |
334
335     Scenario Outline: Search result contains GEOJSON geometry
336         When sending <format> search query "triesenberg"
337           | polygon_geojson |
338           | 1 |
339         Then result has attributes <response_attribute>
340
341     Examples:
342         | format   | response_attribute |
343         | xml      | geojson |
344         | json     | geojson |
345         | jsonv2   | geojson |
346         | geojson  | geojson |
347
348     Scenario Outline: Search result in geojson format contains no non-geojson geometry
349         When sending geojson search query "triesenberg"
350           | polygon_text | polygon_svg | polygon_geokml |
351           | 1            | 1           | 1              |
352         Then result 0 has not attributes <response_attribute>
353
354     Examples:
355         | response_attribute |
356         | geotext            |
357         | polygonpoints      |
358         | svg                |
359         | geokml             |
360
361     Scenario: Search along a route
362         When sending json search query "rathaus" with address
363         Then result addresses contain
364           | ID | town |
365           | 0  | Schaan |
366         When sending json search query "rathaus" with address
367           | bounded | routewidth | route                              |
368           | 1       | 0.1        |  9.54353,47.11772,9.54314,47.11894 |
369         Then result addresses contain
370           | town |
371           | Triesenberg |
372
373
374     Scenario: Array parameters are ignored
375         When sending json search query "Vaduz" with address
376           | countrycodes[] | polygon_svg[] | limit[] | polygon_threshold[] |
377           | IT             | 1             | 3       | 3.4                 |
378         Then result addresses contain
379           | ID | country_code |
380           | 0  | li           |