]> git.openstreetmap.org Git - nominatim.git/commitdiff
add tests for address tag parsing for search name
authorSarah Hoffmann <lonvia@denofr.de>
Sun, 15 Apr 2018 20:43:24 +0000 (22:43 +0200)
committerSarah Hoffmann <lonvia@denofr.de>
Sun, 15 Apr 2018 20:52:42 +0000 (22:52 +0200)
sql/functions.sql
test/bdd/db/import/search_name.feature
test/bdd/steps/db_ops.py

index 8fc8e814a463381b2f29752d3c12190f6a492499..e89013bb45f0dad3befeb8bce98478ed2913ba44 100644 (file)
@@ -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;
index 86bdea9bfd78133291f376d44251000039a1c7f0..cf3ce4dd266a27d2eaa8888e630324ca3e2d55f2 100644 (file)
@@ -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 |
+
index 87babdad88158a1f42cb26f136d5957bfc4ad0b9..80f922222c0018c7e99c69e8064990883c51b69c 100644 (file)
@@ -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)