From: Sarah Hoffmann Date: Sun, 15 Apr 2018 20:43:24 +0000 (+0200) Subject: add tests for address tag parsing for search name X-Git-Tag: v3.2.0~79^2~6 X-Git-Url: https://git.openstreetmap.org./nominatim.git/commitdiff_plain/5182da9f451d2a56927c3f1df7740c09ad737d53?ds=inline add tests for address tag parsing for search name --- diff --git a/sql/functions.sql b/sql/functions.sql index 8fc8e814..e89013bb 100644 --- a/sql/functions.sql +++ b/sql/functions.sql @@ -1774,6 +1774,7 @@ BEGIN FOR addr_item IN SELECT * FROM each(NEW.address) LOOP IF addr_item.key IN ('city', 'tiger:county', 'state', 'suburb', 'province', 'district', 'region', 'county', 'municipality', 'hamlet', 'village', 'subdistrict', 'town', 'neighbourhood', 'quarter', 'parish') THEN +RAISE WARNING 'Address found % -> %', addr_item.key, addr_item.value; address_street_word_id := get_name_id(make_standard_name(addr_item.value)); IF address_street_word_id IS NOT NULL AND NOT(ARRAY[address_street_word_id] <@ isin_tokens) THEN isin_tokens := isin_tokens || address_street_word_id; diff --git a/test/bdd/db/import/search_name.feature b/test/bdd/db/import/search_name.feature index 86bdea9b..cf3ce4dd 100644 --- a/test/bdd/db/import/search_name.feature +++ b/test/bdd/db/import/search_name.feature @@ -23,3 +23,57 @@ Feature: Creation of search terms Then search_name contains | object | name_vector | nameaddress_vector | | N1 | foo | the road | + + Scenario: Some addr: tags are added to address when the name exists + Given the scene roads-with-pois + And the places + | osm | class | type | name | geometry | + | N1 | place | state | new york | 80 80 | + | N1 | place | city | bonn | 81 81 | + | N1 | place | suburb | smalltown| 80 81 | + And the named places + | osm | class | type | addr+city | addr+state | addr+suburb | geometry | + | W1 | highway | service | bonn | New York | Smalltown | :w-north | + When importing + Then search_name contains + | object | nameaddress_vector | + | W1 | bonn, new york, smalltown | + + Scenario: A known addr:* tag is not added if the name is unknown + Given the scene roads-with-pois + And the places + | osm | class | type | name | addr+city | geometry | + | W1 | highway | residential | Road | Nandu | :w-north | + When importing + Then search_name contains not + | object | nameaddress_vector | + | W1 | nandu | + + Scenario: addr:postcode is not added to the address terms + Given the scene roads-with-pois + And the places + | osm | class | type | name+ref | geometry | + | N1 | place | state | 12345 | 80 80 | + And the named places + | osm | class | type | addr+postcode | geometry | + | W1 | highway | residential | 12345 | :w-north | + When importing + Then search_name contains not + | object | nameaddress_vector | + | W1 | 12345 | + + Scenario: is_in is split and added to the address search terms + Given the scene roads-with-pois + And the places + | osm | class | type | name | geometry | + | N1 | place | state | new york | 80 80 | + | N1 | place | city | bonn | 81 81 | + | N1 | place | suburb | smalltown| 80 81 | + And the named places + | osm | class | type | addr+is_in | geometry | + | W1 | highway | service | bonn, New York, Smalltown | :w-north | + When importing + Then search_name contains + | object | nameaddress_vector | + | W1 | bonn, new york, smalltown | + diff --git a/test/bdd/steps/db_ops.py b/test/bdd/steps/db_ops.py index 87babdad..80f92222 100644 --- a/test/bdd/steps/db_ops.py +++ b/test/bdd/steps/db_ops.py @@ -427,8 +427,8 @@ def check_placex_contents(context, exact): context.db.commit() -@then("search_name contains") -def check_search_name_contents(context): +@then("search_name contains(?P not)?") +def check_search_name_contents(context, exclude): cur = context.db.cursor(cursor_factory=psycopg2.extras.DictCursor) for row in context.table: @@ -446,11 +446,16 @@ def check_search_name_contents(context): FROM word, (SELECT unnest(%s) as term) t WHERE word_token = make_standard_name(t.term)""", (terms,)) - ok_(subcur.rowcount >= len(terms), - "No word entry found for " + row[h]) + if not exclude: + ok_(subcur.rowcount >= len(terms), + "No word entry found for " + row[h]) for wid in subcur: - assert_in(wid[0], res[h], - "Missing term for %s/%s: %s" % (pid, h, wid[1])) + if exclude: + assert_not_in(wid[0], res[h], + "Found term for %s/%s: %s" % (pid, h, wid[1])) + else: + assert_in(wid[0], res[h], + "Missing term for %s/%s: %s" % (pid, h, wid[1])) else: assert_db_column(res, h, row[h], context)