mirror of
https://github.com/github/rails.git
synced 2026-01-09 14:48:01 -05:00
pass the extra params to the rack test environment so that routes with block constraints have access
This commit is contained in:
@@ -1,5 +1,13 @@
|
||||
## unreleased ##
|
||||
|
||||
* Fix the assert_recognizes test method so that it works when there are
|
||||
constraints on the querystring.
|
||||
|
||||
Issue/Pull Request #9368
|
||||
Backport #5219
|
||||
|
||||
*Brian Hahn*
|
||||
|
||||
* Fix to render partial by context(#11605).
|
||||
|
||||
*Kassio Borges*
|
||||
|
||||
@@ -611,9 +611,10 @@ module ActionDispatch
|
||||
def recognize_path(path, environment = {})
|
||||
method = (environment[:method] || "GET").to_s.upcase
|
||||
path = Journey::Router::Utils.normalize_path(path) unless path =~ %r{://}
|
||||
extras = environment[:extras] || {}
|
||||
|
||||
begin
|
||||
env = Rack::MockRequest.env_for(path, {:method => method})
|
||||
env = Rack::MockRequest.env_for(path, {:method => method, :params => extras})
|
||||
rescue URI::InvalidURIError => e
|
||||
raise ActionController::RoutingError, e.message
|
||||
end
|
||||
|
||||
@@ -39,7 +39,7 @@ module ActionDispatch
|
||||
# # Test a custom route
|
||||
# assert_recognizes({:controller => 'items', :action => 'show', :id => '1'}, 'view/item1')
|
||||
def assert_recognizes(expected_options, path, extras={}, message=nil)
|
||||
request = recognized_request_for(path)
|
||||
request = recognized_request_for(path, extras)
|
||||
|
||||
expected_options = expected_options.clone
|
||||
extras.each_key { |key| expected_options.delete key } unless extras.nil?
|
||||
@@ -179,7 +179,7 @@ module ActionDispatch
|
||||
|
||||
private
|
||||
# Recognizes the route for a given path.
|
||||
def recognized_request_for(path)
|
||||
def recognized_request_for(path, extras = {})
|
||||
if path.is_a?(Hash)
|
||||
method = path[:method]
|
||||
path = path[:path]
|
||||
@@ -207,7 +207,7 @@ module ActionDispatch
|
||||
|
||||
request.request_method = method if method
|
||||
|
||||
params = @routes.recognize_path(path, { :method => method })
|
||||
params = @routes.recognize_path(path, { :method => method, :extras => extras })
|
||||
request.path_parameters = params.with_indifferent_access
|
||||
|
||||
request
|
||||
|
||||
@@ -3,6 +3,7 @@ require 'controller/fake_controllers'
|
||||
|
||||
class SecureArticlesController < ArticlesController; end
|
||||
class BlockArticlesController < ArticlesController; end
|
||||
class QueryArticlesController < ArticlesController; end
|
||||
|
||||
class RoutingAssertionsTest < ActionController::TestCase
|
||||
|
||||
@@ -18,6 +19,10 @@ class RoutingAssertionsTest < ActionController::TestCase
|
||||
scope 'block', :constraints => lambda { |r| r.ssl? } do
|
||||
resources :articles, :controller => 'block_articles'
|
||||
end
|
||||
|
||||
scope 'query', :constraints => lambda { |r| r.params[:use_query] == 'true' } do
|
||||
resources :articles, :controller => 'query_articles'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -62,6 +67,13 @@ class RoutingAssertionsTest < ActionController::TestCase
|
||||
assert_recognizes({ :controller => 'block_articles', :action => 'index' }, 'https://test.host/block/articles')
|
||||
end
|
||||
|
||||
def test_assert_recognizes_with_query_constraint
|
||||
assert_raise(ActionController::RoutingError) do
|
||||
assert_recognizes({ :controller => 'query_articles', :action => 'index', :use_query => 'false' }, '/query/articles', { :use_query => 'false' })
|
||||
end
|
||||
assert_recognizes({ :controller => 'query_articles', :action => 'index', :use_query => 'true' }, '/query/articles', { :use_query => 'true' })
|
||||
end
|
||||
|
||||
def test_assert_routing
|
||||
assert_routing('/articles', :controller => 'articles', :action => 'index')
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user