]> git.openstreetmap.org Git - nominatim.git/blob - test/bdd/db/update/linked_places.feature
add testcase for #2551
[nominatim.git] / test / bdd / db / update / linked_places.feature
1 @DB
2 Feature: Updates of linked places
3     Tests that linked places are correctly added and deleted.
4
5     Scenario: Linking is kept when boundary is updated
6         Given the places
7             | osm | class | type | name | geometry |
8             | N1  | place | city | foo  | 0 0 |
9         And the places
10             | osm | class    | type           | name | admin | geometry |
11             | R1  | boundary | administrative | foo  | 8     | poly-area:0.1 |
12         When importing
13         Then placex contains
14          | object | linked_place_id |
15          | N1     | R1 |
16         When updating places
17          | osm | class    | type           | name | name+name:de | admin | geometry |
18          | R1  | boundary | administrative | foo  | Dingens      | 8     | poly-area:0.1 |
19         Then placex contains
20          | object | linked_place_id |
21          | N1     | R1 |
22
23
24     Scenario: Add linked place when linking relation is renamed
25         Given the places
26             | osm | class | type | name | geometry |
27             | N1  | place | city | foo  | 0 0 |
28         And the places
29             | osm | class    | type           | name | admin | geometry |
30             | R1  | boundary | administrative | foo  | 8     | poly-area:0.1 |
31         When importing
32         And sending search query "foo"
33          | dups |
34          | 1    |
35         Then results contain
36          | osm_type |
37          | R |
38         When updating places
39          | osm | class    | type           | name   | admin | geometry |
40          | R1  | boundary | administrative | foobar | 8     | poly-area:0.1 |
41         Then placex contains
42          | object | linked_place_id |
43          | N1     | - |
44         When sending search query "foo"
45          | dups |
46          | 1    |
47         Then results contain
48          | osm_type |
49          | N |
50
51     Scenario: Add linked place when linking relation is removed
52         Given the places
53             | osm | class | type | name | geometry |
54             | N1  | place | city | foo  | 0 0 |
55         And the places
56             | osm | class    | type           | name | admin | geometry |
57             | R1  | boundary | administrative | foo  | 8     | poly-area:0.1 |
58         When importing
59         And sending search query "foo"
60          | dups |
61          | 1    |
62         Then results contain
63          | osm_type |
64          | R |
65         When marking for delete R1
66         Then placex contains
67          | object | linked_place_id |
68          | N1     | - |
69         When sending search query "foo"
70          | dups |
71          | 1    |
72         Then results contain
73          | osm_type |
74          | N |
75
76     Scenario: Remove linked place when linking relation is added
77         Given the places
78             | osm | class | type | name | geometry |
79             | N1  | place | city | foo  | 0 0 |
80         When importing
81         And sending search query "foo"
82          | dups |
83          | 1    |
84         Then results contain
85          | osm_type |
86          | N |
87         When updating places
88          | osm | class    | type           | name   | admin | geometry |
89          | R1  | boundary | administrative | foo    | 8     | poly-area:0.1 |
90         Then placex contains
91          | object | linked_place_id |
92          | N1     | R1 |
93         When sending search query "foo"
94          | dups |
95          | 1    |
96         Then results contain
97          | osm_type |
98          | R |
99
100     Scenario: Remove linked place when linking relation is renamed
101         Given the places
102             | osm | class | type | name | geometry |
103             | N1  | place | city | foo  | 0 0 |
104         And the places
105          | osm | class    | type           | name   | admin | geometry |
106          | R1  | boundary | administrative | foobar | 8     | poly-area:0.1 |
107         When importing
108         And sending search query "foo"
109          | dups |
110          | 1    |
111         Then results contain
112          | osm_type |
113          | N |
114         When updating places
115          | osm | class    | type           | name   | admin | geometry |
116          | R1  | boundary | administrative | foo    | 8     | poly-area:0.1 |
117         Then placex contains
118          | object | linked_place_id |
119          | N1     | R1 |
120         When sending search query "foo"
121          | dups |
122          | 1    |
123         Then results contain
124          | osm_type |
125          | R |
126
127     Scenario: Update linking relation when linkee name is updated
128         Given the places
129          | osm | class    | type           | name | admin | geometry |
130          | R1  | boundary | administrative | rel  | 8     | poly-area:0.1 |
131         And the places
132          | osm | class    | type        | name+name:de | admin | geometry |
133          | N3  | place    | city           | pnt  | 30    | 0.00001 0 |
134         And the relations
135          | id | members  |
136          | 1  | N3:label |
137         When importing
138         Then placex contains
139          | object | linked_place_id | name+_place_name:de |
140          | R1     | -               | pnt  |
141         And placex contains
142          | object | linked_place_id | name+name:de |
143          | N3     | R1              | pnt  |
144         When updating places
145          | osm | class    | type        | name+name:de | admin | geometry |
146          | N3  | place    | city        | newname  | 30    | 0.00001 0 |
147         Then placex contains
148          | object | linked_place_id | name+name:de |
149          | N3     | R1              | newname  |
150         And placex contains
151          | object | linked_place_id | name+_place_name:de |
152          | R1     | -               | newname  |
153
154     Scenario: Update linking relation when linkee name is deleted
155         Given the places
156          | osm | class    | type           | name | admin | geometry |
157          | R1  | boundary | administrative | rel  | 8     | poly-area:0.1 |
158         And the places
159          | osm | class    | type           | name | admin | geometry |
160          | N3  | place    | city           | pnt  | 30    | 0.00001 0 |
161         And the relations
162          | id | members  |
163          | 1  | N3:label |
164         When importing
165         Then placex contains
166          | object | linked_place_id | name+_place_name | name+name |
167          | R1     | -               | pnt              | rel       |
168         And placex contains
169          | object | linked_place_id | name+name |
170          | N3     | R1              | pnt  |
171         When sending search query "pnt"
172         Then results contain
173           | osm |
174           | R1  |
175         When updating places
176          | osm | class    | type        | name+name:de | admin | geometry |
177          | N3  | place    | city        | depnt        | 30    | 0.00001 0 |
178         Then placex contains
179          | object | linked_place_id | name+name:de |
180          | N3     | R1              | depnt  |
181         And placex contains
182          | object | linked_place_id | name+_place_name:de | name+name |
183          | R1     | -               | depnt               | rel       |
184         When sending search query "pnt"
185         Then exactly 0 results are returned
186
187     Scenario: Updating linkee extratags keeps linker's extratags
188         Given the named places
189          | osm | class    | type           | extra+wikidata | admin | geometry |
190          | R1  | boundary | administrative | 34             | 8     | poly-area:0.1 |
191         And the named places
192          | osm | class    | type           | geometry |
193          | N3  | place    | city           | 0.00001 0 |
194         And the relations
195          | id | members  |
196          | 1  | N3:label |
197         When importing
198         Then placex contains
199          | object | extratags |
200          | R1     | 'wikidata' : '34', 'linked_place' : 'city' |
201         When updating places
202          | osm | class    | type        | name    | extra+oneway | admin | geometry |
203          | N3  | place    | city        | newname | yes          | 30    | 0.00001 0 |
204         Then placex contains
205          | object | extratags |
206          | R1     | 'wikidata' : '34', 'oneway' : 'yes', 'linked_place' : 'city' |
207
208     Scenario: Remove linked_place info when linkee is removed
209         Given the places
210             | osm | class | type | name | geometry |
211             | N1  | place | city | foo  | 0 0 |
212         And the places
213             | osm | class    | type           | name | admin | geometry |
214             | R1  | boundary | administrative | foo  | 8     | poly-area:0.1 |
215         When importing
216         Then placex contains
217             | object | extratags |
218             | R1     | 'linked_place' : 'city' |
219         When marking for delete N1
220         Then placex contains
221             | object | extratags |
222             | R1     |  |
223
224     Scenario: Update linked_place info when linkee type changes
225         Given the places
226             | osm | class | type | name | geometry |
227             | N1  | place | city | foo  | 0 0 |
228         And the places
229             | osm | class    | type           | name | admin | geometry |
230             | R1  | boundary | administrative | foo  | 8     | poly-area:0.1 |
231         When importing
232         Then placex contains
233             | object | extratags |
234             | R1     | 'linked_place' : 'city' |
235         When updating places
236             | osm | class | type | name | geometry |
237             | N1  | place | town | foo  | 0 0 |
238         Then placex contains
239             | object | extratags |
240             | R1     | 'linked_place' : 'town' |
241
242
243     Scenario: Keep linking and ranks when place type changes
244         Given the grid
245             | 1 |   |   | 2 |
246             |   |   | 9 |   |
247             | 4 |   |   | 3 |
248         And the places
249             | osm | class    | type           | name | admin | geometry    |
250             | R1  | boundary | administrative | foo  | 8     | (1,2,3,4,1) |
251         And the places
252             | osm | class | type | name | geometry |
253             | N1  | place | city | foo  | 9        |
254         When importing
255         Then placex contains
256             | object | linked_place_id | rank_address |
257             | N1     | R1              | 16           |
258             | R1     | -               | 16           |
259
260         When updating places
261             | osm | class | type | name | geometry |
262             | N1  | place | town | foo  | 9        |
263         Then placex contains
264             | object | linked_place_id | rank_address |
265             | N1     | R1              | 16           |
266             | R1     | -               | 16           |