rack-bouncer 1.3.0 → 1.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile.lock +1 -1
- data/README.md +1 -1
- data/Rakefile +1 -1
- data/lib/rack/bouncer.rb +1 -1
- data/test/lib/rack/bouncer/aol_test.rb +52 -0
- data/test/lib/rack/bouncer/chrome_test.rb +10 -0
- data/test/lib/rack/bouncer/firefox_test.rb +94 -0
- data/test/lib/rack/bouncer/ie_test.rb +73 -0
- data/test/lib/rack/bouncer/safari_test.rb +17 -0
- data/test/lib/rack/bouncer_test.rb +12 -273
- data/test/test_helper.rb +19 -0
- data/test/user_agents.yml +81 -0
- metadata +11 -4
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -41,7 +41,7 @@ You can specify a set of safe paths:
|
|
41
41
|
|
42
42
|
## contributing
|
43
43
|
|
44
|
-
Pull requests are very welcome.
|
44
|
+
Pull requests are very welcome. You'd be doing me a favor if you could test cover your enhancement and ensure the test suite passes *before* initiating a pull request.
|
45
45
|
|
46
46
|
## acknowledgments
|
47
47
|
|
data/Rakefile
CHANGED
data/lib/rack/bouncer.rb
CHANGED
@@ -0,0 +1,52 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
class Rack::Bouncer::AOLTest < MiniTest::Unit::TestCase
|
4
|
+
def test_expels_aol_6
|
5
|
+
request = create_request
|
6
|
+
response = request.get("/", "HTTP_USER_AGENT" => USER_AGENTS[:aol_6])
|
7
|
+
assert_equal 302, response.status
|
8
|
+
assert_equal response.location, "http://browsehappy.com/"
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_expels_aol_7
|
12
|
+
request = create_request
|
13
|
+
response = request.get("/", "HTTP_USER_AGENT" => USER_AGENTS[:aol_7])
|
14
|
+
assert_equal 302, response.status
|
15
|
+
assert_equal response.location, "http://browsehappy.com/"
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_expels_aol_8
|
19
|
+
request = create_request
|
20
|
+
response = request.get("/", "HTTP_USER_AGENT" => USER_AGENTS[:aol_8])
|
21
|
+
assert_equal 302, response.status
|
22
|
+
assert_equal response.location, "http://browsehappy.com/"
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_expels_aol_9
|
26
|
+
request = create_request
|
27
|
+
response = request.get("/", "HTTP_USER_AGENT" => USER_AGENTS[:aol_9])
|
28
|
+
assert_equal 302, response.status
|
29
|
+
assert_equal response.location, "http://browsehappy.com/"
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_expels_aol_9_1
|
33
|
+
request = create_request
|
34
|
+
response = request.get("/", "HTTP_USER_AGENT" => USER_AGENTS[:aol_9_1])
|
35
|
+
assert_equal 302, response.status
|
36
|
+
assert_equal response.location, "http://browsehappy.com/"
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_expels_aol_9_5
|
40
|
+
request = create_request
|
41
|
+
response = request.get("/", "HTTP_USER_AGENT" => USER_AGENTS[:aol_9_5])
|
42
|
+
assert_equal 302, response.status
|
43
|
+
assert_equal response.location, "http://browsehappy.com/"
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_expels_aol_9_6
|
47
|
+
request = create_request
|
48
|
+
response = request.get("/", "HTTP_USER_AGENT" => USER_AGENTS[:aol_9_6])
|
49
|
+
assert_equal 302, response.status
|
50
|
+
assert_equal response.location, "http://browsehappy.com/"
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
class Rack::Bouncer::ChromeTest < MiniTest::Unit::TestCase
|
4
|
+
def test_allows_chrome_16
|
5
|
+
request = create_request
|
6
|
+
response = request.get("/", "HTTP_USER_AGENT" => USER_AGENTS[:chrome_16])
|
7
|
+
assert_equal 200, response.status
|
8
|
+
assert_equal "Hi Internets!", response.body
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,94 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
class Rack::Bouncer::FirefoxTest < MiniTest::Unit::TestCase
|
4
|
+
def test_expels_firefox_3_6
|
5
|
+
request = create_request
|
6
|
+
response = request.get("/", "HTTP_USER_AGENT" => USER_AGENTS[:firefox_3_6])
|
7
|
+
assert_equal 302, response.status
|
8
|
+
assert_equal response.location, "http://browsehappy.com/"
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_allows_firefox_3_6_when_minimum
|
12
|
+
request = create_request(:minimum_firefox => 3.6)
|
13
|
+
response = request.get("/", "HTTP_USER_AGENT" => USER_AGENTS[:firefox_3_6])
|
14
|
+
assert_equal 200, response.status
|
15
|
+
assert_equal "Hi Internets!", response.body
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_expels_firefox_3_6_2
|
19
|
+
request = create_request
|
20
|
+
response = request.get("/", "HTTP_USER_AGENT" => USER_AGENTS[:firefox_3_6_2])
|
21
|
+
assert_equal 302, response.status
|
22
|
+
assert_equal response.location, "http://browsehappy.com/"
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_expels_firefox_3_6_b5
|
26
|
+
request = create_request
|
27
|
+
response = request.get("/", "HTTP_USER_AGENT" => USER_AGENTS[:firefox_3_6_b5])
|
28
|
+
assert_equal 302, response.status
|
29
|
+
assert_equal response.location, "http://browsehappy.com/"
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_expels_firefox_3_6_22
|
33
|
+
request = create_request
|
34
|
+
response = request.get("/", "HTTP_USER_AGENT" => USER_AGENTS[:firefox_3_6_22])
|
35
|
+
assert_equal 302, response.status
|
36
|
+
assert_equal response.location, "http://browsehappy.com/"
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_expels_firefox_3_8
|
40
|
+
request = create_request
|
41
|
+
response = request.get("/", "HTTP_USER_AGENT" => USER_AGENTS[:firefox_3_8])
|
42
|
+
assert_equal 302, response.status
|
43
|
+
assert_equal response.location, "http://browsehappy.com/"
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_allows_firefox_4
|
47
|
+
request = create_request
|
48
|
+
response = request.get("/", "HTTP_USER_AGENT" => USER_AGENTS[:firefox_4])
|
49
|
+
assert_equal 200, response.status
|
50
|
+
assert_equal "Hi Internets!", response.body
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_allows_firefox_4_0_1
|
54
|
+
request = create_request
|
55
|
+
response = request.get("/", "HTTP_USER_AGENT" => USER_AGENTS[:firefox_4_0_1])
|
56
|
+
assert_equal 200, response.status
|
57
|
+
assert_equal "Hi Internets!", response.body
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_allows_firefox_5
|
61
|
+
request = create_request
|
62
|
+
response = request.get("/", "HTTP_USER_AGENT" => USER_AGENTS[:firefox_5])
|
63
|
+
assert_equal 200, response.status
|
64
|
+
assert_equal "Hi Internets!", response.body
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_allows_firefox_6
|
68
|
+
request = create_request
|
69
|
+
response = request.get("/", "HTTP_USER_AGENT" => USER_AGENTS[:firefox_6])
|
70
|
+
assert_equal 200, response.status
|
71
|
+
assert_equal "Hi Internets!", response.body
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_allows_firefox_9
|
75
|
+
request = create_request
|
76
|
+
response = request.get("/", "HTTP_USER_AGENT" => USER_AGENTS[:firefox_9])
|
77
|
+
assert_equal 200, response.status
|
78
|
+
assert_equal "Hi Internets!", response.body
|
79
|
+
end
|
80
|
+
|
81
|
+
def test_allows_firefox_9_0_a2
|
82
|
+
request = create_request
|
83
|
+
response = request.get("/", "HTTP_USER_AGENT" => USER_AGENTS[:firefox_9_0_a2])
|
84
|
+
assert_equal 200, response.status
|
85
|
+
assert_equal "Hi Internets!", response.body
|
86
|
+
end
|
87
|
+
|
88
|
+
def test_allows_firefox_10_0_a4
|
89
|
+
request = create_request
|
90
|
+
response = request.get("/", "HTTP_USER_AGENT" => USER_AGENTS[:firefox_10_0_a4])
|
91
|
+
assert_equal 200, response.status
|
92
|
+
assert_equal "Hi Internets!", response.body
|
93
|
+
end
|
94
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
class Rack::Bouncer::IETest < MiniTest::Unit::TestCase
|
4
|
+
def test_allows_ie_if_no_version_available
|
5
|
+
request = create_request
|
6
|
+
response = request.get("/", "HTTP_USER_AGENT" => USER_AGENTS[:ie_no_version])
|
7
|
+
assert_equal 200, response.status
|
8
|
+
assert_equal "Hi Internets!", response.body
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_expels_ie_6_and_redirects_to_default
|
12
|
+
request = create_request
|
13
|
+
response = request.get("/", "HTTP_USER_AGENT" => USER_AGENTS[:ie_6])
|
14
|
+
assert_equal 302, response.status
|
15
|
+
assert_equal response.location, "http://browsehappy.com/"
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_expels_ie_6_and_redirects_to_internal_url
|
19
|
+
request = create_request(:redirect => "/foo")
|
20
|
+
response = request.get("/", "HTTP_USER_AGENT" => USER_AGENTS[:ie_6])
|
21
|
+
assert_equal 302, response.status
|
22
|
+
assert_equal response.location, "/foo"
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_expels_ie_6_and_redirects_to_external_url
|
26
|
+
request = create_request(:redirect => "http://getfirefox.com")
|
27
|
+
response = request.get("/", "HTTP_USER_AGENT" => USER_AGENTS[:ie_6])
|
28
|
+
assert_equal 302, response.status
|
29
|
+
assert_equal response.location, "http://getfirefox.com"
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_allows_ie_6_when_minimum
|
33
|
+
request = create_request(:minimum_ie => 6.0)
|
34
|
+
response = request.get("/", "HTTP_USER_AGENT" => USER_AGENTS[:ie_6])
|
35
|
+
assert_equal 200, response.status
|
36
|
+
assert_equal "Hi Internets!", response.body
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_expels_ie_7
|
40
|
+
request = create_request
|
41
|
+
response = request.get("/", "HTTP_USER_AGENT" => USER_AGENTS[:ie_7])
|
42
|
+
assert_equal 302, response.status
|
43
|
+
assert_equal response.location, "http://browsehappy.com/"
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_allows_ie_7_when_minimum
|
47
|
+
request = create_request(:minimum_ie => 7.0)
|
48
|
+
response = request.get("/", "HTTP_USER_AGENT" => USER_AGENTS[:ie_7])
|
49
|
+
assert_equal 200, response.status
|
50
|
+
assert_equal "Hi Internets!", response.body
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_allows_ie_8
|
54
|
+
request = create_request
|
55
|
+
response = request.get("/", "HTTP_USER_AGENT" => USER_AGENTS[:ie_8])
|
56
|
+
assert_equal 200, response.status
|
57
|
+
assert_equal "Hi Internets!", response.body
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_allows_ie_8_when_minimum
|
61
|
+
request = create_request(:minimum_ie => 8.0)
|
62
|
+
response = request.get("/", "HTTP_USER_AGENT" => USER_AGENTS[:ie_8])
|
63
|
+
assert_equal 200, response.status
|
64
|
+
assert_equal "Hi Internets!", response.body
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_allows_ie_9
|
68
|
+
request = create_request
|
69
|
+
response = request.get("/", "HTTP_USER_AGENT" => USER_AGENTS[:ie_9])
|
70
|
+
assert_equal 200, response.status
|
71
|
+
assert_equal "Hi Internets!", response.body
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
class Rack::Bouncer::SafariTest < MiniTest::Unit::TestCase
|
4
|
+
def test_allows_safari_5_0
|
5
|
+
request = create_request
|
6
|
+
response = request.get("/", "HTTP_USER_AGENT" => USER_AGENTS[:safari_5_0])
|
7
|
+
assert_equal 200, response.status
|
8
|
+
assert_equal "Hi Internets!", response.body
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_allows_safari_5_1
|
12
|
+
request = create_request
|
13
|
+
response = request.get("/", "HTTP_USER_AGENT" => USER_AGENTS[:safari_5_1])
|
14
|
+
assert_equal 200, response.status
|
15
|
+
assert_equal "Hi Internets!", response.body
|
16
|
+
end
|
17
|
+
end
|
@@ -1,24 +1,9 @@
|
|
1
1
|
# encoding: UTF-8
|
2
|
-
require "
|
3
|
-
require "minitest/autorun"
|
4
|
-
require "rack/mock"
|
5
|
-
|
6
|
-
require "rack-bouncer"
|
7
|
-
|
8
|
-
class TestApp
|
9
|
-
def call(env)
|
10
|
-
[200, {}, "Hi Internets!"]
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
def create_request(options = {})
|
15
|
-
Rack::MockRequest.new(Rack::Bouncer.new(TestApp.new, options))
|
16
|
-
end
|
17
|
-
|
18
|
-
class Rack::Bouncer::Test < MiniTest::Unit::TestCase
|
2
|
+
require "test_helper"
|
19
3
|
|
4
|
+
class Rack::BouncerTest < MiniTest::Unit::TestCase
|
20
5
|
def test_version
|
21
|
-
assert_equal "1.3.
|
6
|
+
assert_equal "1.3.1", Rack::Bouncer::VERSION
|
22
7
|
end
|
23
8
|
|
24
9
|
def test_default_safe_paths
|
@@ -45,254 +30,9 @@ class Rack::Bouncer::Test < MiniTest::Unit::TestCase
|
|
45
30
|
assert_equal "Hi Internets!", response.body
|
46
31
|
end
|
47
32
|
|
48
|
-
|
49
|
-
#################################################################################################
|
50
|
-
|
51
|
-
def test_allows_if_not_ie
|
52
|
-
request = create_request
|
53
|
-
response = request.get("/", {"HTTP_USER_AGENT" => "Mozilla/5.0"})
|
54
|
-
assert_equal "Hi Internets!", response.body
|
55
|
-
end
|
56
|
-
|
57
|
-
def test_allows_ie_if_no_version_available
|
58
|
-
request = create_request
|
59
|
-
response = request.get("/", {"HTTP_USER_AGENT" => "Mozilla/4.0 (compatible; MSIE l4me; Windows XP)"})
|
60
|
-
assert_equal 200, response.status
|
61
|
-
assert_equal "Hi Internets!", response.body
|
62
|
-
end
|
63
|
-
|
64
|
-
def test_expels_ie_6_and_redirects_to_default
|
65
|
-
request = create_request
|
66
|
-
response = request.get("/", {"HTTP_USER_AGENT" => "Mozilla/4.0 (MSIE 6.0; Windows NT 5.1)" })
|
67
|
-
assert_equal 302, response.status
|
68
|
-
assert_equal response.location, "http://browsehappy.com/"
|
69
|
-
end
|
70
|
-
|
71
|
-
def test_expels_ie_6_and_redirects_to_internal_url
|
72
|
-
request = create_request(:redirect => "/foo")
|
73
|
-
response = request.get("/", {"HTTP_USER_AGENT" => "Mozilla/4.0 (MSIE 6.0; Windows NT 5.1)" })
|
74
|
-
assert_equal 302, response.status
|
75
|
-
assert_equal response.location, "/foo"
|
76
|
-
end
|
77
|
-
|
78
|
-
def test_expels_ie_6_and_redirects_to_external_url
|
79
|
-
request = create_request(:redirect => "http://getfirefox.com")
|
80
|
-
response = request.get("/", {"HTTP_USER_AGENT" => "Mozilla/4.0 (MSIE 6.0; Windows NT 5.1)" })
|
81
|
-
assert_equal 302, response.status
|
82
|
-
assert_equal response.location, "http://getfirefox.com"
|
83
|
-
end
|
84
|
-
|
85
|
-
def test_allows_ie_6_when_minimum
|
86
|
-
request = create_request(:minimum_ie => 6.0)
|
87
|
-
response = request.get("/", {"HTTP_USER_AGENT" => "Mozilla/4.0 (MSIE 6.0; Windows NT 5.1)" })
|
88
|
-
assert_equal 200, response.status
|
89
|
-
assert_equal "Hi Internets!", response.body
|
90
|
-
end
|
91
|
-
|
92
|
-
def test_expels_ie_7
|
93
|
-
request = create_request
|
94
|
-
response = request.get("/", {"HTTP_USER_AGENT" => "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)" })
|
95
|
-
assert_equal 302, response.status
|
96
|
-
assert_equal response.location, "http://browsehappy.com/"
|
97
|
-
end
|
98
|
-
|
99
|
-
def test_allows_ie_7_when_minimum
|
100
|
-
request = create_request(:minimum_ie => 7.0)
|
101
|
-
response = request.get("/", {"HTTP_USER_AGENT" => "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)" })
|
102
|
-
assert_equal 200, response.status
|
103
|
-
assert_equal "Hi Internets!", response.body
|
104
|
-
end
|
105
|
-
|
106
|
-
def test_allows_ie_8
|
107
|
-
request = create_request
|
108
|
-
response = request.get("/", {"HTTP_USER_AGENT" => "User-Agent:Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)" })
|
109
|
-
assert_equal 200, response.status
|
110
|
-
assert_equal "Hi Internets!", response.body
|
111
|
-
end
|
112
|
-
|
113
|
-
def test_allows_ie_8_when_minimum
|
114
|
-
request = create_request(:minimum_ie => 8.0)
|
115
|
-
response = request.get("/", {"HTTP_USER_AGENT" => "User-Agent:Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)" })
|
116
|
-
assert_equal 200, response.status
|
117
|
-
assert_equal "Hi Internets!", response.body
|
118
|
-
end
|
119
|
-
|
120
|
-
def test_allows_ie_9
|
121
|
-
request = create_request
|
122
|
-
response = request.get("/", {"HTTP_USER_AGENT" => "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;" })
|
123
|
-
assert_equal 200, response.status
|
124
|
-
assert_equal "Hi Internets!", response.body
|
125
|
-
end
|
126
|
-
|
127
|
-
# AOL
|
128
|
-
#################################################################################################
|
129
|
-
|
130
|
-
def test_expels_aol_6
|
131
|
-
request = create_request
|
132
|
-
response = request.get("/", {"HTTP_USER_AGENT" => "Mozilla/4.0 (compatible; MSIE 5.5; AOL 6.0; Windows 98)" })
|
133
|
-
assert_equal 302, response.status
|
134
|
-
assert_equal response.location, "http://browsehappy.com/"
|
135
|
-
end
|
136
|
-
|
137
|
-
def test_expels_aol_7
|
138
|
-
request = create_request
|
139
|
-
response = request.get("/", {"HTTP_USER_AGENT" => "Mozilla/4.0 (compatible; MSIE 7.0; AOL 7.0; Windows NT 5.1)" })
|
140
|
-
assert_equal 302, response.status
|
141
|
-
assert_equal response.location, "http://browsehappy.com/"
|
142
|
-
end
|
143
|
-
|
144
|
-
def test_expels_aol_8
|
145
|
-
request = create_request
|
146
|
-
response = request.get("/", {"HTTP_USER_AGENT" => "Mozilla/4.0 (compatible; MSIE 7.0; AOL 8.0; Windows NT 5.1)" })
|
147
|
-
assert_equal 302, response.status
|
148
|
-
assert_equal response.location, "http://browsehappy.com/"
|
149
|
-
end
|
150
|
-
|
151
|
-
def test_expels_aol_9
|
152
|
-
request = create_request
|
153
|
-
response = request.get("/", {"HTTP_USER_AGENT" => "Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.0; Windows NT 5.1)" })
|
154
|
-
assert_equal 302, response.status
|
155
|
-
assert_equal response.location, "http://browsehappy.com/"
|
156
|
-
end
|
157
|
-
|
158
|
-
def test_expels_aol_9_1
|
159
|
-
request = create_request
|
160
|
-
response = request.get("/", {"HTTP_USER_AGENT" => "Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.1; AOLBuild 4334.5000; Windows NT 5.1; Trident/4.0)" })
|
161
|
-
assert_equal 302, response.status
|
162
|
-
assert_equal response.location, "http://browsehappy.com/"
|
163
|
-
end
|
164
|
-
|
165
|
-
def test_expels_aol_9_5
|
166
|
-
request = create_request
|
167
|
-
response = request.get("/", {"HTTP_USER_AGENT" => "Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.5; AOLBuild 4337.43; Windows NT 5.1; Trident/4.0)" })
|
168
|
-
assert_equal 302, response.status
|
169
|
-
assert_equal response.location, "http://browsehappy.com/"
|
170
|
-
end
|
171
|
-
|
172
|
-
def test_expels_aol_9_6
|
173
|
-
request = create_request
|
174
|
-
response = request.get("/", {"HTTP_USER_AGENT" => "Mozilla/4.0 (compatible; MSIE 8.0; AOL 9.6; AOLBuild 4340.5004; Windows NT 5.1; Trident/4.0)" })
|
175
|
-
assert_equal 302, response.status
|
176
|
-
assert_equal response.location, "http://browsehappy.com/"
|
177
|
-
end
|
178
|
-
|
179
|
-
# Firefox
|
180
|
-
#################################################################################################
|
181
|
-
|
182
|
-
def test_expels_firefox_3_6
|
183
|
-
request = create_request
|
184
|
-
response = request.get("/", {"HTTP_USER_AGENT" => "Mozilla/5.0(Windows; U; Windows NT 5.2; rv:1.9.2) Gecko/20100101 Firefox/3.6" })
|
185
|
-
assert_equal 302, response.status
|
186
|
-
assert_equal response.location, "http://browsehappy.com/"
|
187
|
-
end
|
188
|
-
|
189
|
-
def test_allows_firefox_3_6_when_minimum
|
190
|
-
request = create_request(:minimum_firefox => 3.6)
|
191
|
-
response = request.get("/", {"HTTP_USER_AGENT" => "Mozilla/5.0(Windows; U; Windows NT 5.2; rv:1.9.2) Gecko/20100101 Firefox/3.6" })
|
192
|
-
assert_equal 200, response.status
|
193
|
-
assert_equal "Hi Internets!", response.body
|
194
|
-
end
|
195
|
-
|
196
|
-
def test_expels_firefox_3_6_2
|
197
|
-
request = create_request
|
198
|
-
response = request.get("/", {"HTTP_USER_AGENT" => "Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2" })
|
199
|
-
assert_equal 302, response.status
|
200
|
-
assert_equal response.location, "http://browsehappy.com/"
|
201
|
-
end
|
202
|
-
|
203
|
-
def test_expels_firefox_3_6_b5
|
204
|
-
request = create_request
|
205
|
-
response = request.get("/", {"HTTP_USER_AGENT" => "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2b5) Gecko/20091204 Firefox/3.6b5" })
|
206
|
-
assert_equal 302, response.status
|
207
|
-
assert_equal response.location, "http://browsehappy.com/"
|
208
|
-
end
|
209
|
-
|
210
|
-
def test_expels_firefox_3_6_22
|
211
|
-
request = create_request
|
212
|
-
response = request.get("/", {"HTTP_USER_AGENT" => "Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10.4; en-US; rv:1.9.2.22) Gecko/20110902 Firefox/3.6.22" })
|
213
|
-
assert_equal 302, response.status
|
214
|
-
assert_equal response.location, "http://browsehappy.com/"
|
215
|
-
end
|
216
|
-
|
217
|
-
def test_expels_firefox_3_8
|
218
|
-
request = create_request
|
219
|
-
response = request.get("/", {"HTTP_USER_AGENT" => "Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.0.2) Gecko/20121223 Ubuntu/9.25 (jaunty) Firefox/3.8" })
|
220
|
-
assert_equal 302, response.status
|
221
|
-
assert_equal response.location, "http://browsehappy.com/"
|
222
|
-
end
|
223
|
-
|
224
|
-
def test_allows_firefox_4
|
225
|
-
request = create_request
|
226
|
-
response = request.get("/", {"HTTP_USER_AGENT" => "Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0" })
|
227
|
-
assert_equal 200, response.status
|
228
|
-
assert_equal "Hi Internets!", response.body
|
229
|
-
end
|
230
|
-
|
231
|
-
def test_allows_firefox_4_0_1
|
232
|
-
request = create_request
|
233
|
-
response = request.get("/", {"HTTP_USER_AGENT" => "Mozilla/5.0 (X11; Linux i686; rv:2.0.1) Gecko/20110518 Firefox/4.0.1" })
|
234
|
-
assert_equal 200, response.status
|
235
|
-
assert_equal "Hi Internets!", response.body
|
236
|
-
end
|
237
|
-
|
238
|
-
def test_allows_firefox_5
|
33
|
+
def test_allows_if_mozilla_non_specific
|
239
34
|
request = create_request
|
240
|
-
response = request.get("/",
|
241
|
-
assert_equal 200, response.status
|
242
|
-
assert_equal "Hi Internets!", response.body
|
243
|
-
end
|
244
|
-
|
245
|
-
def test_allows_firefox_6
|
246
|
-
request = create_request
|
247
|
-
response = request.get("/", {"HTTP_USER_AGENT" => "Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20110814 Firefox/6.0" })
|
248
|
-
assert_equal 200, response.status
|
249
|
-
assert_equal "Hi Internets!", response.body
|
250
|
-
end
|
251
|
-
|
252
|
-
def test_allows_firefox_9
|
253
|
-
request = create_request
|
254
|
-
response = request.get("/", {"HTTP_USER_AGENT" => "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0) Gecko/20100101 Firefox/9.0" })
|
255
|
-
assert_equal 200, response.status
|
256
|
-
assert_equal "Hi Internets!", response.body
|
257
|
-
end
|
258
|
-
|
259
|
-
def test_allows_firefox_9_0_a2
|
260
|
-
request = create_request
|
261
|
-
response = request.get("/", {"HTTP_USER_AGENT" => "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0a2) Gecko/20111101 Firefox/9.0a2" })
|
262
|
-
assert_equal 200, response.status
|
263
|
-
assert_equal "Hi Internets!", response.body
|
264
|
-
end
|
265
|
-
|
266
|
-
def test_allows_firefox_10_0_a4
|
267
|
-
request = create_request
|
268
|
-
response = request.get("/", {"HTTP_USER_AGENT" => "Mozilla/6.0 (Macintosh; I; Intel Mac OS X 11_7_9; de-LI; rv:1.9b4) Gecko/2012010317 Firefox/10.0a4" })
|
269
|
-
assert_equal 200, response.status
|
270
|
-
assert_equal "Hi Internets!", response.body
|
271
|
-
end
|
272
|
-
|
273
|
-
# Safari
|
274
|
-
#################################################################################################
|
275
|
-
|
276
|
-
def test_allows_safari_5_0
|
277
|
-
request = create_request
|
278
|
-
response = request.get("/", {"HTTP_USER_AGENT" => "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0 Safari/533.16" })
|
279
|
-
assert_equal 200, response.status
|
280
|
-
assert_equal "Hi Internets!", response.body
|
281
|
-
end
|
282
|
-
|
283
|
-
def test_allows_safari_5_1
|
284
|
-
request = create_request
|
285
|
-
response = request.get("/", {"HTTP_USER_AGENT" => "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.52.7 (KHTML, like Gecko) Version/5.1 Safari/534.52.7" })
|
286
|
-
assert_equal 200, response.status
|
287
|
-
assert_equal "Hi Internets!", response.body
|
288
|
-
end
|
289
|
-
|
290
|
-
# Chrome
|
291
|
-
#################################################################################################
|
292
|
-
|
293
|
-
def test_allows_chrome_16
|
294
|
-
request = create_request
|
295
|
-
response = request.get("/", {"HTTP_USER_AGENT" => "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.77 Safari/535.7" })
|
35
|
+
response = request.get("/", "HTTP_USER_AGENT" => USER_AGENTS[:mozilla_non_specific])
|
296
36
|
assert_equal 200, response.status
|
297
37
|
assert_equal "Hi Internets!", response.body
|
298
38
|
end
|
@@ -302,51 +42,50 @@ class Rack::Bouncer::Test < MiniTest::Unit::TestCase
|
|
302
42
|
|
303
43
|
def test_allows_redirect_path
|
304
44
|
request = create_request(:redirect => "/browser")
|
305
|
-
response = request.get("/browser",
|
45
|
+
response = request.get("/browser", "HTTP_USER_AGENT" => USER_AGENTS[:ie_6])
|
306
46
|
assert_equal 200, response.status
|
307
47
|
assert_equal "Hi Internets!", response.body
|
308
48
|
end
|
309
49
|
|
310
50
|
def test_expels_non_redirect_path
|
311
51
|
request = create_request(:redirect => "/browser")
|
312
|
-
response = request.get("/wrong",
|
52
|
+
response = request.get("/wrong", "HTTP_USER_AGENT" => USER_AGENTS[:ie_6])
|
313
53
|
assert_equal 302, response.status
|
314
54
|
assert_equal response.location, "/browser"
|
315
55
|
end
|
316
56
|
|
317
57
|
def test_allows_assets_path
|
318
58
|
request = create_request
|
319
|
-
response = request.get("/asset",
|
59
|
+
response = request.get("/asset", "HTTP_USER_AGENT" => USER_AGENTS[:ie_6])
|
320
60
|
assert_equal 200, response.status
|
321
61
|
assert_equal "Hi Internets!", response.body
|
322
62
|
end
|
323
63
|
|
324
64
|
def test_allows_images_path
|
325
65
|
request = create_request
|
326
|
-
response = request.get("/images",
|
66
|
+
response = request.get("/images", "HTTP_USER_AGENT" => USER_AGENTS[:ie_6])
|
327
67
|
assert_equal 200, response.status
|
328
68
|
assert_equal "Hi Internets!", response.body
|
329
69
|
end
|
330
70
|
|
331
71
|
def test_allows_stylesheets_path
|
332
72
|
request = create_request
|
333
|
-
response = request.get("/stylesheets",
|
73
|
+
response = request.get("/stylesheets", "HTTP_USER_AGENT" => USER_AGENTS[:ie_6])
|
334
74
|
assert_equal 200, response.status
|
335
75
|
assert_equal "Hi Internets!", response.body
|
336
76
|
end
|
337
77
|
|
338
78
|
def test_allows_javascripts_path
|
339
79
|
request = create_request
|
340
|
-
response = request.get("/javascripts",
|
80
|
+
response = request.get("/javascripts", "HTTP_USER_AGENT" => USER_AGENTS[:ie_6])
|
341
81
|
assert_equal 200, response.status
|
342
82
|
assert_equal "Hi Internets!", response.body
|
343
83
|
end
|
344
84
|
|
345
85
|
def test_allows_feedback_path
|
346
86
|
request = create_request
|
347
|
-
response = request.get("/feedback",
|
87
|
+
response = request.get("/feedback", "HTTP_USER_AGENT" => USER_AGENTS[:ie_6])
|
348
88
|
assert_equal 200, response.status
|
349
89
|
assert_equal "Hi Internets!", response.body
|
350
90
|
end
|
351
|
-
|
352
91
|
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
require "rubygems"
|
3
|
+
require "minitest/autorun"
|
4
|
+
require "rack/mock"
|
5
|
+
require "yaml"
|
6
|
+
|
7
|
+
require "rack-bouncer"
|
8
|
+
|
9
|
+
USER_AGENTS = YAML.load_file(File.expand_path("user_agents.yml", File.dirname(__FILE__)))
|
10
|
+
|
11
|
+
class TestApp
|
12
|
+
def call(env)
|
13
|
+
[200, {}, "Hi Internets!"]
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def create_request(options = {})
|
18
|
+
Rack::MockRequest.new(Rack::Bouncer.new(TestApp.new, options))
|
19
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
# AOL
|
4
|
+
###################################################################################################
|
5
|
+
|
6
|
+
:aol_6:
|
7
|
+
Mozilla/4.0 (compatible; MSIE 5.5; AOL 6.0; Windows 98)
|
8
|
+
:aol_7:
|
9
|
+
Mozilla/4.0 (compatible; MSIE 7.0; AOL 7.0; Windows NT 5.1)
|
10
|
+
:aol_8:
|
11
|
+
Mozilla/4.0 (compatible; MSIE 7.0; AOL 8.0; Windows NT 5.1)
|
12
|
+
:aol_9:
|
13
|
+
Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.0; Windows NT 5.1)
|
14
|
+
:aol_9_1:
|
15
|
+
Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.1; AOLBuild 4334.5000; Windows NT 5.1; Trident/4.0)
|
16
|
+
:aol_9_5:
|
17
|
+
Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.5; AOLBuild 4337.43; Windows NT 5.1; Trident/4.0)
|
18
|
+
:aol_9_6:
|
19
|
+
Mozilla/4.0 (compatible; MSIE 8.0; AOL 9.6; AOLBuild 4340.5004; Windows NT 5.1; Trident/4.0)
|
20
|
+
|
21
|
+
# Chrome
|
22
|
+
###################################################################################################
|
23
|
+
|
24
|
+
:chrome_16:
|
25
|
+
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.77 Safari/535.7
|
26
|
+
|
27
|
+
# Firefox
|
28
|
+
###################################################################################################
|
29
|
+
|
30
|
+
:firefox_3_6:
|
31
|
+
Mozilla/5.0(Windows; U; Windows NT 5.2; rv:1.9.2) Gecko/20100101 Firefox/3.6
|
32
|
+
:firefox_3_6_2:
|
33
|
+
Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2
|
34
|
+
:firefox_3_6_b5:
|
35
|
+
Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2b5) Gecko/20091204 Firefox/3.6b5
|
36
|
+
:firefox_3_6_22:
|
37
|
+
Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10.4; en-US; rv:1.9.2.22) Gecko/20110902 Firefox/3.6.22
|
38
|
+
:firefox_3_8:
|
39
|
+
Mozilla/5.0 (X11; U; Linux i686; rv:1.9.0.2) Gecko/20121223 Ubuntu/9.25 (jaunty) Firefox/3.8
|
40
|
+
:firefox_4:
|
41
|
+
Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0
|
42
|
+
:firefox_4_0_1:
|
43
|
+
Mozilla/5.0 (X11; Linux i686; rv:2.0.1) Gecko/20110518 Firefox/4.0.1
|
44
|
+
:firefox_5:
|
45
|
+
Mozilla/5.0 (Windows NT 5.1; U; rv:5.0) Gecko/20100101 Firefox/5.0
|
46
|
+
:firefox_6:
|
47
|
+
Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20110814 Firefox/6.0
|
48
|
+
:firefox_9:
|
49
|
+
Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0) Gecko/20100101 Firefox/9.0
|
50
|
+
:firefox_9_0_a2:
|
51
|
+
Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0a2) Gecko/20111101 Firefox/9.0a2
|
52
|
+
:firefox_10_0_a4:
|
53
|
+
Mozilla/6.0 (Macintosh; I; Intel Mac OS X 11_7_9; rv:1.9b4) Gecko/2012010317 Firefox/10.0a4
|
54
|
+
|
55
|
+
# Internet Explorer
|
56
|
+
###################################################################################################
|
57
|
+
|
58
|
+
:ie_no_version:
|
59
|
+
Mozilla/4.0 (compatible; MSIE l4me; Windows XP)
|
60
|
+
:ie_6:
|
61
|
+
Mozilla/4.0 (MSIE 6.0; Windows NT 5.1)
|
62
|
+
:ie_7:
|
63
|
+
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)
|
64
|
+
:ie_8:
|
65
|
+
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)
|
66
|
+
:ie_9:
|
67
|
+
Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)
|
68
|
+
|
69
|
+
# Mozilla
|
70
|
+
###################################################################################################
|
71
|
+
|
72
|
+
:mozilla_non_specific:
|
73
|
+
Mozilla/5.0
|
74
|
+
|
75
|
+
# Safari
|
76
|
+
###################################################################################################
|
77
|
+
|
78
|
+
:safari_5_0:
|
79
|
+
Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0 Safari/533.16
|
80
|
+
:safari_5_1:
|
81
|
+
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.52.7 (KHTML, like Gecko) Version/5.1 Safari/534.52.7
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rack-bouncer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 25
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 3
|
9
|
-
-
|
10
|
-
version: 1.3.
|
9
|
+
- 1
|
10
|
+
version: 1.3.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Julio Cesar Ody
|
@@ -18,7 +18,7 @@ autorequire:
|
|
18
18
|
bindir: bin
|
19
19
|
cert_chain: []
|
20
20
|
|
21
|
-
date: 2012-02-
|
21
|
+
date: 2012-02-09 00:00:00 -08:00
|
22
22
|
default_executable:
|
23
23
|
dependencies:
|
24
24
|
- !ruby/object:Gem::Dependency
|
@@ -71,7 +71,14 @@ files:
|
|
71
71
|
- lib/rack-bouncer.rb
|
72
72
|
- lib/rack/bouncer.rb
|
73
73
|
- rack-bouncer.gemspec
|
74
|
+
- test/lib/rack/bouncer/aol_test.rb
|
75
|
+
- test/lib/rack/bouncer/chrome_test.rb
|
76
|
+
- test/lib/rack/bouncer/firefox_test.rb
|
77
|
+
- test/lib/rack/bouncer/ie_test.rb
|
78
|
+
- test/lib/rack/bouncer/safari_test.rb
|
74
79
|
- test/lib/rack/bouncer_test.rb
|
80
|
+
- test/test_helper.rb
|
81
|
+
- test/user_agents.yml
|
75
82
|
has_rdoc: true
|
76
83
|
homepage: https://github.com/ryansobol/rack-bouncer
|
77
84
|
licenses: []
|