diff --git a/test/bdd/db/update/interpolation.feature b/test/bdd/db/update/interpolation.feature new file mode 100644 index 00000000..a9e56cce --- /dev/null +++ b/test/bdd/db/update/interpolation.feature @@ -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 | diff --git a/test/bdd/steps/db_ops.py b/test/bdd/steps/db_ops.py index 82209462..b7fa1a88 100644 --- a/test/bdd/steps/db_ops.py +++ b/test/bdd/steps/db_ops.py @@ -314,8 +314,8 @@ def check_search_name_contents(context): context.db.commit() -@then("(?P\w+) expands to interpolation") -def check_location_property_osmline(context, oid): +@then("(?P\w+) expands to(?P no)? interpolation") +def check_location_property_osmline(context, oid, neg): 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, )) + if neg: + eq_(0, cur.rowcount) + return + todo = list(range(len(list(context.table)))) for res in cur: for i in todo: