]> 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 @SQLITE
2 @APIDB
3 Feature: Search queries
4     Testing different queries and parameters
5
6     Scenario: Simple XML search
7         When sending xml search query "Schaan"
8         Then result 0 has attributes place_id,osm_type,osm_id
9         And result 0 has attributes place_rank,boundingbox
10         And result 0 has attributes lat,lon,display_name
11         And result 0 has attributes class,type,importance
12         And result 0 has not attributes address
13         And result 0 has bounding box in 46.5,47.5,9,10
14
15     Scenario: Simple JSON search
16         When sending json search query "Vaduz"
17         Then result 0 has attributes place_id,licence,class,type
18         And result 0 has attributes osm_type,osm_id,boundingbox
19         And result 0 has attributes lat,lon,display_name,importance
20         And result 0 has not attributes address
21         And result 0 has bounding box in 46.5,47.5,9,10
22
23     Scenario: Unknown formats returns a user error
24         When sending search query "Vaduz"
25           | format |
26           | x45    |
27         Then a HTTP 400 is returned
28
29     Scenario Outline: Search with addressdetails
30         When sending <format> search query "Triesen" with address
31         Then address of result 0 is
32           | type         | value |
33           | village      | Triesen |
34           | county       | Oberland |
35           | postcode     | 9495 |
36           | country      | Liechtenstein |
37           | country_code | li |
38           | ISO3166-2-lvl8 | LI-09 |
39
40     Examples:
41           | format |
42           | json   |
43           | jsonv2 |
44           | geojson |
45           | xml |
46
47     Scenario: Coordinate search with addressdetails
48         When sending json search query "47.12400621,9.6047552"
49           | accept-language |
50           | en |
51         Then results contain
52           | display_name |
53           | Guschg, Valorschstrasse, Balzers, Oberland, 9497, Liechtenstein |
54
55     Scenario: Address details with unknown class types
56         When sending json search query "Kloster St. Elisabeth" with address
57         Then results contain
58           | ID | class   | type |
59           | 0  | amenity | monastery |
60         And result addresses contain
61           | ID | amenity |
62           | 0  | Kloster St. Elisabeth |
63
64     Scenario: Disabling deduplication
65         When sending json search query "Malbunstr"
66         Then there are no duplicates
67         When sending json search query "Malbunstr"
68           | dedupe |
69           | 0 |
70         Then there are duplicates
71
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           | featureType |
192           | country |
193         Then results contain
194           | place_rank |
195           | 4 |
196
197     Scenario: Restrict to feature type state
198         When sending xml search query "Wangerberg"
199         Then at least 1 result is returned
200         When sending xml search query "Wangerberg"
201           | featureType |
202           | state |
203         Then exactly 0 results are returned
204
205     Scenario: Restrict to feature type city
206         When sending xml search query "vaduz"
207         Then at least 1 result is returned
208         When sending xml search query "vaduz"
209           | featureType |
210           | city |
211         Then results contain
212           | place_rank |
213           | 16 |
214
215     Scenario: Restrict to feature type settlement
216         When sending json search query "Malbun"
217         Then results contain
218           | ID | class |
219           | 1  | landuse |
220         When sending json search query "Malbun"
221           | featureType |
222           | settlement |
223         Then results contain
224           | class | type |
225           | place | village |
226
227     Scenario Outline: Search with polygon threshold (json)
228         When sending json search query "triesenberg"
229           | polygon_geojson | polygon_threshold |
230           | 1               | <th> |
231         Then at least 1 result is returned
232         And result 0 has attributes geojson
233
234      Examples:
235         | th |
236         | -1 |
237         | 0.0 |
238         | 0.5 |
239         | 999 |
240
241     Scenario Outline: Search with polygon threshold (xml)
242         When sending xml search query "triesenberg"
243           | polygon_geojson | polygon_threshold |
244           | 1               | <th> |
245         Then at least 1 result is returned
246         And result 0 has attributes geojson
247
248      Examples:
249         | th |
250         | -1 |
251         | 0.0 |
252         | 0.5 |
253         | 999 |
254
255     Scenario Outline: Search with invalid polygon threshold (xml)
256         When sending xml search query "triesenberg"
257           | polygon_geojson | polygon_threshold |
258           | 1               | <th> |
259         Then a HTTP 400 is returned
260
261      Examples:
262         | th |
263         | x |
264         | ;; |
265         | 1m |
266
267     Scenario Outline: Search with extratags
268         When sending <format> search query "Landstr"
269           | extratags |
270           | 1 |
271         Then result has attributes extratags
272
273     Examples:
274         | format |
275         | xml |
276         | json |
277         | jsonv2 |
278         | geojson |
279
280     Scenario Outline: Search with namedetails
281         When sending <format> search query "Landstr"
282           | namedetails |
283           | 1 |
284         Then result has attributes namedetails
285
286     Examples:
287         | format |
288         | xml |
289         | json |
290         | jsonv2 |
291         | geojson |
292
293     Scenario Outline: Search result with contains TEXT geometry
294         When sending <format> search query "triesenberg"
295           | polygon_text |
296           | 1 |
297         Then result has attributes <response_attribute>
298
299     Examples:
300         | format   | response_attribute |
301         | xml      | geotext |
302         | json     | geotext |
303         | jsonv2   | geotext |
304
305     Scenario Outline: Search result contains SVG geometry
306         When sending <format> search query "triesenberg"
307           | polygon_svg |
308           | 1 |
309         Then result has attributes <response_attribute>
310
311     Examples:
312         | format   | response_attribute |
313         | xml      | geosvg |
314         | json     | svg |
315         | jsonv2   | svg |
316
317     Scenario Outline: Search result contains KML geometry
318         When sending <format> search query "triesenberg"
319           | polygon_kml |
320           | 1 |
321         Then result has attributes <response_attribute>
322
323     Examples:
324         | format   | response_attribute |
325         | xml      | geokml |
326         | json     | geokml |
327         | jsonv2   | geokml |
328
329     Scenario Outline: Search result contains GEOJSON geometry
330         When sending <format> search query "triesenberg"
331           | polygon_geojson |
332           | 1 |
333         Then result has attributes <response_attribute>
334
335     Examples:
336         | format   | response_attribute |
337         | xml      | geojson |
338         | json     | geojson |
339         | jsonv2   | geojson |
340         | geojson  | geojson |
341
342     Scenario Outline: Search result in geojson format contains no non-geojson geometry
343         When sending geojson search query "triesenberg"
344           | polygon_text | polygon_svg | polygon_geokml |
345           | 1            | 1           | 1              |
346         Then result 0 has not attributes <response_attribute>
347
348     Examples:
349         | response_attribute |
350         | geotext            |
351         | polygonpoints      |
352         | svg                |
353         | geokml             |
354
355
356     Scenario: Array parameters are ignored
357         When sending json search query "Vaduz" with address
358           | countrycodes[] | polygon_svg[] | limit[] | polygon_threshold[] |
359           | IT             | 1             | 3       | 3.4                 |
360         Then result addresses contain
361           | ID | country_code |
362           | 0  | li           |