rack-test 0.6.3 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/{History.txt → History.md} +70 -58
- data/README.md +110 -0
- data/lib/rack/test.rb +12 -7
- data/lib/rack/test/cookie_jar.rb +17 -1
- data/lib/rack/test/uploaded_file.rb +12 -1
- data/lib/rack/test/utils.rb +19 -13
- data/lib/rack/test/version.rb +5 -0
- metadata +138 -59
- data/.document +0 -4
- data/.gitignore +0 -6
- data/Gemfile +0 -8
- data/Gemfile.lock +0 -41
- data/README.rdoc +0 -85
- data/Rakefile +0 -33
- data/Thorfile +0 -114
- data/rack-test.gemspec +0 -77
- data/spec/fixtures/bar.txt +0 -1
- data/spec/fixtures/config.ru +0 -3
- data/spec/fixtures/fake_app.rb +0 -143
- data/spec/fixtures/foo.txt +0 -1
- data/spec/rack/test/cookie_spec.rb +0 -219
- data/spec/rack/test/digest_auth_spec.rb +0 -46
- data/spec/rack/test/multipart_spec.rb +0 -145
- data/spec/rack/test/uploaded_file_spec.rb +0 -24
- data/spec/rack/test/utils_spec.rb +0 -193
- data/spec/rack/test_spec.rb +0 -550
- data/spec/spec_helper.rb +0 -69
- data/spec/support/matchers/body.rb +0 -9
- data/spec/support/matchers/challenge.rb +0 -11
@@ -26,10 +26,12 @@ module Rack
|
|
26
26
|
@content_type = content_type
|
27
27
|
@original_filename = ::File.basename(path)
|
28
28
|
|
29
|
-
@tempfile = Tempfile.new(@original_filename)
|
29
|
+
@tempfile = Tempfile.new([@original_filename, ::File.extname(path)])
|
30
30
|
@tempfile.set_encoding(Encoding::BINARY) if @tempfile.respond_to?(:set_encoding)
|
31
31
|
@tempfile.binmode if binary
|
32
32
|
|
33
|
+
ObjectSpace.define_finalizer(self, self.class.finalize(@tempfile))
|
34
|
+
|
33
35
|
FileUtils.copy_file(path, @tempfile.path)
|
34
36
|
end
|
35
37
|
|
@@ -47,6 +49,15 @@ module Rack
|
|
47
49
|
@tempfile.respond_to?(method_name, include_private) || super
|
48
50
|
end
|
49
51
|
|
52
|
+
def self.finalize(file)
|
53
|
+
proc { actually_finalize file }
|
54
|
+
end
|
55
|
+
|
56
|
+
def self.actually_finalize(file)
|
57
|
+
file.close
|
58
|
+
file.unlink
|
59
|
+
end
|
60
|
+
|
50
61
|
end
|
51
62
|
|
52
63
|
end
|
data/lib/rack/test/utils.rb
CHANGED
@@ -3,16 +3,21 @@ module Rack
|
|
3
3
|
|
4
4
|
module Utils # :nodoc:
|
5
5
|
include Rack::Utils
|
6
|
+
extend Rack::Utils
|
6
7
|
|
7
8
|
def build_nested_query(value, prefix = nil)
|
8
9
|
case value
|
9
10
|
when Array
|
10
|
-
value.
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
11
|
+
if value.empty?
|
12
|
+
"#{prefix}[]="
|
13
|
+
else
|
14
|
+
value.map do |v|
|
15
|
+
unless unescape(prefix) =~ /\[\]$/
|
16
|
+
prefix = "#{prefix}[]"
|
17
|
+
end
|
18
|
+
build_nested_query(v, "#{prefix}")
|
19
|
+
end.join("&")
|
20
|
+
end
|
16
21
|
when Hash
|
17
22
|
value.map do |k, v|
|
18
23
|
build_nested_query(v, prefix ? "#{prefix}[#{escape(k)}]" : escape(k))
|
@@ -23,16 +28,14 @@ module Rack
|
|
23
28
|
"#{prefix}=#{escape(value)}"
|
24
29
|
end
|
25
30
|
end
|
26
|
-
|
27
31
|
module_function :build_nested_query
|
28
32
|
|
29
|
-
def build_multipart(params, first = true)
|
33
|
+
def build_multipart(params, first = true, multipart = false)
|
30
34
|
if first
|
31
35
|
unless params.is_a?(Hash)
|
32
36
|
raise ArgumentError, "value must be a Hash"
|
33
37
|
end
|
34
38
|
|
35
|
-
multipart = false
|
36
39
|
query = lambda { |value|
|
37
40
|
case value
|
38
41
|
when Array
|
@@ -83,13 +86,13 @@ module Rack
|
|
83
86
|
flattened_params
|
84
87
|
end
|
85
88
|
end
|
86
|
-
|
87
89
|
module_function :build_multipart
|
88
90
|
|
89
|
-
|
91
|
+
private
|
90
92
|
def build_parts(parameters)
|
91
93
|
get_parts(parameters).join + "--#{MULTIPART_BOUNDARY}--\r"
|
92
94
|
end
|
95
|
+
module_function :build_parts
|
93
96
|
|
94
97
|
def get_parts(parameters)
|
95
98
|
parameters.map { |name, value|
|
@@ -115,13 +118,14 @@ module Rack
|
|
115
118
|
end
|
116
119
|
}
|
117
120
|
end
|
121
|
+
module_function :get_parts
|
118
122
|
|
119
123
|
def build_primitive_part(parameter_name, value)
|
120
124
|
unless value.is_a? Array
|
121
125
|
value = [value]
|
122
126
|
end
|
123
127
|
value.map do |v|
|
124
|
-
<<-EOF
|
128
|
+
<<-EOF
|
125
129
|
--#{MULTIPART_BOUNDARY}\r
|
126
130
|
Content-Disposition: form-data; name="#{parameter_name}"\r
|
127
131
|
\r
|
@@ -129,11 +133,12 @@ Content-Disposition: form-data; name="#{parameter_name}"\r
|
|
129
133
|
EOF
|
130
134
|
end.join
|
131
135
|
end
|
136
|
+
module_function :build_primitive_part
|
132
137
|
|
133
138
|
def build_file_part(parameter_name, uploaded_file)
|
134
139
|
::File.open(uploaded_file.path, "rb") do |physical_file|
|
135
140
|
physical_file.set_encoding(Encoding::BINARY) if physical_file.respond_to?(:set_encoding)
|
136
|
-
<<-EOF
|
141
|
+
<<-EOF
|
137
142
|
--#{MULTIPART_BOUNDARY}\r
|
138
143
|
Content-Disposition: form-data; name="#{parameter_name}"; filename="#{escape(uploaded_file.original_filename)}"\r
|
139
144
|
Content-Type: #{uploaded_file.content_type}\r
|
@@ -143,6 +148,7 @@ Content-Length: #{::File.stat(uploaded_file.path).size}\r
|
|
143
148
|
EOF
|
144
149
|
end
|
145
150
|
end
|
151
|
+
module_function :build_file_part
|
146
152
|
|
147
153
|
end
|
148
154
|
|
metadata
CHANGED
@@ -1,56 +1,158 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rack-test
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.7.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Bryan Helmkamp
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2017-07-10 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: rack
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - ">="
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '1.0'
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '3'
|
22
23
|
type: :runtime
|
23
24
|
prerelease: false
|
24
25
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
26
|
requirements:
|
27
|
-
- -
|
27
|
+
- - ">="
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: '1.0'
|
30
|
-
|
31
|
-
|
32
|
-
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '3'
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: rake
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '12.0'
|
40
|
+
type: :development
|
41
|
+
prerelease: false
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - "~>"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '12.0'
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: rspec
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - "~>"
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '3.6'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - "~>"
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '3.6'
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: sinatra
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '1.0'
|
68
|
+
- - "<"
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '3'
|
71
|
+
type: :development
|
72
|
+
prerelease: false
|
73
|
+
version_requirements: !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - ">="
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '1.0'
|
78
|
+
- - "<"
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '3'
|
81
|
+
- !ruby/object:Gem::Dependency
|
82
|
+
name: rdoc
|
83
|
+
requirement: !ruby/object:Gem::Requirement
|
84
|
+
requirements:
|
85
|
+
- - "~>"
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '5.1'
|
88
|
+
type: :development
|
89
|
+
prerelease: false
|
90
|
+
version_requirements: !ruby/object:Gem::Requirement
|
91
|
+
requirements:
|
92
|
+
- - "~>"
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '5.1'
|
95
|
+
- !ruby/object:Gem::Dependency
|
96
|
+
name: rubocop
|
97
|
+
requirement: !ruby/object:Gem::Requirement
|
98
|
+
requirements:
|
99
|
+
- - ">="
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0.49'
|
102
|
+
- - "<"
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '0.50'
|
105
|
+
type: :development
|
106
|
+
prerelease: false
|
107
|
+
version_requirements: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - ">="
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '0.49'
|
112
|
+
- - "<"
|
113
|
+
- !ruby/object:Gem::Version
|
114
|
+
version: '0.50'
|
115
|
+
- !ruby/object:Gem::Dependency
|
116
|
+
name: codeclimate-test-reporter
|
117
|
+
requirement: !ruby/object:Gem::Requirement
|
118
|
+
requirements:
|
119
|
+
- - "~>"
|
120
|
+
- !ruby/object:Gem::Version
|
121
|
+
version: '0.6'
|
122
|
+
type: :development
|
123
|
+
prerelease: false
|
124
|
+
version_requirements: !ruby/object:Gem::Requirement
|
125
|
+
requirements:
|
126
|
+
- - "~>"
|
127
|
+
- !ruby/object:Gem::Version
|
128
|
+
version: '0.6'
|
129
|
+
- !ruby/object:Gem::Dependency
|
130
|
+
name: thor
|
131
|
+
requirement: !ruby/object:Gem::Requirement
|
132
|
+
requirements:
|
133
|
+
- - "~>"
|
134
|
+
- !ruby/object:Gem::Version
|
135
|
+
version: '0.19'
|
136
|
+
type: :development
|
137
|
+
prerelease: false
|
138
|
+
version_requirements: !ruby/object:Gem::Requirement
|
139
|
+
requirements:
|
140
|
+
- - "~>"
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
version: '0.19'
|
143
|
+
description: |-
|
144
|
+
Rack::Test is a small, simple testing API for Rack apps. It can be used on its
|
33
145
|
own or as a reusable starting point for Web frameworks and testing libraries
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
request helpers feature.'
|
146
|
+
to build on. Most of its initial functionality is an extraction of Merb 1.0's
|
147
|
+
request helpers feature.
|
38
148
|
email: bryan@brynary.com
|
39
149
|
executables: []
|
40
150
|
extensions: []
|
41
|
-
extra_rdoc_files:
|
42
|
-
- README.rdoc
|
43
|
-
- MIT-LICENSE.txt
|
151
|
+
extra_rdoc_files: []
|
44
152
|
files:
|
45
|
-
- .
|
46
|
-
- .gitignore
|
47
|
-
- Gemfile
|
48
|
-
- Gemfile.lock
|
49
|
-
- History.txt
|
153
|
+
- History.md
|
50
154
|
- MIT-LICENSE.txt
|
51
|
-
- README.
|
52
|
-
- Rakefile
|
53
|
-
- Thorfile
|
155
|
+
- README.md
|
54
156
|
- lib/rack/mock_session.rb
|
55
157
|
- lib/rack/test.rb
|
56
158
|
- lib/rack/test/cookie_jar.rb
|
@@ -58,52 +160,29 @@ files:
|
|
58
160
|
- lib/rack/test/mock_digest_request.rb
|
59
161
|
- lib/rack/test/uploaded_file.rb
|
60
162
|
- lib/rack/test/utils.rb
|
61
|
-
- rack
|
62
|
-
|
63
|
-
|
64
|
-
-
|
65
|
-
|
66
|
-
- spec/rack/test/cookie_spec.rb
|
67
|
-
- spec/rack/test/digest_auth_spec.rb
|
68
|
-
- spec/rack/test/multipart_spec.rb
|
69
|
-
- spec/rack/test/uploaded_file_spec.rb
|
70
|
-
- spec/rack/test/utils_spec.rb
|
71
|
-
- spec/rack/test_spec.rb
|
72
|
-
- spec/spec_helper.rb
|
73
|
-
- spec/support/matchers/body.rb
|
74
|
-
- spec/support/matchers/challenge.rb
|
75
|
-
homepage: http://github.com/brynary/rack-test
|
76
|
-
licenses: []
|
163
|
+
- lib/rack/test/version.rb
|
164
|
+
homepage: http://github.com/rack-test/rack-test
|
165
|
+
licenses:
|
166
|
+
- MIT
|
167
|
+
metadata: {}
|
77
168
|
post_install_message:
|
78
169
|
rdoc_options: []
|
79
170
|
require_paths:
|
80
171
|
- lib
|
81
172
|
required_ruby_version: !ruby/object:Gem::Requirement
|
82
|
-
none: false
|
83
173
|
requirements:
|
84
|
-
- -
|
174
|
+
- - ">="
|
85
175
|
- !ruby/object:Gem::Version
|
86
176
|
version: '0'
|
87
177
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
88
|
-
none: false
|
89
178
|
requirements:
|
90
|
-
- -
|
179
|
+
- - ">="
|
91
180
|
- !ruby/object:Gem::Version
|
92
181
|
version: '0'
|
93
182
|
requirements: []
|
94
|
-
rubyforge_project:
|
95
|
-
rubygems_version:
|
183
|
+
rubyforge_project:
|
184
|
+
rubygems_version: 2.6.11
|
96
185
|
signing_key:
|
97
|
-
specification_version:
|
186
|
+
specification_version: 4
|
98
187
|
summary: Simple testing API built on Rack
|
99
|
-
test_files:
|
100
|
-
- spec/fixtures/fake_app.rb
|
101
|
-
- spec/rack/test/cookie_spec.rb
|
102
|
-
- spec/rack/test/digest_auth_spec.rb
|
103
|
-
- spec/rack/test/multipart_spec.rb
|
104
|
-
- spec/rack/test/uploaded_file_spec.rb
|
105
|
-
- spec/rack/test/utils_spec.rb
|
106
|
-
- spec/rack/test_spec.rb
|
107
|
-
- spec/spec_helper.rb
|
108
|
-
- spec/support/matchers/body.rb
|
109
|
-
- spec/support/matchers/challenge.rb
|
188
|
+
test_files: []
|
data/.document
DELETED
data/.gitignore
DELETED
data/Gemfile
DELETED
data/Gemfile.lock
DELETED
@@ -1,41 +0,0 @@
|
|
1
|
-
GEM
|
2
|
-
remote: https://rubygems.org/
|
3
|
-
specs:
|
4
|
-
codeclimate-test-reporter (0.3.0)
|
5
|
-
simplecov (>= 0.7.1, < 1.0.0)
|
6
|
-
diff-lcs (1.2.3)
|
7
|
-
docile (1.1.3)
|
8
|
-
multi_json (1.9.0)
|
9
|
-
rack (1.5.2)
|
10
|
-
rack-protection (1.5.0)
|
11
|
-
rack
|
12
|
-
rake (10.0.4)
|
13
|
-
rspec (2.13.0)
|
14
|
-
rspec-core (~> 2.13.0)
|
15
|
-
rspec-expectations (~> 2.13.0)
|
16
|
-
rspec-mocks (~> 2.13.0)
|
17
|
-
rspec-core (2.13.1)
|
18
|
-
rspec-expectations (2.13.0)
|
19
|
-
diff-lcs (>= 1.1.3, < 2.0)
|
20
|
-
rspec-mocks (2.13.1)
|
21
|
-
simplecov (0.8.2)
|
22
|
-
docile (~> 1.1.0)
|
23
|
-
multi_json
|
24
|
-
simplecov-html (~> 0.8.0)
|
25
|
-
simplecov-html (0.8.0)
|
26
|
-
sinatra (1.4.2)
|
27
|
-
rack (~> 1.5, >= 1.5.2)
|
28
|
-
rack-protection (~> 1.4)
|
29
|
-
tilt (~> 1.3, >= 1.3.4)
|
30
|
-
tilt (1.3.7)
|
31
|
-
|
32
|
-
PLATFORMS
|
33
|
-
java
|
34
|
-
ruby
|
35
|
-
|
36
|
-
DEPENDENCIES
|
37
|
-
codeclimate-test-reporter
|
38
|
-
rack
|
39
|
-
rake
|
40
|
-
rspec
|
41
|
-
sinatra
|
data/README.rdoc
DELETED
@@ -1,85 +0,0 @@
|
|
1
|
-
= Rack::Test {<img src="https://codeclimate.com/github/brynary/rack-test.png" />}[https://codeclimate.com/github/brynary/rack-test] {<img src="https://codeclimate.com/github/brynary/rack-test/coverage.png" />}[https://codeclimate.com/github/brynary/rack-test]
|
2
|
-
|
3
|
-
- Code: http://github.com/brynary/rack-test
|
4
|
-
|
5
|
-
== Description
|
6
|
-
|
7
|
-
Rack::Test is a small, simple testing API for Rack apps. It can be used on its
|
8
|
-
own or as a reusable starting point for Web frameworks and testing libraries
|
9
|
-
to build on. Most of its initial functionality is an extraction of Merb 1.0's
|
10
|
-
request helpers feature.
|
11
|
-
|
12
|
-
== Features
|
13
|
-
|
14
|
-
* Maintains a cookie jar across requests
|
15
|
-
* Easily follow redirects when desired
|
16
|
-
* Set request headers to be used by all subsequent requests
|
17
|
-
* Small footprint. Approximately 200 LOC
|
18
|
-
|
19
|
-
== Examples
|
20
|
-
|
21
|
-
require "rack/test"
|
22
|
-
|
23
|
-
class HomepageTest < Test::Unit::TestCase
|
24
|
-
include Rack::Test::Methods
|
25
|
-
|
26
|
-
def app
|
27
|
-
MyApp.new
|
28
|
-
end
|
29
|
-
|
30
|
-
def test_redirect_logged_in_users_to_dashboard
|
31
|
-
authorize "bryan", "secret"
|
32
|
-
get "/"
|
33
|
-
follow_redirect!
|
34
|
-
|
35
|
-
assert_equal "http://example.org/redirected", last_request.url
|
36
|
-
assert last_response.ok?
|
37
|
-
end
|
38
|
-
|
39
|
-
end
|
40
|
-
|
41
|
-
|
42
|
-
If you want to test one app in isolation, you just return that app as shown above. But if you want to test the entire app stack, including middlewares, cascades etc. you need to parse the app defined in config.ru.
|
43
|
-
|
44
|
-
OUTER_APP = Rack::Builder.parse_file('config.ru').first
|
45
|
-
|
46
|
-
class TestApp < Test::Unit::TestCase
|
47
|
-
include Rack::Test::Methods
|
48
|
-
|
49
|
-
def app
|
50
|
-
OUTER_APP
|
51
|
-
end
|
52
|
-
|
53
|
-
def test_root
|
54
|
-
get '/'
|
55
|
-
assert last_response.ok?
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
|
60
|
-
== Install
|
61
|
-
|
62
|
-
To install the latest release as a gem:
|
63
|
-
|
64
|
-
sudo gem install rack-test
|
65
|
-
|
66
|
-
Or via Bundler:
|
67
|
-
|
68
|
-
gem "rack-test", require: "rack/test"
|
69
|
-
|
70
|
-
== Authors
|
71
|
-
|
72
|
-
- Maintained by {Bryan Helmkamp}[mailto:bryan@brynary.com]
|
73
|
-
- Contributions from Simon Rozet, Pat Nakajima and others
|
74
|
-
- Much of the original code was extracted from Merb 1.0's request helper
|
75
|
-
|
76
|
-
== License
|
77
|
-
|
78
|
-
Copyright (c) 2008-2009 Bryan Helmkamp, Engine Yard Inc.
|
79
|
-
See MIT-LICENSE.txt in this directory.
|
80
|
-
|
81
|
-
== Releasing
|
82
|
-
|
83
|
-
* Ensure History.txt is up-to-date
|
84
|
-
* Bump VERSION in lib/rack/test.rb
|
85
|
-
* thor :release
|