aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/test
diff options
context:
space:
mode:
authorJeremy Kemper <jeremy@bitsweat.net>2007-05-26 20:07:34 +0000
committerJeremy Kemper <jeremy@bitsweat.net>2007-05-26 20:07:34 +0000
commitdcaa074abf5691a933b9c55159cc7d98a02b3b2f (patch)
tree4d58fee286eaa957e141939dcbd898055cab2325 /actionpack/test
parent42ebf559cc6ed80fa3bf55ecc1dea7c9e593f45e (diff)
downloadrails-dcaa074abf5691a933b9c55159cc7d98a02b3b2f.tar.gz
rails-dcaa074abf5691a933b9c55159cc7d98a02b3b2f.tar.bz2
rails-dcaa074abf5691a933b9c55159cc7d98a02b3b2f.zip
Routing: respond with 405 Method Not Allowed status when the route path matches but the HTTP method does not. Closes #6953.
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@6862 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'actionpack/test')
-rw-r--r--actionpack/test/controller/rescue_test.rb26
-rw-r--r--actionpack/test/controller/resources_test.rb6
-rw-r--r--actionpack/test/controller/routing_test.rb22
3 files changed, 45 insertions, 9 deletions
diff --git a/actionpack/test/controller/rescue_test.rb b/actionpack/test/controller/rescue_test.rb
index 885ac0b8c0..100fee8a6e 100644
--- a/actionpack/test/controller/rescue_test.rb
+++ b/actionpack/test/controller/rescue_test.rb
@@ -7,6 +7,14 @@ class RescueController < ActionController::Base
render :text => 'already rendered'
raise "don't panic!"
end
+
+ def method_not_allowed
+ raise ActionController::MethodNotAllowed.new(:get, :head, :put)
+ end
+
+ def not_implemented
+ raise ActionController::NotImplemented.new(:get, :put)
+ end
end
@@ -144,6 +152,8 @@ class RescueTest < Test::Unit::TestCase
assert_equal :conflict, responses['ActiveRecord::StaleObjectError']
assert_equal :unprocessable_entity, responses['ActiveRecord::RecordInvalid']
assert_equal :unprocessable_entity, responses['ActiveRecord::RecordNotSaved']
+ assert_equal :method_not_allowed, responses['ActionController::MethodNotAllowed']
+ assert_equal :not_implemented, responses['ActionController::NotImplemented']
end
def test_rescue_templates
@@ -176,6 +186,22 @@ class RescueTest < Test::Unit::TestCase
assert_nil @controller.send(:clean_backtrace, Exception.new)
end
end
+
+ def test_not_implemented
+ with_all_requests_local false do
+ head :not_implemented
+ end
+ assert_response :not_implemented
+ assert_equal "GET, PUT", @response.headers['Allow']
+ end
+
+ def test_method_not_allowed
+ with_all_requests_local false do
+ get :method_not_allowed
+ end
+ assert_response :method_not_allowed
+ assert_equal "GET, HEAD, PUT", @response.headers['Allow']
+ end
protected
def with_all_requests_local(local = true)
diff --git a/actionpack/test/controller/resources_test.rb b/actionpack/test/controller/resources_test.rb
index 60d94120af..8149c02a9d 100644
--- a/actionpack/test/controller/resources_test.rb
+++ b/actionpack/test/controller/resources_test.rb
@@ -188,7 +188,7 @@ class ResourcesTest < Test::Unit::TestCase
with_restful_routing :messages do
assert_restful_routes_for :messages do |options|
assert_recognizes(options.merge(:action => "new"), :path => "/messages/new", :method => :get)
- assert_raises(ActionController::RoutingError) do
+ assert_raises(ActionController::MethodNotAllowed) do
ActionController::Routing::Routes.recognize_path("/messages/new", :method => :post)
end
end
@@ -384,11 +384,11 @@ class ResourcesTest < Test::Unit::TestCase
options = { :controller => controller_name.to_s }
collection_path = "/#{controller_name}"
- assert_raises(ActionController::RoutingError) do
+ assert_raises(ActionController::MethodNotAllowed) do
assert_recognizes(options.merge(:action => 'update'), :path => collection_path, :method => :put)
end
- assert_raises(ActionController::RoutingError) do
+ assert_raises(ActionController::MethodNotAllowed) do
assert_recognizes(options.merge(:action => 'destroy'), :path => collection_path, :method => :delete)
end
end
diff --git a/actionpack/test/controller/routing_test.rb b/actionpack/test/controller/routing_test.rb
index 2abccd7402..7efb6b8a6e 100644
--- a/actionpack/test/controller/routing_test.rb
+++ b/actionpack/test/controller/routing_test.rb
@@ -1590,8 +1590,13 @@ class RouteSetTest < Test::Unit::TestCase
assert_nothing_raised { set.recognize(request) }
assert_equal("update", request.path_parameters[:action])
- request.method = :update
- assert_raises(ActionController::RoutingError) { set.recognize(request) }
+ begin
+ request.method = :bacon
+ set.recognize(request)
+ flunk 'Should have raised NotImplemented'
+ rescue ActionController::NotImplemented => e
+ assert_equal [:get, :post, :put, :delete], e.allowed_methods
+ end
request.path = "/people/5"
request.method = :get
@@ -1608,10 +1613,15 @@ class RouteSetTest < Test::Unit::TestCase
assert_nothing_raised { set.recognize(request) }
assert_equal("destroy", request.path_parameters[:action])
assert_equal("5", request.path_parameters[:id])
-
- request.method = :post
- assert_raises(ActionController::RoutingError) { set.recognize(request) }
-
+
+ begin
+ request.method = :post
+ set.recognize(request)
+ flunk 'Should have raised MethodNotAllowed'
+ rescue ActionController::MethodNotAllowed => e
+ assert_equal [:get, :put, :delete], e.allowed_methods
+ end
+
ensure
Object.send(:remove_const, :PeopleController)
end