Skip to content

Commit

Permalink
Support :mulitpart env key to env_for to force multipart input
Browse files Browse the repository at this point in the history
  • Loading branch information
jeremyevans committed May 27, 2022
1 parent cf9d2e0 commit cf7b042
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 1 deletion.
3 changes: 2 additions & 1 deletion lib/rack/test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -290,6 +290,7 @@ def env_for(uri, env)

params = env.delete(:params)
query_array = [uri.query]
multipart = env.delete(:multipart)

if env['REQUEST_METHOD'] == 'GET'
# Treat params as query params
Expand All @@ -301,7 +302,7 @@ def env_for(uri, env)
params ||= {}

if params.is_a?(Hash)
if data = build_multipart(params)
if data = build_multipart(params, false, multipart)
env[:input] = data
env['CONTENT_LENGTH'] ||= data.length.to_s
env['CONTENT_TYPE'] = "#{multipart_content_type(env)}; boundary=#{MULTIPART_BOUNDARY}"
Expand Down
14 changes: 14 additions & 0 deletions spec/rack/test_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,20 @@
last_request.POST['foo'].must_equal 'bar'
end

it 'supports :multipart when using :params for POST' do
request '/', method: :post, params: { 'foo' => 'bar' }
last_request.POST['foo'].must_equal 'bar'
last_request.env['rack.input'].rewind
last_request.env['rack.input'].read.must_equal 'foo=bar'
end

it 'supports :multipart when using :params for POST' do
request '/', method: :post, params: { 'foo' => 'bar' }, multipart: true
last_request.POST['foo'].must_equal 'bar'
last_request.env['rack.input'].rewind
last_request.env['rack.input'].read.must_include 'content-disposition: form-data; name="foo"'
end

it 'supports sending :query_params for POST' do
request '/', method: :post, query_params: { 'foo' => 'bar' }
last_request.GET['foo'].must_equal 'bar'
Expand Down

0 comments on commit cf7b042

Please sign in to comment.