X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/7a964efb3a104e304be7620dc18fa123559f05c8..043f9d8298d911c2bc9839a4a4f7ebb22e893783:/test/bdd/steps/queries.py diff --git a/test/bdd/steps/queries.py b/test/bdd/steps/queries.py index 1584d1ed..df34b5cc 100644 --- a/test/bdd/steps/queries.py +++ b/test/bdd/steps/queries.py @@ -114,18 +114,25 @@ class SearchResponse(GenericResponse): self.parse_json() self.result = geojson_results_to_json_results(self.result) + def parse_geocodejson(self): + return self.parse_geojson() + def parse_html(self): content, errors = tidy_document(self.page, options={'char-encoding' : 'utf8'}) #eq_(len(errors), 0 , "Errors found in HTML document:\n%s" % errors) + self.result = [] b = content.find('nominatim_results =') e = content.find('') - content = content[b:e] - b = content.find('[') - e = content.rfind(']') + if b >= 0 and e >= 0: + content = content[b:e] - self.result = json.JSONDecoder(object_pairs_hook=OrderedDict).decode(content[b:e+1]) + b = content.find('[') + e = content.rfind(']') + if b >= 0 and e >= 0: + self.result = json.JSONDecoder(object_pairs_hook=OrderedDict)\ + .decode(content[b:e+1]) def parse_xml(self): et = ET.fromstring(self.page) @@ -195,6 +202,9 @@ class ReverseResponse(GenericResponse): return self.result = geojson_results_to_json_results(self.result[0]) + def parse_geocodejson(self): + return self.parse_geojson() + def parse_xml(self): et = ET.fromstring(self.page) @@ -587,6 +597,27 @@ def step_impl(context, lid, coords): assert_greater_equal(bbox[2], coord[2]) assert_less_equal(bbox[3], coord[3]) +@then(u'result (?P\d+ )?has centroid in (?P[\d,.-]+)') +def step_impl(context, lid, coords): + if lid is None: + context.execute_steps("then at least 1 result is returned") + bboxes = zip(context.response.property_list('lat'), + context.response.property_list('lon')) + else: + context.execute_steps("then more than %sresults are returned" % lid) + res = context.response.result[int(lid)] + bboxes = [ (res['lat'], res['lon']) ] + + coord = [ float(x) for x in coords.split(',') ] + + for lat, lon in bboxes: + lat = float(lat) + lon = float(lon) + assert_greater_equal(lat, coord[0]) + assert_less_equal(lat, coord[1]) + assert_greater_equal(lon, coord[2]) + assert_less_equal(lon, coord[3]) + @then(u'there are(?P no)? duplicates') def check_for_duplicates(context, neg): context.execute_steps("then at least 1 result is returned")