| R13 | - |
| N256 | - |
- Scenario: Waterways are linked when in waterway relations
+ Scenario: Postcode areas cannot be linked
+ Given the grid
+ | 1 | | 2 |
+ | | 9 | |
+ | 4 | | 3 |
+ And the named places
+ | osm | class | type | addr+postcode | extra+wikidata | geometry |
+ | R13 | boundary | postal_code | 123 | Q87493 | (1,2,3,4,1) |
+ | N25 | place | suburb | 123 | Q87493 | 9 |
+ When importing
+ Then placex contains
+ | object | linked_place_id |
+ | R13 | - |
+ | N25 | - |
+
+ Scenario: Waterways are linked when in waterway relations
Given the scene split-road
And the places
| osm | class | type | name | geometry |
| W2 | R13 |
| R13 | - |
| R23 | - |
- When searching for "rhein"
+ When sending search query "rhein"
Then results contain
| osm_type |
| R |
Scenario: Relations are not linked when in waterway relations
Given the scene split-road
And the places
- | osm | class | type | name | geometry |
- | W1 | waterway | river | Rhein | :w-2 |
- | W2 | waterway | river | Rhein | :w-3 |
- | R1 | waterway | river | Rhein | :w-1 + :w-2 + :w-3 |
- | R2 | waterway | river | Limmat| :w-4a |
+ | osm | class | type | name | geometry |
+ | W1 | waterway | stream | Rhein | :w-2 |
+ | W2 | waterway | river | Rhein | :w-3 |
+ | R1 | waterway | river | Rhein | :w-1 + :w-2 + :w-3 |
+ | R2 | waterway | river | Limmat| :w-4a |
And the relations
| id | members | tags+type |
| 1 | R2 | waterway |
| object | linked_place_id |
| R1 | - |
- Scenario: Waterways are not linked when waterway types don't match
+ Scenario: Waterways are not linked when the way type is not a river feature
Given the scene split-road
And the places
| osm | class | type | name | geometry |
- | W1 | waterway | drain | Rhein | :w-2 |
+ | W1 | waterway | lock | Rhein | :w-2 |
| R1 | waterway | river | Rhein | :w-1 + :w-2 + :w-3 |
And the relations
| id | members | tags+type |
| object | linked_place_id |
| W1 | - |
| R1 | - |
- When searching for "rhein"
+ When sending search query "rhein"
Then results contain
| ID | osm_type |
| 0 | R |
| object | linked_place_id |
| W1 | - |
| W2 | R1 |
- When searching for "rhein2"
+ When sending search query "rhein2"
Then results contain
| osm_type |
| W |
| N3:natural | - |
| N3:place | R1 |
+ Scenario: Nodes with 'role' label are always linked
+ Given the places
+ | osm | class | type | admin | name | geometry |
+ | R13 | boundary | administrative | 6 | Garbo | poly-area:0.1 |
+ | N2 | place | hamlet | 15 | Vario | 0.006 0.00001 |
+ And the relations
+ | id | members | tags+type |
+ | 13 | N2:label | boundary |
+ When importing
+ Then placex contains
+ | object | linked_place_id |
+ | N2 | R13 |
+ And placex contains
+ | object | centroid | name+name | extratags+linked_place |
+ | R13 | 0.006 0.00001 | Garbo | hamlet |
+
+ Scenario: Boundaries with place tags are linked against places with same type
+ Given the places
+ | osm | class | type | admin | name | extra+place | geometry |
+ | R13 | boundary | administrative | 4 | Berlin | city |poly-area:0.1 |
+ And the places
+ | osm | class | type | name | geometry |
+ | N2 | place | city | Berlin | 0.006 0.00001 |
+ When importing
+ Then placex contains
+ | object | linked_place_id |
+ | N2 | R13 |
+ And placex contains
+ | object | rank_address |
+ | R13 | 16 |
+ When sending search query ""
+ | city |
+ | Berlin |
+ Then results contain
+ | ID | osm_type | osm_id |
+ | 0 | R | 13 |
+ When sending search query ""
+ | state |
+ | Berlin |
+ Then results contain
+ | ID | osm_type | osm_id |
+ | 0 | R | 13 |
+
+
+ Scenario: Boundaries without place tags only link against same admin level
+ Given the places
+ | osm | class | type | admin | name | geometry |
+ | R13 | boundary | administrative | 4 | Berlin |poly-area:0.1 |
+ And the places
+ | osm | class | type | name | geometry |
+ | N2 | place | city | Berlin | 0.006 0.00001 |
+ When importing
+ Then placex contains
+ | object | linked_place_id |
+ | N2 | - |
+ And placex contains
+ | object | rank_address |
+ | R13 | 8 |
+ When sending search query ""
+ | state |
+ | Berlin |
+ Then results contain
+ | ID | osm_type | osm_id |
+ | 0 | R | 13 |
+ When sending search query ""
+ | city |
+ | Berlin |
+ Then results contain
+ | ID | osm_type | osm_id |
+ | 0 | N | 2 |
+
+ # github #1352
+ Scenario: Do not use linked centroid when it is outside the area
+ Given the named places
+ | osm | class | type | admin | geometry |
+ | R13 | boundary | administrative | 4 | poly-area:0.01 |
+ And the named places
+ | osm | class | type | geometry |
+ | N2 | place | city | 0.1 0.1 |
+ And the relations
+ | id | members | tags+type |
+ | 13 | N2:label | boundary |
+ When importing
+ Then placex contains
+ | object | linked_place_id |
+ | N2 | R13 |
+ And placex contains
+ | object | centroid |
+ | R13 | in geometry |
+
+ Scenario: Place nodes can only be linked once
+ Given the named places
+ | osm | class | type | extra+wikidata | geometry |
+ | N2 | place | city | Q1234 | 0 0 |
+ And the named places
+ | osm | class | type | extra+wikidata | admin | geometry |
+ | R1 | boundary | administrative | Q1234 | 8 | poly-area:0.1 |
+ | R2 | boundary | administrative | Q1234 | 9 | poly-area:0.01 |
+ When importing
+ Then placex contains
+ | object | linked_place_id |
+ | N2 | R1 |
+ And placex contains
+ | object | extratags |
+ | R1 | 'linked_place' : 'city', 'wikidata': 'Q1234' |
+ | R2 | 'wikidata': 'Q1234' |
+