ip_geocode_lookup_test.rb
2.17 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
require File.join(File.dirname(__FILE__), '../../../../config/environment')
require 'action_controller/test_process'
require 'test/unit'
require 'rubygems'
require 'mocha'
class LocationAwareController < ActionController::Base #:nodoc: all
geocode_ip_address
def index
render :nothing => true
end
end
class ActionController::TestRequest #:nodoc: all
attr_accessor :remote_ip
end
# Re-raise errors caught by the controller.
class LocationAwareController #:nodoc: all
def rescue_action(e) raise e end;
end
class IpGeocodeLookupTest < Test::Unit::TestCase #:nodoc: all
def setup
@success = GeoKit::GeoLoc.new
@success.provider = "hostip"
@success.lat = 41.7696
@success.lng = -88.4588
@success.city = "Sugar Grove"
@success.state = "IL"
@success.country_code = "US"
@success.success = true
@failure = GeoKit::GeoLoc.new
@failure.provider = "hostip"
@failure.city = "(Private Address)"
@failure.success = false
@controller = LocationAwareController.new
@request = ActionController::TestRequest.new
@response = ActionController::TestResponse.new
end
def test_no_location_in_cookie_or_session
GeoKit::Geocoders::IpGeocoder.expects(:geocode).with("good ip").returns(@success)
@request.remote_ip = "good ip"
get :index
verify
end
def test_location_in_cookie
@request.remote_ip = "good ip"
@request.cookies['geo_location'] = CGI::Cookie.new('geo_location', @success.to_yaml)
get :index
verify
end
def test_location_in_session
@request.remote_ip = "good ip"
@request.session[:geo_location] = @success
@request.cookies['geo_location'] = CGI::Cookie.new('geo_location', @success.to_yaml)
get :index
verify
end
def test_ip_not_located
GeoKit::Geocoders::IpGeocoder.expects(:geocode).with("bad ip").returns(@failure)
@request.remote_ip = "bad ip"
get :index
assert_nil @request.session[:geo_location]
end
private
def verify
assert_response :success
assert_equal @success, @request.session[:geo_location]
assert_not_nil cookies['geo_location']
assert_equal @success, YAML.load(cookies['geo_location'].join)
end
end