From: Sarah Hoffmann Date: Thu, 22 Dec 2016 21:28:23 +0000 (+0100) Subject: add remaining reverse tests X-Git-Tag: v3.0.0~85^2~6 X-Git-Url: https://git.openstreetmap.org./nominatim.git/commitdiff_plain/3a787df9347454396c963353e3ae89bbc3501fd1 add remaining reverse tests --- diff --git a/test/bdd/api/reverse/params.feature b/test/bdd/api/reverse/params.feature new file mode 100644 index 00000000..0d35cdc7 --- /dev/null +++ b/test/bdd/api/reverse/params.feature @@ -0,0 +1,102 @@ +@APIDB +Feature: Parameters for Reverse API + Testing diferent parameter options for reverse API. + + Scenario Outline: Reverse-geocoding without address + When sending reverse coordinates 53.603,10.041 + | addressdetails | + | 0 | + Then exactly 1 result is returned + And result has not attributes address + + Examples: + | format | + | json | + | jsonv2 | + | xml | + + Scenario Outline: Reverse Geocoding with extratags + When sending reverse coordinates 10.776234290950017,106.70425325632095 + | extratags | + | 1 | + Then result 0 has attributes extratags + + Examples: + | format | + | xml | + | json | + | jsonv2 | + + Scenario Outline: Reverse Geocoding with namedetails + When sending reverse coordinates 10.776455623137625,106.70175343751907 + | namedetails | + | 1 | + Then result 0 has attributes namedetails + + Examples: + | format | + | xml | + | json | + | jsonv2 | + + Scenario Outline: Reverse Geocoding contains TEXT geometry + When sending reverse coordinates 47.165989816710066,9.515774846076965 + | polygon_text | + | 1 | + Then result 0 has attributes + + Examples: + | format | response_attribute | + | xml | geotext | + | json | geotext | + | jsonv2 | geotext | + + Scenario Outline: Reverse Geocoding contains polygon-as-points geometry + When sending reverse coordinates 47.165989816710066,9.515774846076965 + | polygon | + | 1 | + Then result 0 has not attributes + + Examples: + | format | response_attribute | + | xml | polygonpoints | + | json | polygonpoints | + | jsonv2 | polygonpoints | + + Scenario Outline: Reverse Geocoding contains SVG geometry + When sending reverse coordinates 47.165989816710066,9.515774846076965 + | polygon_svg | + | 1 | + Then result 0 has attributes + + Examples: + | format | response_attribute | + | xml | geosvg | + | json | svg | + | jsonv2 | svg | + + Scenario Outline: Reverse Geocoding contains KML geometry + When sending reverse coordinates 47.165989816710066,9.515774846076965 + | polygon_kml | + | 1 | + Then result 0 has attributes + + Examples: + | format | response_attribute | + | xml | geokml | + | json | geokml | + | jsonv2 | geokml | + + Scenario Outline: Reverse Geocoding contains GEOJSON geometry + When sending reverse coordinates 47.165989816710066,9.515774846076965 + | polygon_geojson | + | 1 | + Then result 0 has attributes + + Examples: + | format | response_attribute | + | xml | geojson | + | json | geojson | + | jsonv2 | geojson | + + diff --git a/test/bdd/api/reverse/queries.feature b/test/bdd/api/reverse/queries.feature new file mode 100644 index 00000000..e1d089b9 --- /dev/null +++ b/test/bdd/api/reverse/queries.feature @@ -0,0 +1,25 @@ +@APIDB +Feature: Reverse geocoding + Testing the reverse function + + @Tiger + Scenario: TIGER house number + When sending jsonv2 reverse coordinates 45.3345,-97.5214 + Then results contain + | osm_type | category | type | + | way | place | house | + And result addresses contain + | house_number | road | postcode | country_code | + | 906 | West 1st Street | 57274 | us | + + @Tiger + Scenario: No TIGER house number for zoom < 18 + When sending jsonv2 reverse coordinates 45.3345,-97.5214 + | zoom | + | 17 | + Then results contain + | osm_type | category | + | way | highway | + And result addresses contain + | road | postcode | country_code | + | West 1st Street | 57274 | us | diff --git a/test/bdd/api/reverse/simple.feature b/test/bdd/api/reverse/simple.feature index b14d9e86..2b484736 100644 --- a/test/bdd/api/reverse/simple.feature +++ b/test/bdd/api/reverse/simple.feature @@ -67,17 +67,17 @@ Feature: Simple Reverse Tests | json | | jsonv2 | - Scenario Outline: Reverse-geocoding without address - When sending reverse coordinates 53.603,10.041 - | addressdetails | - | 0 | - Then exactly 1 result is returned + @wip + Scenario Outline: Boundingbox is returned + When sending reverse coordinates 14.62,108.1 + | zoom | + | 4 | + Then result has bounding box in 9,20,102,113 Examples: | format | | json | | jsonv2 | - | html | | xml | Scenario Outline: Reverse-geocoding with zoom diff --git a/test/bdd/db/update/interpolation.feature b/test/bdd/db/update/interpolation.feature index a9e56cce..7dd5bdc0 100644 --- a/test/bdd/db/update/interpolation.feature +++ b/test/bdd/db/update/interpolation.feature @@ -2,6 +2,31 @@ Feature: Update of address interpolations Test the interpolated address are updated correctly + @wip + Scenario: new interpolation added to existing street + Given the scene parallel-road + And the places + | osm | class | type | name | geometry | + | W2 | highway | unclassified | Sun Way | :w-north | + | W3 | highway | unclassified | Cloud Street | :w-south | + And the ways + | id | nodes | + | 10 | 1,100,101,102,2 | + When importing + Then W10 expands to no interpolation + When updating places + | osm | class | type | housenr | geometry | + | N1 | place | house | 2 | :n-middle-w | + | N2 | place | house | 6 | :n-middle-e | + | W10 | place | houses | even | :w-middle | + Then placex contains + | object | parent_place_id | + | N1 | W2 | + | N2 | W2 | + And W10 expands to interpolation + | parent_place_id | start | end | + | W2 | 2 | 6 | + Scenario: addr:street added to interpolation Given the scene parallel-road And the places diff --git a/test/bdd/steps/queries.py b/test/bdd/steps/queries.py index 81dc0ccd..175a85ae 100644 --- a/test/bdd/steps/queries.py +++ b/test/bdd/steps/queries.py @@ -54,8 +54,40 @@ def compare(operator, op1, op2): else: raise Exception("unknown operator '%s'" % operator) +class GenericResponse(object): -class SearchResponse(object): + def match_row(self, row): + if 'ID' in row.headings: + todo = [int(row['ID'])] + else: + todo = range(len(self.result)) + + for i in todo: + res = self.result[i] + for h in row.headings: + if h == 'ID': + pass + elif h == 'osm': + assert_equal(res['osm_type'], row[h][0]) + assert_equal(res['osm_id'], row[h][1:]) + elif h == 'centroid': + x, y = row[h].split(' ') + assert_almost_equal(float(y), float(res['lat'])) + assert_almost_equal(float(x), float(res['lon'])) + elif row[h].startswith("^"): + assert_in(h, res) + assert_is_not_none(re.fullmatch(row[h], res[h]), + "attribute '%s': expected: '%s', got '%s'" + % (h, row[h], res[h])) + else: + assert_in(h, res) + assert_equal(str(res[h]), str(row[h])) + + def property_list(self, prop): + return [ x[prop] for x in self.result ] + + +class SearchResponse(GenericResponse): def __init__(self, page, fmt='json', errorcode=200): self.page = page @@ -117,38 +149,8 @@ class SearchResponse(object): self.result[-1]['address'] = address - def match_row(self, row): - if 'ID' in row.headings: - todo = [int(row['ID'])] - else: - todo = range(len(self.result)) - for i in todo: - res = self.result[i] - for h in row.headings: - if h == 'ID': - pass - elif h == 'osm': - assert_equal(res['osm_type'], row[h][0]) - assert_equal(res['osm_id'], row[h][1:]) - elif h == 'centroid': - x, y = row[h].split(' ') - assert_almost_equal(float(y), float(res['lat'])) - assert_almost_equal(float(x), float(res['lon'])) - elif row[h].startswith("^"): - assert_in(h, res) - assert_is_not_none(re.fullmatch(row[h], res[h]), - "attribute '%s': expected: '%s', got '%s'" - % (h, row[h], res[h])) - else: - assert_in(h, res) - assert_equal(str(res[h]), str(row[h])) - - def property_list(self, prop): - return [ x[prop] for x in self.result ] - - -class ReverseResponse(object): +class ReverseResponse(GenericResponse): def __init__(self, page, fmt='json', errorcode=200): self.page = page @@ -212,7 +214,6 @@ class ReverseResponse(object): "Unknown XML tag %s on page: %s" % (child.tag, self.page) - @when(u'searching for "(?P.*)"(?P with dups)?') def query_cmd(context, query, dups): """ Query directly via PHP script.