aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_controller/assertions.rb
diff options
context:
space:
mode:
authorRick Olson <technoweenie@gmail.com>2006-04-23 18:16:51 +0000
committerRick Olson <technoweenie@gmail.com>2006-04-23 18:16:51 +0000
commit3900b36896f4e199eabd768e2df0e7b81c8071ad (patch)
treeeed2deb53475093070405f8a58d11a4a83abfc6b /actionpack/lib/action_controller/assertions.rb
parent7bd6923c7f7f36fa1945a6a964f275cf692a722e (diff)
downloadrails-3900b36896f4e199eabd768e2df0e7b81c8071ad.tar.gz
rails-3900b36896f4e199eabd768e2df0e7b81c8071ad.tar.bz2
rails-3900b36896f4e199eabd768e2df0e7b81c8071ad.zip
Diff compared routing options. Allow #assert_recognizes to take a second arg as a hash to specify optional request method [Rick]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@4255 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'actionpack/lib/action_controller/assertions.rb')
-rw-r--r--actionpack/lib/action_controller/assertions.rb27
1 files changed, 22 insertions, 5 deletions
diff --git a/actionpack/lib/action_controller/assertions.rb b/actionpack/lib/action_controller/assertions.rb
index b2da11045b..978838c7e1 100644
--- a/actionpack/lib/action_controller/assertions.rb
+++ b/actionpack/lib/action_controller/assertions.rb
@@ -141,17 +141,33 @@ module Test #:nodoc:
end
# Asserts that the routing of the given path was handled correctly and that the parsed options match.
+ #
+ # assert_recognizes({:controller => 'items', :action => 'index'}, 'items')
+ #
+ # Pass a hash in the second argument to specify the request method. This is useful for routes
+ # requiring a specific method.
+ #
+ # assert_recognizes({:controller => 'items', :action => 'create'}, {:path => 'items', :method => :post})
+ #
def assert_recognizes(expected_options, path, extras={}, message=nil)
+ if path.is_a? Hash
+ request_method = path[:method]
+ path = path[:path]
+ else
+ request_method = nil
+ end
+
clean_backtrace do
ActionController::Routing::Routes.reload if ActionController::Routing::Routes.empty?
- request = recognized_request_for(path)
+ request = recognized_request_for(path, request_method)
expected_options = expected_options.clone
extras.each_key { |key| expected_options.delete key } unless extras.nil?
expected_options.stringify_keys!
- msg = build_message(message, "The recognized options <?> did not match <?>",
- request.path_parameters, expected_options)
+ routing_diff = expected_options.diff(request.path_parameters)
+ msg = build_message(message, "The recognized options <?> did not match <?>, difference: <?>",
+ request.path_parameters, expected_options, expected_options.diff(request.path_parameters))
assert_block(msg) { request.path_parameters == expected_options }
end
end
@@ -332,12 +348,13 @@ module Test #:nodoc:
end
private
- def recognized_request_for(path)
+ def recognized_request_for(path, request_method = nil)
path = "/#{path}" unless path.first == '/'
# Assume given controller
request = ActionController::TestRequest.new({}, {}, nil)
- request.path = path
+ request.env["REQUEST_METHOD"] = request_method.to_s.upcase if request_method
+ request.path = path
ActionController::Routing::Routes.recognize!(request)
request
end