]> git.openstreetmap.org Git - nominatim.git/commitdiff
add tests for interpolation updates
authorSarah Hoffmann <lonvia@denofr.de>
Sun, 27 Nov 2016 10:56:43 +0000 (11:56 +0100)
committerSarah Hoffmann <lonvia@denofr.de>
Fri, 30 Dec 2016 21:58:58 +0000 (22:58 +0100)
test/bdd/db/update/interpolation.feature [new file with mode: 0644]
test/bdd/steps/db_ops.py

diff --git a/test/bdd/db/update/interpolation.feature b/test/bdd/db/update/interpolation.feature
new file mode 100644 (file)
index 0000000..a9e56cc
--- /dev/null
@@ -0,0 +1,244 @@
+@DB
+Feature: Update of address interpolations
+    Test the interpolated address are updated correctly
+
+    Scenario: addr:street added to interpolation
+      Given the scene parallel-road
+      And the places
+          | osm | class | type  | housenr | geometry |
+          | N1  | place | house | 2       | :n-middle-w |
+          | N2  | place | house | 6       | :n-middle-e |
+          | W10 | place | houses | even   | :w-middle |
+      And the places
+          | osm | class   | type         | name         | geometry |
+          | W2  | highway | unclassified | Sun Way      | :w-north |
+          | W3  | highway | unclassified | Cloud Street | :w-south |
+      And the ways
+          | id  | nodes |
+          | 10  | 1,100,101,102,2 |
+      When importing
+      Then placex contains
+          | object | parent_place_id |
+          | N1     | W2 |
+          | N2     | W2 |
+      And W10 expands to interpolation
+          | parent_place_id | start | end |
+          | W2              | 2     | 6 |
+      When updating places
+          | osm | class   | type    | housenr | street       | geometry |
+          | W10 | place   | houses  | even    | Cloud Street | :w-middle |
+      Then placex contains
+          | object | parent_place_id |
+          | N1     | W3 |
+          | N2     | W3 |
+      And W10 expands to interpolation
+          | parent_place_id | start | end |
+          | W3              | 2     | 6 |
+
+    Scenario: addr:street added to housenumbers
+      Given the scene parallel-road
+      And the places
+          | osm | class | type  | housenr | geometry |
+          | N1  | place | house | 2       | :n-middle-w |
+          | N2  | place | house | 6       | :n-middle-e |
+          | W10 | place | houses | even   | :w-middle |
+      And the places
+          | osm | class   | type         | name         | geometry |
+          | W2  | highway | unclassified | Sun Way      | :w-north |
+          | W3  | highway | unclassified | Cloud Street | :w-south |
+      And the ways
+          | id  | nodes |
+          | 10  | 1,100,101,102,2 |
+      When importing
+      Then placex contains
+          | object | parent_place_id |
+          | N1     | W2 |
+          | N2     | W2 |
+      And W10 expands to interpolation
+          | parent_place_id | start | end |
+          | W2              | 2     | 6 |
+      When updating places
+          | osm | class | type  | street      | housenr | geometry |
+          | N1  | place | house | Cloud Street| 2       | :n-middle-w |
+          | N2  | place | house | Cloud Street| 6       | :n-middle-e |
+      Then placex contains
+          | object | parent_place_id |
+          | N1     | W3 |
+          | N2     | W3 |
+      And W10 expands to interpolation
+          | parent_place_id | start | end |
+          | W3              | 2     | 6 |
+
+    Scenario: interpolation tag removed
+      Given the scene parallel-road
+      And the places
+          | osm | class | type  | housenr | geometry |
+          | N1  | place | house | 2       | :n-middle-w |
+          | N2  | place | house | 6       | :n-middle-e |
+          | W10 | place | houses | even   | :w-middle |
+      And the places
+          | osm | class   | type         | name         | geometry |
+          | W2  | highway | unclassified | Sun Way      | :w-north |
+          | W3  | highway | unclassified | Cloud Street | :w-south |
+      And the ways
+          | id  | nodes |
+          | 10  | 1,100,101,102,2 |
+      When importing
+      Then placex contains
+          | object | parent_place_id |
+          | N1     | W2 |
+          | N2     | W2 |
+      And W10 expands to interpolation
+          | parent_place_id | start | end |
+          | W2              | 2     | 6 |
+      When marking for delete W10
+      Then W10 expands to no interpolation
+      And placex contains
+          | object | parent_place_id |
+          | N1     | W2 |
+          | N2     | W2 |
+
+    Scenario: referenced road added
+      Given the scene parallel-road
+      And the places
+          | osm | class | type  | housenr | geometry |
+          | N1  | place | house | 2       | :n-middle-w |
+          | N2  | place | house | 6       | :n-middle-e |
+      And the places
+          | osm | class   | type    | housenr | street      | geometry |
+          | W10 | place   | houses  | even    | Cloud Street| :w-middle |
+      And the places
+          | osm | class   | type         | name     | geometry |
+          | W2  | highway | unclassified | Sun Way  | :w-north |
+      And the ways
+          | id  | nodes |
+          | 10  | 1,100,101,102,2 |
+      When importing
+      Then placex contains
+          | object | parent_place_id |
+          | N1     | W2 |
+          | N2     | W2 |
+      And W10 expands to interpolation
+          | parent_place_id | start | end |
+          | W2              | 2     | 6 |
+      When updating places
+          | osm | class   | type         | name         | geometry |
+          | W3  | highway | unclassified | Cloud Street | :w-south |
+      Then placex contains
+          | object | parent_place_id |
+          | N1     | W3 |
+          | N2     | W3 |
+      And W10 expands to interpolation
+          | parent_place_id | start | end |
+          | W3              | 2     | 6 |
+
+    Scenario: referenced road deleted
+      Given the scene parallel-road
+      And the places
+          | osm | class | type  | housenr | geometry |
+          | N1  | place | house | 2       | :n-middle-w |
+          | N2  | place | house | 6       | :n-middle-e |
+      And the places
+          | osm | class   | type    | housenr | street      | geometry |
+          | W10 | place   | houses  | even    | Cloud Street| :w-middle |
+      And the places
+          | osm | class   | type         | name         | geometry |
+          | W2  | highway | unclassified | Sun Way      | :w-north |
+          | W3  | highway | unclassified | Cloud Street | :w-south |
+      And the ways
+          | id  | nodes |
+          | 10  | 1,100,101,102,2 |
+      When importing
+      Then placex contains
+          | object | parent_place_id |
+          | N1     | W3 |
+          | N2     | W3 |
+      And W10 expands to interpolation
+          | parent_place_id | start | end |
+          | W3              | 2     | 6 |
+      When marking for delete W3
+      Then placex contains
+          | object | parent_place_id |
+          | N1     | W2 |
+          | N2     | W2 |
+      And W10 expands to interpolation
+          | parent_place_id | start | end |
+          | W2              | 2     | 6 |
+
+    Scenario: building becomes interpolation
+      Given the scene building-with-parallel-streets
+      And the places
+          | osm | class    | type  | housenr | geometry |
+          | W1  | place    | house | 3       | :w-building |
+      And the places
+          | osm | class   | type         | name         | geometry |
+          | W2  | highway | unclassified | Cloud Street | :w-south |
+      When importing
+      Then placex contains
+          | object | parent_place_id |
+          | W1     | W2 |
+      Given the ways
+          | id  | nodes |
+          | 1   | 1,100,101,102,2 |
+      When updating places
+          | osm | class | type  | housenr | geometry |
+          | N1  | place | house | 2       | :n-north-w |
+          | N2  | place | house | 6       | :n-north-e |
+      And updating places
+          | osm | class   | type    | housenr | street      | geometry |
+          | W1  | place   | houses  | even    | Cloud Street| :w-north |
+      Then placex has no entry for W1
+      And W1 expands to interpolation
+          | parent_place_id | start | end |
+          | W2              | 2     | 6 |
+
+    Scenario: interpolation becomes building
+      Given the scene building-with-parallel-streets
+      And the places
+          | osm | class | type  | housenr | geometry |
+          | N1  | place | house | 2       | :n-north-w |
+          | N2  | place | house | 6       | :n-north-e |
+      And the places
+          | osm | class   | type         | name         | geometry |
+          | W2  | highway | unclassified | Cloud Street | :w-south |
+      And the ways
+          | id  | nodes |
+          | 1   | 1,100,101,102,2 |
+      And the places
+          | osm | class   | type    | housenr | street      | geometry |
+          | W1  | place   | houses  | even    | Cloud Street| :w-north |
+      When importing
+      Then placex has no entry for W1
+      And W1 expands to interpolation
+          | parent_place_id | start | end |
+          | W2              | 2     | 6 |
+      When updating places
+          | osm | class    | type  | housenr | geometry |
+          | W1  | place    | house | 3       | :w-building |
+      Then placex contains
+          | object | parent_place_id |
+          | W1     | W2 |
+
+    Scenario: housenumbers added to interpolation
+      Given the scene building-with-parallel-streets
+      And the places
+          | osm | class   | type         | name         | geometry |
+          | W2  | highway | unclassified | Cloud Street | :w-south |
+      And the ways
+          | id  | nodes |
+          | 1   | 1,100,101,102,2 |
+      And the places
+          | osm | class   | type    | housenr | geometry |
+          | W1  | place   | houses  | even    | :w-north |
+      When importing
+      Then W1 expands to no interpolation
+      When updating places
+          | osm | class | type  | housenr | geometry |
+          | N1  | place | house | 2       | :n-north-w |
+          | N2  | place | house | 6       | :n-north-e |
+      And updating places
+          | osm | class   | type    | housenr | street      | geometry |
+          | W1  | place   | houses  | even    | Cloud Street| :w-north |
+      Then W1 expands to interpolation
+          | parent_place_id | start | end |
+          | W2              | 2     | 6 |
index 822094629d0cc1b740b7e72d083f3734d7cff0ff..b7fa1a882697b00ce9e7c5b50a05d7d31815a300 100644 (file)
@@ -314,8 +314,8 @@ def check_search_name_contents(context):
 
     context.db.commit()
 
 
     context.db.commit()
 
-@then("(?P<oid>\w+) expands to interpolation")
-def check_location_property_osmline(context, oid):
+@then("(?P<oid>\w+) expands to(?P<neg> no)? interpolation")
+def check_location_property_osmline(context, oid, neg):
     cur = context.db.cursor(cursor_factory=psycopg2.extras.DictCursor)
     nid = NominatimID(oid)
 
     cur = context.db.cursor(cursor_factory=psycopg2.extras.DictCursor)
     nid = NominatimID(oid)
 
@@ -325,6 +325,10 @@ def check_location_property_osmline(context, oid):
                    FROM location_property_osmline WHERE osm_id = %s""",
                 (nid.oid, ))
 
                    FROM location_property_osmline WHERE osm_id = %s""",
                 (nid.oid, ))
 
+    if neg:
+        eq_(0, cur.rowcount)
+        return
+
     todo = list(range(len(list(context.table))))
     for res in cur:
         for i in todo:
     todo = list(range(len(list(context.table))))
     for res in cur:
         for i in todo: