forked from rails/ssl_requirement
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ssl_requirement_test.rb
132 lines (112 loc) · 2.81 KB
/
ssl_requirement_test.rb
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
begin
require 'action_controller'
rescue LoadError
if ENV['ACTIONCONTROLLER_PATH'].nil?
abort <<MSG
Please set the ACTIONCONTROLLER_PATH environment variable to the directory
containing the action_controller.rb file.
MSG
else
$LOAD_PATH.unshift << ENV['ACTIONCONTROLLER_PATH']
begin
require 'action_controller'
rescue LoadError
abort "ActionController could not be found."
end
end
end
require 'action_controller/test_process'
require 'test/unit'
require "#{File.dirname(__FILE__)}/../lib/ssl_requirement"
ActionController::Base.logger = nil
ActionController::Routing::Routes.reload rescue nil
class SslRequirementController < ActionController::Base
include SslRequirement
ssl_required :a, :b
ssl_allowed :c
def a
render :nothing => true
end
def b
render :nothing => true
end
def c
render :nothing => true
end
def d
render :nothing => true
end
def set_flash
flash[:foo] = "bar"
end
end
class SslRequirementTest < Test::Unit::TestCase
def setup
@controller = SslRequirementController.new
@request = ActionController::TestRequest.new
@response = ActionController::TestResponse.new
end
def test_redirect_to_https_preserves_flash
get :set_flash
get :b
assert_response :redirect
assert_equal "bar", flash[:foo]
end
def test_not_redirecting_to_https_does_not_preserve_the_flash
get :set_flash
get :d
assert_response :success
assert_nil flash[:foo]
end
def test_redirect_to_http_preserves_flash
get :set_flash
@request.env['HTTPS'] = "on"
get :d
assert_response :redirect
assert_equal "bar", flash[:foo]
end
def test_not_redirecting_to_http_does_not_preserve_the_flash
get :set_flash
@request.env['HTTPS'] = "on"
get :a
assert_response :success
assert_nil flash[:foo]
end
def test_required_without_ssl
assert_not_equal "on", @request.env["HTTPS"]
get :a
assert_response :redirect
assert_match %r{^https://}, @response.headers['Location']
get :b
assert_response :redirect
assert_match %r{^https://}, @response.headers['Location']
end
def test_required_with_ssl
@request.env['HTTPS'] = "on"
get :a
assert_response :success
get :b
assert_response :success
end
def test_disallowed_without_ssl
assert_not_equal "on", @request.env["HTTPS"]
get :d
assert_response :success
end
def test_disallowed_with_ssl
@request.env['HTTPS'] = "on"
get :d
assert_response :redirect
assert_match %r{^http://}, @response.headers['Location']
end
def test_allowed_without_ssl
assert_not_equal "on", @request.env["HTTPS"]
get :c
assert_response :success
end
def test_allowed_with_ssl
@request.env['HTTPS'] = "on"
get :c
assert_response :success
end
end