]> 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     @fail-legacy
73     Scenario: Search with bounded viewbox in right area
74         When sending json search query "post" with address
75           | bounded | viewbox |
76           | 1       |  9,47,10,48 |
77         Then result addresses contain
78           | ID | town |
79           | 0  | Vaduz |
80         When sending json search query "post" with address
81           | bounded | viewbox |
82           | 1       |  9.49712,47.17122,9.52605,47.16242 |
83         Then result addresses contain
84           | town |
85           | Schaan |
86
87     Scenario: Country search with bounded viewbox remain in the area
88         When sending json search query "" with address
89           | bounded | viewbox                                 | country |
90           | 1       | 9.49712,47.17122,9.52605,47.16242 | de |
91         Then less than 1 result is returned
92
93     Scenario: Search with bounded viewboxlbrt in right area
94         When sending json search query "bar" with address
95           | bounded | viewboxlbrt |
96           | 1       | 9.49712,47.16242,9.52605,47.17122 |
97         Then result addresses contain
98           | town |
99           | Schaan |
100
101     @Fail
102     Scenario: No POI search with unbounded viewbox
103         When sending json search query "restaurant"
104           | viewbox |
105           | 9.93027,53.61634,10.10073,53.54500 |
106         Then results contain
107           | display_name |
108           | ^[^,]*[Rr]estaurant.* |
109
110     Scenario: bounded search remains within viewbox, even with no results
111          When sending json search query "[restaurant]"
112            | bounded | viewbox |
113            | 1       | 43.5403125,-5.6563282,43.54285,-5.662003 |
114         Then less than 1 result is returned
115
116     Scenario: bounded search remains within viewbox with results
117         When sending json search query "restaurant"
118          | bounded | viewbox |
119          | 1       | 9.49712,47.17122,9.52605,47.16242 |
120         Then result has centroid in 9.49712,47.16242,9.52605,47.17122
121
122     Scenario: Prefer results within viewbox
123         When sending json search query "Gässle" with address
124           | accept-language | viewbox |
125           | en              | 9.52413,47.10759,9.53140,47.10539 |
126         Then result addresses contain
127           | ID | village |
128           | 0  | Triesen |
129         When sending json search query "Gässle" with address
130           | accept-language | viewbox |
131           | en              | 9.45949,47.08421,9.54094,47.05466 |
132         Then result addresses contain
133           | ID | town |
134           | 0  | Balzers |
135
136     Scenario: viewboxes cannot be points
137         When sending json search query "foo"
138           | viewbox |
139           | 1.01,34.6,1.01,34.6 |
140         Then a HTTP 400 is returned
141
142     Scenario Outline: viewbox must have four coordinate numbers
143         When sending json search query "foo"
144           | viewbox |
145           | <viewbox> |
146         Then a HTTP 400 is returned
147
148     Examples:
149         | viewbox |
150         | 34      |
151         | 0.003,-84.4 |
152         | 5.2,4.5542,12.4 |
153         | 23.1,-6,0.11,44.2,9.1 |
154
155     Scenario Outline: viewboxlbrt must have four coordinate numbers
156         When sending json search query "foo"
157           | viewboxlbrt |
158           | <viewbox> |
159         Then a HTTP 400 is returned
160
161     Examples:
162         | viewbox |
163         | 34      |
164         | 0.003,-84.4 |
165         | 5.2,4.5542,12.4 |
166         | 23.1,-6,0.11,44.2,9.1 |
167
168     Scenario: Overly large limit number for search results
169         When sending json search query "restaurant"
170           | limit |
171           | 1000 |
172         Then at most 50 results are returned
173
174     Scenario: Limit number of search results
175         When sending json search query "landstr"
176           | dedupe |
177           | 0      |
178         Then more than 4 results are returned
179         When sending json search query "landstr"
180           | limit | dedupe |
181           | 4     | 0      |
182         Then exactly 4 results are returned
183
184     Scenario: Limit parameter must be a number
185         When sending search query "Blue Laguna"
186           | limit |
187           | );    |
188         Then a HTTP 400 is returned
189
190     Scenario: Restrict to feature type country
191         When sending xml search query "fürstentum"
192           | featureType |
193           | country |
194         Then results contain
195           | place_rank |
196           | 4 |
197
198     Scenario: Restrict to feature type state
199         When sending xml search query "Wangerberg"
200         Then at least 1 result is returned
201         When sending xml search query "Wangerberg"
202           | featureType |
203           | state |
204         Then exactly 0 results are returned
205
206     Scenario: Restrict to feature type city
207         When sending xml search query "vaduz"
208         Then at least 1 result is returned
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 "Malbun"
218         Then results contain
219           | ID | class |
220           | 1  | landuse |
221         When sending json search query "Malbun"
222           | featureType |
223           | settlement |
224         Then results contain
225           | class | type |
226           | place | village |
227
228     Scenario Outline: Search with polygon threshold (json)
229         When sending json search query "triesenberg"
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 "triesenberg"
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 "triesenberg"
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 "Landstr"
270           | extratags |
271           | 1 |
272         Then result has attributes extratags
273
274     Examples:
275         | format |
276         | xml |
277         | json |
278         | jsonv2 |
279         | geojson |
280
281     Scenario Outline: Search with namedetails
282         When sending <format> search query "Landstr"
283           | namedetails |
284           | 1 |
285         Then result has attributes namedetails
286
287     Examples:
288         | format |
289         | xml |
290         | json |
291         | jsonv2 |
292         | geojson |
293
294     Scenario Outline: Search result with contains TEXT geometry
295         When sending <format> search query "triesenberg"
296           | polygon_text |
297           | 1 |
298         Then result has attributes <response_attribute>
299
300     Examples:
301         | format   | response_attribute |
302         | xml      | geotext |
303         | json     | geotext |
304         | jsonv2   | geotext |
305
306     Scenario Outline: Search result contains SVG geometry
307         When sending <format> search query "triesenberg"
308           | polygon_svg |
309           | 1 |
310         Then result has attributes <response_attribute>
311
312     Examples:
313         | format   | response_attribute |
314         | xml      | geosvg |
315         | json     | svg |
316         | jsonv2   | svg |
317
318     Scenario Outline: Search result contains KML geometry
319         When sending <format> search query "triesenberg"
320           | polygon_kml |
321           | 1 |
322         Then result has attributes <response_attribute>
323
324     Examples:
325         | format   | response_attribute |
326         | xml      | geokml |
327         | json     | geokml |
328         | jsonv2   | geokml |
329
330     Scenario Outline: Search result contains GEOJSON geometry
331         When sending <format> search query "triesenberg"
332           | polygon_geojson |
333           | 1 |
334         Then result has attributes <response_attribute>
335
336     Examples:
337         | format   | response_attribute |
338         | xml      | geojson |
339         | json     | geojson |
340         | jsonv2   | geojson |
341         | geojson  | geojson |
342
343     Scenario Outline: Search result in geojson format contains no non-geojson geometry
344         When sending geojson search query "triesenberg"
345           | polygon_text | polygon_svg | polygon_geokml |
346           | 1            | 1           | 1              |
347         Then result 0 has not attributes <response_attribute>
348
349     Examples:
350         | response_attribute |
351         | geotext            |
352         | polygonpoints      |
353         | svg                |
354         | geokml             |
355
356     @v1-api-php-only
357     Scenario: Search along a route
358         When sending json search query "rathaus" with address
359         Then result addresses contain
360           | ID | town |
361           | 0  | Schaan |
362         When sending json search query "rathaus" with address
363           | bounded | routewidth | route                              |
364           | 1       | 0.1        |  9.54353,47.11772,9.54314,47.11894 |
365         Then result addresses contain
366           | town |
367           | Triesenberg |
368
369
370     Scenario: Array parameters are ignored
371         When sending json search query "Vaduz" with address
372           | countrycodes[] | polygon_svg[] | limit[] | polygon_threshold[] |
373           | IT             | 1             | 3       | 3.4                 |
374         Then result addresses contain
375           | ID | country_code |
376           | 0  | li           |