]> git.openstreetmap.org Git - nominatim.git/commitdiff
Merge pull request #802 from mtmail/coordinate-extract-missing-first-minus-sign
authorSarah Hoffmann <lonvia@denofr.de>
Sun, 1 Oct 2017 20:42:24 +0000 (22:42 +0200)
committerGitHub <noreply@github.com>
Sun, 1 Oct 2017 20:42:24 +0000 (22:42 +0200)
NearPoint::extractFromQuery - greedy-match optional quote sign

lib/Geocode.php
lib/lib.php
test/bdd/api/reverse/params.feature
test/bdd/api/search/params.feature
test/bdd/api/search/postcode.feature [new file with mode: 0644]
test/bdd/steps/cgi-with-coverage.php
test/bdd/steps/queries.py

index a5b9d4859423e3929460e8a50295915b596f2a6a..a7987d2400940b5fe07c8c529366eb25df4d0cd1 100644 (file)
@@ -63,7 +63,7 @@ class Geocode
     private function normTerm($sTerm)
     {
         if ($this->oNormalizer === null) {
-            return null;
+            return $sTerm;
         }
 
         return $this->oNormalizer->transliterate($sTerm);
@@ -752,7 +752,7 @@ class Geocode
                                 } elseif ($sPhraseType == 'postalcode' || ($aSearchTerm['class'] == 'place' && $aSearchTerm['type'] == 'postcode')) {
                                     // We need to try the case where the postal code is the primary element (i.e. no way to tell if it is (postalcode, city) OR (city, postalcode) so try both
                                     if ($aSearch['sPostcode'] === '' && $aSearch['sHouseNumber'] === '' &&
-                                        isset($aSearchTerm['word_id']) && $aSearchTerm['word_id'] && strpos($sNormQuery, $this->normTerm($aSearchTerm['word'])) !== false) {
+                                        isset($aSearchTerm['word']) && $aSearchTerm['word'] && strpos($sNormQuery, $this->normTerm($aSearchTerm['word'])) !== false) {
                                         // If we have structured search or this is the first term,
                                         // make the postcode the primary search element.
                                         if ($aSearch['sOperator'] === '' && ($sPhraseType == 'postalcode' || ($iToken == 0 && $iPhrase == 0))) {
index a5439ef25a9dd39fd41ed2a843e9bbb45b4fa1dc..fb89c48bfe433d12ab7f3db936dee15758927ace 100644 (file)
@@ -545,8 +545,12 @@ function _debugDumpGroupedSearches($aData, $aTokens)
             echo "<td>".$aRow['sPostcode']."</td>";
             echo "<td>".$aRow['sHouseNumber']."</td>";
 
-            echo "<td>".$aRow['oNear']->lat()."</td>";
-            echo "<td>".$aRow['oNear']->lon()."</td>";
+            if ($aRow['oNear']) {
+                echo "<td>".$aRow['oNear']->lat()."</td>";
+                echo "<td>".$aRow['oNear']->lon()."</td>";
+            } else {
+                echo "<td></td><td></td>";
+            }
             echo "<td>".$aRow['fRadius']."</td>";
 
             echo "</tr>";
index 765c91c39d3dd5d1885bc0a1071d99ffe74e8b7d..1de31c9d5fbd12b5c97aff9997be4862da27d62c 100644 (file)
@@ -15,6 +15,15 @@ Feature: Parameters for Reverse API
       | jsonv2 |
       | xml |
 
+    Scenario Outline: Coordinates must be floating-point numbers
+        When sending reverse coordinates <coords>
+        Then a HTTP 400 is returned
+
+    Examples:
+      | coords    |
+      | -45.3,;   |
+      | gkjd,50   |
+
     Scenario Outline: Reverse Geocoding with extratags
         When sending <format> reverse coordinates 10.776234290950017,106.70425325632095
           | extratags |
index d84235920b4bdb82a0769434bb39adfaa3bc2fec..b184fd860939b2aad32899c9301f54ede88aacc7 100644 (file)
@@ -19,6 +19,12 @@ Feature: Search queries
         And result 0 has not attributes address
         And result 0 has bounding box in 46.5,47.5,9,10
 
+    Scenario: Unknown formats returns a user error
+        When sending search query "Vaduz"
+          | format |
+          | x45    |
+        Then a HTTP 400 is returned
+
     Scenario: JSON search with addressdetails
         When sending json search query "Montevideo" with address
         Then address of result 0 is
@@ -165,6 +171,12 @@ Feature: Search queries
           | 4 |
         Then exactly 4 results are returned
 
+    Scenario: Limit parameter must be a number
+        When sending search query "Blue Laguna"
+          | limit |
+          | );    |
+        Then a HTTP 400 is returned
+
     Scenario: Restrict to feature type country
         When sending xml search query "Uruguay"
         Then results contain
diff --git a/test/bdd/api/search/postcode.feature b/test/bdd/api/search/postcode.feature
new file mode 100644 (file)
index 0000000..f92aff3
--- /dev/null
@@ -0,0 +1,20 @@
+@APIDB
+Feature: Searches with postcodes
+    Various searches involving postcodes
+
+    Scenario: US 5+4 ZIP codes are shortened to 5 ZIP codes if not found
+        When sending json search query "57701 1111, us" with address
+        Then result addresses contain
+            | postcode |
+            | 57701    |
+
+    Scenario: Postcode search with address
+        When sending json search query "9486, mauren"
+        Then at least 1 result is returned
+
+    Scenario: Postcode search with country
+        When sending json search query "9486, li" with address
+        Then result addresses contain
+            | country_code |
+            | li           |
+
index 17104d47a29b99e437d9597aa2729a9bae08b1a1..165a1b0cd9b312870b4bff750287e865f9ee9e51 100644 (file)
@@ -1,13 +1,20 @@
 <?php
 require_once 'SebastianBergmann/CodeCoverage/autoload.php';
+
+function coverage_shutdown($oCoverage)
+{
+    $oCoverage->stop();
+    $writer = new \SebastianBergmann\CodeCoverage\Report\PHP;
+    $writer->process($oCoverage, $_SERVER['PHP_CODE_COVERAGE_FILE']);
+}
+
 $covfilter = new SebastianBergmann\CodeCoverage\Filter();
 $covfilter->addDirectoryToWhitelist($_SERVER['COV_PHP_DIR']);
 $coverage = new SebastianBergmann\CodeCoverage\CodeCoverage(null, $covfilter);
 $coverage->start($_SERVER['COV_TEST_NAME']);
 
+register_shutdown_function('coverage_shutdown', $coverage);
+
 include $_SERVER['COV_SCRIPT_FILENAME'];
 
 
-$coverage->stop();
-$writer = new \SebastianBergmann\CodeCoverage\Report\PHP;
-$writer->process($coverage, $_SERVER['PHP_CODE_COVERAGE_FILE']);
index 443342b0d1b86f79d634f42c1daaf01972f8c281..963aad4dffcdca526cef9bc7e1ed1a5496ef5d00 100644 (file)
@@ -349,7 +349,7 @@ def website_search_request(context, fmt, query, addr):
 
     context.response = SearchResponse(outp, outfmt, status)
 
-@when(u'sending (?P<fmt>\S+ )?reverse coordinates (?P<lat>[0-9.-]+)?,(?P<lon>[0-9.-]+)?')
+@when(u'sending (?P<fmt>\S+ )?reverse coordinates (?P<lat>.+)?,(?P<lon>.+)?')
 def website_reverse_request(context, fmt, lat, lon):
     params = {}
     if lat is not None: