Merge branch 'master' of gitorious.org:opensuse/yast-rest-service
[opensuse:yast-rest-service.git] / webservice / test / functional / error_controller_test.rb
1 require File.expand_path(File.dirname(__FILE__) + "/../test_helper")
2
3 # a message with invalid HTML/XML string (needs to be escaped)
4 TEST_MESSAGE = '>&<"'
5 TEST_RESPONSE = 404
6
7 class ErrorControllerTest < ActionController::TestCase
8
9   # html_escape is used here
10   include ERB::Util
11
12   class ErrorController < ApplicationController
13     def error
14       render ErrorResult.error(TEST_RESPONSE, 1, TEST_MESSAGE) and return
15     end
16   end
17
18   def setup
19     @controller = ErrorController.new
20     @routes = ActionController::Routing::Routes.routes.dup
21     # add a catch-all route for the tests only.
22     ActionController::Routing::Routes.draw {
23       |map| map.connect ':controller/:action'
24     }
25   end
26
27   def teardown
28     #restore original routes to not affect other tests
29     ActionController::Routing::Routes.routes = @routes
30   end
31
32   # test escaping in XML error message body
33   def test_error_xml
34     mime = Mime::XML
35     @request.accept = mime.to_s
36
37     get :error, :format => :xml
38
39     assert_response TEST_RESPONSE
40     assert_equal mime.to_s, @response.content_type
41
42     # the XML parsing must succeed here
43     ret = Hash.from_xml @response.body
44     # check the result, it must be the same after parsing from XML
45     assert_equal TEST_MESSAGE, ret['error']['message']
46   end
47
48   # test escaping in HTML error message
49   def test_error_html
50     get :error
51     assert_response TEST_RESPONSE
52
53     # check whether the result contains the expected escaped string
54     expected = html_escape TEST_MESSAGE
55     assert @response.body.index(expected) > 0
56   end
57
58 end