mirror of
https://github.com/osm-search/Nominatim.git
synced 2024-10-05 06:57:34 +03:00
add tests for address tag parsing for search name
This commit is contained in:
parent
14c25717ab
commit
5182da9f45
@ -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;
|
||||
|
@ -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 |
|
||||
|
||||
|
@ -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<exclude> 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)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user