Error if geocoder#search is called with no arguments
authorTom Hughes <tom@compton.nu>
Sun, 26 Jul 2015 21:58:41 +0000 (22:58 +0100)
committerTom Hughes <tom@compton.nu>
Sun, 26 Jul 2015 21:58:41 +0000 (22:58 +0100)
app/controllers/geocoder_controller.rb
test/controllers/geocoder_controller_test.rb

index 2a30128..20e4d7d 100644 (file)
@@ -13,25 +13,32 @@ class GeocoderController < ApplicationController
     normalize_params
 
     @sources = []
+
     if params[:lat] && params[:lon]
       @sources.push "latlon"
       @sources.push "osm_nominatim_reverse"
       @sources.push "geonames_reverse" if defined?(GEONAMES_USERNAME)
-    elsif params[:query].match(/^\d{5}(-\d{4})?$/)
-      @sources.push "us_postcode"
-      @sources.push "osm_nominatim"
-    elsif params[:query].match(/^(GIR 0AA|[A-PR-UWYZ]([0-9]{1,2}|([A-HK-Y][0-9]|[A-HK-Y][0-9]([0-9]|[ABEHMNPRV-Y]))|[0-9][A-HJKS-UW])\s*[0-9][ABD-HJLNP-UW-Z]{2})$/i)
-      @sources.push "uk_postcode"
-      @sources.push "osm_nominatim"
-    elsif params[:query].match(/^[A-Z]\d[A-Z]\s*\d[A-Z]\d$/i)
-      @sources.push "ca_postcode"
-      @sources.push "osm_nominatim"
-    else
-      @sources.push "osm_nominatim"
-      @sources.push "geonames" if defined?(GEONAMES_USERNAME)
+    elsif params[:query]
+      if params[:query].match(/^\d{5}(-\d{4})?$/)
+        @sources.push "us_postcode"
+        @sources.push "osm_nominatim"
+      elsif params[:query].match(/^(GIR 0AA|[A-PR-UWYZ]([0-9]{1,2}|([A-HK-Y][0-9]|[A-HK-Y][0-9]([0-9]|[ABEHMNPRV-Y]))|[0-9][A-HJKS-UW])\s*[0-9][ABD-HJLNP-UW-Z]{2})$/i)
+        @sources.push "uk_postcode"
+        @sources.push "osm_nominatim"
+      elsif params[:query].match(/^[A-Z]\d[A-Z]\s*\d[A-Z]\d$/i)
+        @sources.push "ca_postcode"
+        @sources.push "osm_nominatim"
+      else
+        @sources.push "osm_nominatim"
+        @sources.push "geonames" if defined?(GEONAMES_USERNAME)
+      end
     end
 
-    render :layout => map_layout
+    if @sources.empty?
+      render :text => "", :status => :bad_request
+    else
+      render :layout => map_layout
+    end
   end
 
   def search_latlon
index 483c37d..bc75a9b 100644 (file)
@@ -45,6 +45,16 @@ class GeocoderControllerTest < ActionController::TestCase
     )
   end
 
+  ##
+  # Test identification with no arguments
+  def test_identify_error
+    get :search
+    assert_response :bad_request
+
+    xhr :get, :search
+    assert_response :bad_request
+  end
+
   ##
   # Test identification of basic lat/lon pairs
   def test_identify_latlon_basic