提交 b28fc685 编写于 作者: A Andrew White

Ensure port is set when passed via the process method

上级 db06d128
## Rails 4.0.0 (unreleased) ##
* Fix a bug in integration tests where setting the port via a url passed to
the process method was ignored when constructing the request environment.
*Andrew White*
* Allow `:selected` to be set on `date_select` tag helper.
*Colin Burn-Murdoch*
......
......@@ -273,7 +273,7 @@ def process(method, path, parameters = nil, rack_env = nil)
if path =~ %r{://}
location = URI.parse(path)
https! URI::HTTPS === location if location.scheme
host! location.host if location.host
host! "#{location.host}:#{location.port}" if location.host
path = location.query ? "#{location.path}?#{location.query}" : location.path
end
......
......@@ -466,6 +466,58 @@ def test_generate_url_with_controller
assert_equal 'http://www.example.com/foo', url_for(:controller => "foo")
end
def test_port_via_host!
with_test_route_set do
host! 'www.example.com:8080'
get '/get'
assert_equal 8080, request.port
end
end
def test_port_via_process
with_test_route_set do
get 'http://www.example.com:8080/get'
assert_equal 8080, request.port
end
end
def test_https_and_port_via_host_and_https!
with_test_route_set do
host! 'www.example.com'
https! true
get '/get'
assert_equal 443, request.port
assert_equal true, request.ssl?
host! 'www.example.com:443'
https! true
get '/get'
assert_equal 443, request.port
assert_equal true, request.ssl?
host! 'www.example.com:8443'
https! true
get '/get'
assert_equal 8443, request.port
assert_equal true, request.ssl?
end
end
def test_https_and_port_via_process
with_test_route_set do
get 'https://www.example.com/get'
assert_equal 443, request.port
assert_equal true, request.ssl?
get 'https://www.example.com:8443/get'
assert_equal 8443, request.port
assert_equal true, request.ssl?
end
end
private
def with_test_route_set
with_routing do |set|
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册