@@ -111,19 +111,50 @@ def test_should_mark_as_invalid_when_content_type_is_unavailable_in_response_hea
111111 end
112112 end
113113
114+ def test_rescues_from_configured_exception_class_name
115+ ActiveResource ::HttpMock . respond_to do |mock |
116+ mock . post "/people.xml" , { } , %q(<?xml version="1.0" encoding="UTF-8"?><errors><error>Age can't be blank</error></errors>) , 400 , { }
117+ mock . post "/people.json" , { } , %q({"errors":{"age":["can't be blank"]}}) , 400 , { }
118+ end
119+
120+ [ :json , :xml ] . each do |format |
121+ invalid_user_using_format ( format , rescue_from : "ActiveResource::BadRequest" ) do
122+ assert_not_predicate @person , :valid?
123+ assert_equal [ "can't be blank" ] , @person . errors [ :age ]
124+ end
125+ end
126+ end
127+
128+ def test_rescues_from_configured_array_of_exception_classes
129+ [ :json , :xml ] . product ( [ 400 , 422 ] ) . each do |format , error_status |
130+ ActiveResource ::HttpMock . respond_to do |mock |
131+ mock . post "/people.xml" , { } , %q(<?xml version="1.0" encoding="UTF-8"?><errors><error>Age can't be blank</error></errors>) , error_status , { }
132+ mock . post "/people.json" , { } , %q({"errors":{"age":["can't be blank"]}}) , error_status , { }
133+ end
134+
135+ invalid_user_using_format ( format , rescue_from : [ ActiveResource ::BadRequest , ActiveResource ::ResourceInvalid ] ) do
136+ assert_not_predicate @person , :valid?
137+ assert_equal [ "can't be blank" ] , @person . errors [ :age ]
138+ end
139+ end
140+ end
141+
114142 private
115- def invalid_user_using_format ( mime_type_reference )
143+ def invalid_user_using_format ( mime_type_reference , rescue_from : nil )
116144 previous_format = Person . format
117145 previous_schema = Person . schema
146+ previous_remote_errors = Person . remote_errors
118147
119148 Person . format = mime_type_reference
120149 Person . schema = { "known_attribute" => "string" }
150+ Person . remote_errors = rescue_from
121151 @person = Person . new ( name : "" , age : "" , phone : "" , phone_work : "" )
122152 assert_equal false , @person . save
123153
124154 yield
125155 ensure
126156 Person . format = previous_format
127157 Person . schema = previous_schema
158+ Person . remote_errors = previous_remote_errors
128159 end
129160end
0 commit comments