]> git.openstreetmap.org Git - nominatim.git/blob - test/bdd/api/search/queries.feature
Merge pull request #3301 from lonvia/fix-class-search-regression
[nominatim.git] / test / bdd / api / search / queries.feature
1 @SQLITE
2 @APIDB
3 Feature: Search queries
4     Generic search result correctness
5
6     Scenario: Search for natural object
7         When sending json search query "Samina"
8           | accept-language |
9           | en |
10         Then results contain
11           | ID | class    | type  | display_name    |
12           | 0  | waterway | river | Samina, Austria |
13
14     Scenario: House number search for non-street address
15         When sending json search query "6 Silum, Liechtenstein" with address
16           | accept-language |
17           | en |
18         Then address of result 0 is
19           | type         | value |
20           | house_number | 6 |
21           | village      | Silum |
22           | town         | Triesenberg |
23           | county       | Oberland |
24           | postcode     | 9497 |
25           | country      | Liechtenstein |
26           | country_code | li |
27           | ISO3166-2-lvl8  | LI-10 |
28
29     Scenario: House number interpolation
30         When sending json search query "Grosssteg 1023, Triesenberg" with address
31           | accept-language |
32           | de |
33         Then address of result 0 contains
34           | type          | value |
35           | house_number  | 1023 |
36           | road          | Grosssteg |
37           | village       | Sücka |
38           | postcode      | 9497 |
39           | town          | Triesenberg |
40           | country       | Liechtenstein |
41           | country_code  | li |
42
43     Scenario: With missing housenumber search falls back to road
44         When sending json search query "Bündaweg 555" with address
45         Then address of result 0 is
46           | type          | value |
47           | road          | Bündaweg |
48           | village       | Silum |
49           | postcode      | 9497 |
50           | county        | Oberland |
51           | town          | Triesenberg |
52           | country       | Liechtenstein |
53           | country_code  | li |
54           | ISO3166-2-lvl8  | LI-10 |
55
56     Scenario Outline: Housenumber 0 can be found
57         When sending <format> search query "Gnalpstrasse 0" with address
58         Then results contain
59           | display_name |
60           | ^0,.* |
61         And result addresses contain
62           | house_number |
63           | 0     |
64
65     Examples:
66         | format |
67         | xml |
68         | json |
69         | jsonv2 |
70         | geojson |
71
72     @Tiger
73     Scenario: TIGER house number
74         When sending json search query "697 Upper Kingston Road"
75         Then results contain
76          | osm_type | display_name |
77          | way      | ^697,.* |
78
79     Scenario: Search with class-type feature
80         When sending jsonv2 search query "bars in ebenholz"
81         Then results contain
82           | place_rank |
83           | 30 |
84
85     Scenario: Search with specific amenity
86         When sending json search query "[restaurant] Vaduz" with address
87         Then result addresses contain
88           | country |
89           | Liechtenstein |
90         And  results contain
91           | class   | type |
92           | amenity | restaurant |
93
94     Scenario: Search with specific amenity also work in country
95         When sending json search query "restaurants in liechtenstein" with address
96         Then result addresses contain
97           | country |
98           | Liechtenstein |
99         And  results contain
100           | class   | type |
101           | amenity | restaurant |
102
103     Scenario: Search with key-value amenity
104         When sending json search query "[club=scout] Vaduz"
105         Then results contain
106           | class | type |
107           | club  | scout |
108
109     @v1-api-php-only
110     Scenario: With multiple amenity search only the first is used
111         When sending json search query "[club=scout] [church] vaduz"
112         Then results contain
113           | class | type |
114           | club  | scout |
115         When sending json search query "[amenity=place_of_worship] [club=scout] vaduz"
116         Then results contain
117           | class   | type |
118           | amenity | place_of_worship |
119
120     Scenario: POI search near given coordinate
121         When sending json search query "restaurant near 47.16712,9.51100"
122         Then results contain
123           | class   | type |
124           | amenity | restaurant |
125
126     Scenario: Arbitrary key/value search near given coordinate
127         When sending json search query "[leisure=firepit]   47.150° N 9.5340493° E"
128         Then results contain
129           | class   | type |
130           | leisure | firepit |
131
132     @v1-api-php-only
133     Scenario: Arbitrary key/value search near given coordinate and named place
134         When sending json search query "[leisure=firepit] ebenholz  47° 9′ 26″ N 9° 36′ 45″ E"
135         Then results contain
136           | class    | type |
137           | leisure | firepit |
138
139
140     Scenario: POI search in a bounded viewbox
141         When sending json search query "restaurants"
142           | viewbox                           | bounded |
143           | 9.50830,47.15253,9.52043,47.14866 | 1 |
144         Then results contain
145           | class   | type       |
146           | amenity | restaurant |
147
148     Scenario Outline: Key/value search near given coordinate can be restricted to country
149         When sending json search query "[natural=peak] 47.06512,9.53965" with address
150           | countrycodes |
151           | <cc> |
152         Then result addresses contain
153           | country_code |
154           | <cc> |
155
156     Examples:
157         | cc |
158         | li |
159         | ch |
160
161     Scenario: Name search near given coordinate
162         When sending json search query "sporry" with address
163         Then result addresses contain
164           | ID | town |
165           | 0  | Vaduz |
166         When sending json search query "sporry, 47.10791,9.52676" with address
167         Then result addresses contain
168           | ID | village |
169           | 0  | Triesen |
170
171     Scenario: Name search near given coordinate without result
172         When sending json search query "sporry, N 47 15 7 W 9 61 26"
173         Then exactly 0 results are returned
174
175     Scenario: Arbitrary key/value search near a road
176         When sending json search query "[amenity=drinking_water] Wissfläckaweg"
177         Then results contain
178           | class   | type |
179           | amenity | drinking_water |
180
181     Scenario: Ignore other country codes in structured search with country
182         When sending json search query ""
183             | city | country |
184             | li   | de      |
185         Then exactly 0 results are returned
186
187     Scenario: Ignore country searches when query is restricted to countries
188         When sending json search query "fr"
189             | countrycodes |
190             | li  |
191         Then exactly 0 results are returned
192
193     Scenario: Country searches only return results for the given country
194         When sending search query "Ans Trail" with address
195             | countrycodes |
196             | li |
197         Then result addresses contain
198             | country_code |
199             | li |
200
201     # https://trac.openstreetmap.org/ticket/5094
202     Scenario: housenumbers are ordered by complete match first
203         When sending json search query "Austrasse 11, Vaduz" with address
204         Then result addresses contain
205           | ID | house_number |
206           | 0  | 11 |
207
208     Scenario Outline: Coordinate searches with white spaces
209         When sending json search query "<data>"
210         Then exactly 1 result is returned
211         And results contain
212           | class   |
213           | natural |
214
215     Examples:
216       | data |
217       | sporry weiher, N 47.10791° E 9.52676° |
218       | sporry weiher,  N 47.10791° E 9.52676° |
219       |         sporry weiher   ,       N 47.10791° E 9.52676° |
220       | sporry weiher, N 47.10791°             E 9.52676° |
221       | sporry weiher\v, N 47.10791° E  9.52676° |
222
223     Scenario: Searches with white spaces
224         When sending json search query "52      Bodastr\v,\fTriesenberg"
225         Then results contain
226           | class   | type |
227           | highway | residential |
228
229
230     # github #1949
231     Scenario: Addressdetails always return the place type
232        When sending json search query "Vaduz" with address
233        Then result addresses contain
234          | ID | town |
235          | 0  | Vaduz |
236
237     Scenario: Search can handle complex query word sets
238        When sending search query "aussenstelle universitat lichtenstein wachterhaus aussenstelle universitat lichtenstein wachterhaus aussenstelle universitat lichtenstein wachterhaus aussenstelle universitat lichtenstein wachterhaus"
239        Then a HTTP 200 is returned