+@then("location_postcode contains exactly")
+def check_location_postcode(context):
+ cur = context.db.cursor(cursor_factory=psycopg2.extras.DictCursor)
+
+ cur.execute("SELECT *, ST_AsText(geometry) as geomtxt FROM location_postcode")
+ eq_(cur.rowcount, len(list(context.table)),
+ "Postcode table has %d rows, expected %d rows."
+ % (cur.rowcount, len(list(context.table))))
+
+ table = list(cur)
+ for row in context.table:
+ for i in range(len(table)):
+ if table[i]['country_code'] != row['country'] \
+ or table[i]['postcode'] != row['postcode']:
+ continue
+ for h in row.headings:
+ if h not in ('country', 'postcode'):
+ assert_db_column(table[i], h, row[h], context)
+
+@then("word contains(?P<exclude> not)?")
+def check_word_table(context, exclude):
+ cur = context.db.cursor(cursor_factory=psycopg2.extras.DictCursor)
+
+ for row in context.table:
+ wheres = []
+ values = []
+ for h in row.headings:
+ wheres.append("%s = %%s" % h)
+ values.append(row[h])
+ cur.execute("SELECT * from word WHERE %s" % ' AND '.join(wheres), values)
+ if exclude:
+ eq_(0, cur.rowcount,
+ "Row still in word table: %s" % '/'.join(values))
+ else:
+ assert_greater(cur.rowcount, 0,
+ "Row not in word table: %s" % '/'.join(values))
+
+@then("place_addressline contains")
+def check_place_addressline(context):
+ cur = context.db.cursor(cursor_factory=psycopg2.extras.DictCursor)
+
+ for row in context.table:
+ pid = NominatimID(row['object']).get_place_id(cur)
+ apid = NominatimID(row['address']).get_place_id(cur)
+ cur.execute(""" SELECT * FROM place_addressline
+ WHERE place_id = %s AND address_place_id = %s""",
+ (pid, apid))
+ assert_less(0, cur.rowcount,
+ "No rows found for place %s and address %s"
+ % (row['object'], row['address']))
+
+ for res in cur:
+ for h in row.headings:
+ if h not in ('address', 'object'):
+ assert_db_column(res, h, row[h], context)
+
+ context.db.commit()
+
+@then("place_addressline doesn't contain")
+def check_place_addressline_exclude(context):
+ cur = context.db.cursor(cursor_factory=psycopg2.extras.DictCursor)
+
+ for row in context.table:
+ pid = NominatimID(row['object']).get_place_id(cur)
+ apid = NominatimID(row['address']).get_place_id(cur)
+ cur.execute(""" SELECT * FROM place_addressline
+ WHERE place_id = %s AND address_place_id = %s""",
+ (pid, apid))
+ eq_(0, cur.rowcount,
+ "Row found for place %s and address %s" % (row['object'], row['address']))
+
+ context.db.commit()
+
+@then("(?P<oid>\w+) expands to(?P<neg> no)? interpolation")
+def check_location_property_osmline(context, oid, neg):