when using respond_with with an invalid resource and custom options, the default response status and error messages should be returned

Signed-off-by: José Valim <jose.valim@gmail.com>
This commit is contained in:
Josh Kalderimis
2011-03-30 20:53:42 +02:00
committed by José Valim
parent 2867093365
commit 9766997f4c
2 changed files with 19 additions and 1 deletions

View File

@@ -156,7 +156,8 @@ module ActionController #:nodoc:
if get?
display resource
elsif has_errors?
display resource.errors, :status => :unprocessable_entity
# bypass the options merging of display
controller.render format => resource.errors, :status => :unprocessable_entity
elsif post?
display resource, :status => :created, :location => api_location
elsif has_empty_resource_definition?

View File

@@ -953,6 +953,23 @@ class RespondWithControllerTest < ActionController::TestCase
assert_equal 201, @response.status
end
def test_using_resource_with_status_and_location_with_invalid_resource
errors = { :name => :invalid }
Customer.any_instance.stubs(:errors).returns(errors)
@request.accept = "text/xml"
post :using_resource_with_status_and_location
assert_equal errors.to_xml, @response.body
assert_equal 422, @response.status
assert_equal nil, @response.location
put :using_resource_with_status_and_location
assert_equal errors.to_xml, @response.body
assert_equal 422, @response.status
assert_equal nil, @response.location
end
def test_using_resource_with_responder
get :using_resource_with_responder
assert_equal "Resource name is david", @response.body