openstreetmap-website/test/controllers/geocoder_controller_test.rb
2015-02-20 19:53:13 +00:00

313 lines
8.7 KiB
Ruby
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# coding: utf-8
require "test_helper"
require "geocoder_controller"
class GeocoderControllerTest < ActionController::TestCase
##
# test all routes which lead to this controller
def test_routes
assert_routing(
{ :path => "/search", :method => :get },
{ :controller => "geocoder", :action => "search" }
)
assert_routing(
{ :path => "/geocoder/search_latlon", :method => :get },
{ :controller => "geocoder", :action => "search_latlon" }
)
assert_routing(
{ :path => "/geocoder/search_us_postcode", :method => :get },
{ :controller => "geocoder", :action => "search_us_postcode" }
)
assert_routing(
{ :path => "/geocoder/search_uk_postcode", :method => :get },
{ :controller => "geocoder", :action => "search_uk_postcode" }
)
assert_routing(
{ :path => "/geocoder/search_ca_postcode", :method => :get },
{ :controller => "geocoder", :action => "search_ca_postcode" }
)
assert_routing(
{ :path => "/geocoder/search_osm_nominatim", :method => :get },
{ :controller => "geocoder", :action => "search_osm_nominatim" }
)
assert_routing(
{ :path => "/geocoder/search_geonames", :method => :get },
{ :controller => "geocoder", :action => "search_geonames" }
)
assert_routing(
{ :path => "/geocoder/search_osm_nominatim_reverse", :method => :get },
{ :controller => "geocoder", :action => "search_osm_nominatim_reverse" }
)
assert_routing(
{ :path => "/geocoder/search_geonames_reverse", :method => :get },
{ :controller => "geocoder", :action => "search_geonames_reverse" }
)
end
##
# Test identification of basic lat/lon pairs
def test_identify_latlon_basic
[
"50.06773 14.37742",
"50.06773, 14.37742",
"+50.06773 +14.37742",
"+50.06773, +14.37742"
].each do |code|
latlon_check code, 50.06773, 14.37742
end
end
##
# Test identification of lat/lon pairs using N/E with degrees
def test_identify_latlon_ne_d
[
"N50.06773 E14.37742",
"N50.06773, E14.37742",
"50.06773N 14.37742E",
"50.06773N, 14.37742E"
].each do |code|
latlon_check code, 50.06773, 14.37742
end
end
##
# Test identification of lat/lon pairs using N/W with degrees
def test_identify_latlon_nw_d
[
"N50.06773 W14.37742",
"N50.06773, W14.37742",
"50.06773N 14.37742W",
"50.06773N, 14.37742W"
].each do |code|
latlon_check code, 50.06773, -14.37742
end
end
##
# Test identification of lat/lon pairs using S/E with degrees
def test_identify_latlon_se_d
[
"S50.06773 E14.37742",
"S50.06773, E14.37742",
"50.06773S 14.37742E",
"50.06773S, 14.37742E"
].each do |code|
latlon_check code, -50.06773, 14.37742
end
end
##
# Test identification of lat/lon pairs using S/W with degrees
def test_identify_latlon_sw_d
[
"S50.06773 W14.37742",
"S50.06773, W14.37742",
"50.06773S 14.37742W",
"50.06773S, 14.37742W"
].each do |code|
latlon_check code, -50.06773, -14.37742
end
end
##
# Test identification of lat/lon pairs using N/E with degrees/mins
def test_identify_latlon_ne_dm
[
"N 50° 04.064 E 014° 22.645",
"N 50° 04.064' E 014° 22.645",
"N 50° 04.064', E 014° 22.645'",
"N50° 04.064 E14° 22.645",
"N 50 04.064 E 014 22.645",
"N50 4.064 E14 22.645",
"50° 04.064' N, 014° 22.645' E"
].each do |code|
latlon_check code, 50.06773, 14.37742
end
end
##
# Test identification of lat/lon pairs using N/W with degrees/mins
def test_identify_latlon_nw_dm
[
"N 50° 04.064 W 014° 22.645",
"N 50° 04.064' W 014° 22.645",
"N 50° 04.064', W 014° 22.645'",
"N50° 04.064 W14° 22.645",
"N 50 04.064 W 014 22.645",
"N50 4.064 W14 22.645",
"50° 04.064' N, 014° 22.645' W"
].each do |code|
latlon_check code, 50.06773, -14.37742
end
end
##
# Test identification of lat/lon pairs using S/E with degrees/mins
def test_identify_latlon_se_dm
[
"S 50° 04.064 E 014° 22.645",
"S 50° 04.064' E 014° 22.645",
"S 50° 04.064', E 014° 22.645'",
"S50° 04.064 E14° 22.645",
"S 50 04.064 E 014 22.645",
"S50 4.064 E14 22.645",
"50° 04.064' S, 014° 22.645' E"
].each do |code|
latlon_check code, -50.06773, 14.37742
end
end
##
# Test identification of lat/lon pairs using S/W with degrees/mins
def test_identify_latlon_sw_dm
[
"S 50° 04.064 W 014° 22.645",
"S 50° 04.064' W 014° 22.645",
"S 50° 04.064', W 014° 22.645'",
"S50° 04.064 W14° 22.645",
"S 50 04.064 W 014 22.645",
"S50 4.064 W14 22.645",
"50° 04.064' S, 014° 22.645' W"
].each do |code|
latlon_check code, -50.06773, -14.37742
end
end
##
# Test identification of lat/lon pairs using N/E with degrees/mins/secs
def test_identify_latlon_ne_dms
[
"N 50° 4' 03.828\" E 14° 22' 38.712\"",
"N 50° 4' 03.828\", E 14° 22' 38.712\"",
"N 50° 4 03.828″, E 14° 22 38.712″",
"N50 4 03.828 E14 22 38.712",
"N50 4 03.828, E14 22 38.712",
"50°4'3.828\"N 14°22'38.712\"E"
].each do |code|
latlon_check code, 50.06773, 14.37742
end
end
##
# Test identification of lat/lon pairs using N/W with degrees/mins/secs
def test_identify_latlon_nw_dms
[
"N 50° 4' 03.828\" W 14° 22' 38.712\"",
"N 50° 4' 03.828\", W 14° 22' 38.712\"",
"N 50° 4 03.828″, W 14° 22 38.712″",
"N50 4 03.828 W14 22 38.712",
"N50 4 03.828, W14 22 38.712",
"50°4'3.828\"N 14°22'38.712\"W"
].each do |code|
latlon_check code, 50.06773, -14.37742
end
end
##
# Test identification of lat/lon pairs using S/E with degrees/mins/secs
def test_identify_latlon_se_dms
[
"S 50° 4' 03.828\" E 14° 22' 38.712\"",
"S 50° 4' 03.828\", E 14° 22' 38.712\"",
"S 50° 4 03.828″, E 14° 22 38.712″",
"S50 4 03.828 E14 22 38.712",
"S50 4 03.828, E14 22 38.712",
"50°4'3.828\"S 14°22'38.712\"E"
].each do |code|
latlon_check code, -50.06773, 14.37742
end
end
##
# Test identification of lat/lon pairs using S/W with degrees/mins/secs
def test_identify_latlon_sw_dms
[
"S 50° 4' 03.828\" W 14° 22' 38.712\"",
"S 50° 4' 03.828\", W 14° 22' 38.712\"",
"S 50° 4 03.828″, W 14° 22 38.712″",
"S50 4 03.828 W14 22 38.712",
"S50 4 03.828, W14 22 38.712",
"50°4'3.828\"S 14°22'38.712\"W"
].each do |code|
latlon_check code, -50.06773, -14.37742
end
end
##
# Test identification of US zipcodes
def test_identify_us_postcode
[
"12345",
"12345-6789"
].each do |code|
post :search, :query => code
assert_response :success
assert_equal %w(us_postcode osm_nominatim), assigns(:sources)
end
end
##
# Test identification of UK postcodes using examples from
# http://en.wikipedia.org/wiki/Postcodes_in_the_United_Kingdom
def test_identify_uk_postcode
[
"EC1A 1BB",
"W1A 1HQ",
"M1 1AA",
"B33 8TH",
"CR2 6XH",
"DN55 1PT"
].each do |code|
search_check code, %w(uk_postcode osm_nominatim)
end
end
##
# Test identification of Canadian postcodes
def test_identify_ca_postcode
search_check "A1B 2C3", %w(ca_postcode osm_nominatim)
end
##
# Test identification fall through to the default case
def test_identify_default
search_check "foo bar baz", ["osm_nominatim"]
end
private
def latlon_check(query, lat, lon)
post :search, :query => query
assert_response :success
assert_template "search"
assert_template :layout => "map"
assert_equal %w(latlon osm_nominatim_reverse), assigns(:sources)
assert_nil @controller.params[:query]
assert_in_delta lat, @controller.params[:lat]
assert_in_delta lon, @controller.params[:lon]
xhr :post, :search, :query => query
assert_response :success
assert_template "search"
assert_template :layout => "xhr"
assert_equal %w(latlon osm_nominatim_reverse), assigns(:sources)
assert_nil @controller.params[:query]
assert_in_delta lat, @controller.params[:lat]
assert_in_delta lon, @controller.params[:lon]
end
def search_check(query, sources)
post :search, :query => query
assert_response :success
assert_template "search"
assert_template :layout => "map"
assert_equal sources, assigns(:sources)
xhr :post, :search, :query => query
assert_response :success
assert_template "search"
assert_template :layout => "xhr"
assert_equal sources, assigns(:sources)
end
end