Skip to content

Commit

Permalink
Merge pull request #18665 from sgrif/sg-test-route-all
Browse files Browse the repository at this point in the history
Allow `method: "all"` as a valid routing test option
  • Loading branch information
sgrif committed Feb 20, 2015
1 parent 477fae3 commit 7582376
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 8 deletions.
22 changes: 14 additions & 8 deletions actionpack/lib/action_dispatch/testing/assertions/routing.rb
Expand Up @@ -38,18 +38,24 @@ module RoutingAssertions
# # Test a custom route
# assert_recognizes({controller: 'items', action: 'show', id: '1'}, 'view/item1')
def assert_recognizes(expected_options, path, extras={}, msg=nil)
request = recognized_request_for(path, extras, msg)
if path.is_a?(Hash) && path[:method].to_s == "all"
[:get, :post, :put, :delete].each do |method|
assert_recognizes(expected_options, path.merge(method: method), extras, msg)
end
else
request = recognized_request_for(path, extras, msg)

expected_options = expected_options.clone
expected_options = expected_options.clone

expected_options.stringify_keys!
expected_options.stringify_keys!

msg = message(msg, "") {
sprintf("The recognized options <%s> did not match <%s>, difference:",
request.path_parameters, expected_options)
}
msg = message(msg, "") {
sprintf("The recognized options <%s> did not match <%s>, difference:",
request.path_parameters, expected_options)
}

assert_equal(expected_options, request.path_parameters, msg)
assert_equal(expected_options, request.path_parameters, msg)
end
end

# Asserts that the provided options can be used to generate the provided path. This is the inverse of +assert_recognizes+.
Expand Down
22 changes: 22 additions & 0 deletions actionpack/test/controller/resources_test.rb
Expand Up @@ -1047,6 +1047,28 @@ def test_default_singleton_restful_route_uses_get
end
end

def test_assert_routing_accepts_all_as_a_valid_method
with_routing do |set|
set.draw do
match "/products", to: "products#show", via: :all
end

assert_routing({ method: "all", path: "/products" }, { controller: "products", action: "show" })
end
end

def test_assert_routing_fails_when_not_all_http_methods_are_recognized
with_routing do |set|
set.draw do
match "/products", to: "products#show", via: [:get, :post, :put]
end

assert_raises(Minitest::Assertion) do
assert_routing({ method: "all", path: "/products" }, { controller: "products", action: "show" })
end
end
end

def test_singleton_resource_name_is_not_singularized
with_singleton_resources(:preferences) do
assert_singleton_restful_for :preferences
Expand Down

0 comments on commit 7582376

Please sign in to comment.