bdd: replace property_list construct with standard check functions

This commit is contained in:
Sarah Hoffmann
2023-03-09 17:55:27 +01:00
parent 01010e443f
commit 1e58cef174
2 changed files with 21 additions and 19 deletions

View File

@@ -152,10 +152,6 @@ class GenericResponse:
self.check_row_field(i, name, Field(value)) self.check_row_field(i, name, Field(value))
def property_list(self, prop):
return [x[prop] for x in self.result]
def check_row(self, idx, check, msg): def check_row(self, idx, check, msg):
""" Assert for the condition 'check' and print 'msg' on fail together """ Assert for the condition 'check' and print 'msg' on fail together
with the contents of the failing result. with the contents of the failing result.

View File

@@ -314,36 +314,42 @@ def check_address(context, lid, complete):
if complete == 'is': if complete == 'is':
assert len(addr_parts) == 0, "Additional address parts found: %s" % str(addr_parts) assert len(addr_parts) == 0, "Additional address parts found: %s" % str(addr_parts)
@then(u'result (?P<lid>\d+ )?has bounding box in (?P<coords>[\d,.-]+)') @then(u'result (?P<lid>\d+ )?has bounding box in (?P<coords>[\d,.-]+)')
def step_impl(context, lid, coords): def check_bounding_box_in_area(context, lid, coords):
if lid is None: if lid is None:
context.execute_steps("then at least 1 result is returned") context.execute_steps("then at least 1 result is returned")
bboxes = context.response.property_list('boundingbox') todos = range(len(context.response.result))
else: else:
context.execute_steps("then more than {}results are returned".format(lid)) context.execute_steps(f"then more than {lid}results are returned")
bboxes = [context.response.result[int(lid)]['boundingbox']] todos = (int(lid), )
expected = Bbox(coords) expected = Bbox(coords)
for bbox in bboxes: for idx in todos:
assert bbox in expected, "Bbox {} is not contained in {}.".format(bbox, expected) res = context.response.result[idx]
check_for_attributes(res, 'boundingbox')
context.response.check_row(idx, res['boundingbox'] in expected,
f"Bbox is not contained in {expected}")
@then(u'result (?P<lid>\d+ )?has centroid in (?P<coords>[\d,.-]+)') @then(u'result (?P<lid>\d+ )?has centroid in (?P<coords>[\d,.-]+)')
def step_impl(context, lid, coords): def check_centroid_in_area(context, lid, coords):
if lid is None: if lid is None:
context.execute_steps("then at least 1 result is returned") context.execute_steps("then at least 1 result is returned")
centroids = zip(context.response.property_list('lon'), todos = range(len(context.response.result))
context.response.property_list('lat'))
else: else:
context.execute_steps("then more than %sresults are returned".format(lid)) context.execute_steps(f"then more than {lid}results are returned")
res = context.response.result[int(lid)] todos = (int(lid), )
centroids = [(res['lon'], res['lat'])]
expected = Bbox(coords) expected = Bbox(coords)
for centroid in centroids: for idx in todos:
assert centroid in expected,\ res = context.response.result[idx]
"Centroid {} is not inside {}.".format(centroid, expected) check_for_attributes(res, 'lat,lon')
context.response.check_row(idx, (res['lon'], res['lat']) in expected,
f"Centroid is not inside {expected}")
@then(u'there are(?P<neg> no)? duplicates') @then(u'there are(?P<neg> no)? duplicates')
def check_for_duplicates(context, neg): def check_for_duplicates(context, neg):