X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/8c7fa0213fcd70e7df953f54d6b1efbe26cca8cf..0bbc25c9c5c3ab644d6771ccbd87f26c3d7552bf:/test/bdd/steps/db_ops.py diff --git a/test/bdd/steps/db_ops.py b/test/bdd/steps/db_ops.py index 07b377fa..80f92222 100644 --- a/test/bdd/steps/db_ops.py +++ b/test/bdd/steps/db_ops.py @@ -22,6 +22,8 @@ class PlaceColumn: self.add_hstore('extratags', key[6:], value) elif key.startswith('addr+'): self.add_hstore('address', key[5:], value) + elif key in ('name', 'address', 'extratags'): + self.columns[key] = eval('{' + value + '}') else: assert_in(key, ('class', 'type')) self.columns[key] = None if value == '' else value @@ -40,19 +42,24 @@ class PlaceColumn: self.columns['admin_level'] = int(value) def set_key_housenr(self, value): - self.add_hstore('address', 'housenumber', None if value == '' else value) + if value: + self.add_hstore('address', 'housenumber', value) def set_key_postcode(self, value): - self.add_hstore('address', 'postcode', None if value == '' else value) + if value: + self.add_hstore('address', 'postcode', value) def set_key_street(self, value): - self.add_hstore('address', 'street', None if value == '' else value) + if value: + self.add_hstore('address', 'street', value) def set_key_addr_place(self, value): - self.add_hstore('address', 'place', None if value == '' else value) + if value: + self.add_hstore('address', 'place', value) def set_key_country(self, value): - self.add_hstore('address', 'country', None if value == '' else value) + if value: + self.add_hstore('address', 'country', value) def set_key_geometry(self, value): self.geometry = self.context.osm.parse_geometry(value, self.context.scene) @@ -103,9 +110,10 @@ class PlaceObjName(object): if self.pid is None: return "" - self.conn.cursor().execute("""SELECT osm_type, osm_id, class - FROM placex WHERE place_id = %s""", - self.pid) + cur = self.conn.cursor() + cur.execute("""SELECT osm_type, osm_id, class + FROM placex WHERE place_id = %s""", + (self.pid, )) eq_(1, cur.rowcount, "No entry found for place id %s" % self.pid) return "%s%s:%s" % cur.fetchone() @@ -272,16 +280,16 @@ def import_and_index_data_from_place_table(context): context.nominatim.run_setup_script('create-functions', 'create-partition-functions') cur = context.db.cursor() cur.execute( - """insert into placex (osm_type, osm_id, class, type, name, admin_level, - address, extratags, geometry) - select * from place where not (class='place' and type='houses' and osm_type='W')""") + """insert into placex (osm_type, osm_id, class, type, name, admin_level, address, extratags, geometry) + select osm_type, osm_id, class, type, name, admin_level, address, extratags, geometry + from place where not (class='place' and type='houses' and osm_type='W')""") cur.execute( """insert into location_property_osmline (osm_id, address, linegeo) SELECT osm_id, address, geometry from place WHERE class='place' and type='houses' and osm_type='W' and ST_GeometryType(geometry) = 'ST_LineString'""") context.db.commit() - context.nominatim.run_setup_script('index', 'index-noanalyse') + context.nominatim.run_setup_script('calculate-postcodes', 'index', 'index-noanalyse') @when("updating places") def update_place_table(context): @@ -342,7 +350,13 @@ def check_placex_contents(context, exact): if exact: expected_content.add((res['osm_type'], res['osm_id'], res['class'])) for h in row.headings: - if h.startswith('name'): + if h in ('extratags', 'address'): + if row[h] == '-': + assert_is_none(res[h]) + else: + vdict = eval('{' + row[h] + '}') + assert_equals(vdict, res[h]) + elif h.startswith('name'): name = h[5:] if h.startswith('name+') else 'name' assert_in(name, res['name']) eq_(res['name'][name], row[h]) @@ -413,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: @@ -432,10 +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)) + 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)