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