merged cont.
[opensuse:yast-rest-service.git] / webyast / test / functional / error_controller_test.rb
1 #--
2 # Webyast Webservice framework
3 #
4 # Copyright (C) 2009, 2010 Novell, Inc. 
5 #   This library is free software; you can redistribute it and/or modify
6 # it only under the terms of version 2.1 of the GNU Lesser General Public
7 # License as published by the Free Software Foundation. 
8 #
9 #   This library is distributed in the hope that it will be useful, but WITHOUT
10 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11 # FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more 
12 # details. 
13 #
14 #   You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software 
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17 #++
18
19 require File.expand_path(File.dirname(__FILE__) + "/../test_helper")
20
21 # a message with invalid HTML/XML string (needs to be escaped)
22 TEST_MESSAGE = '>&<"'
23 TEST_RESPONSE = 404
24
25 class ErrorControllerTest < ActionController::TestCase
26
27   # html_escape is used here
28   include ERB::Util
29
30   class ErrorController < ApplicationController
31     def error
32       render ErrorResult.error(TEST_RESPONSE, 1, TEST_MESSAGE) and return
33     end
34   end
35
36   def setup
37     @controller = ErrorController.new
38     @routes = ActionController::Routing::Routes.routes.dup
39     # add a catch-all route for the tests only.
40     ActionController::Routing::Routes.draw {
41       |map| map.connect ':controller/:action'
42     }
43   end
44
45   def teardown
46     #restore original routes to not affect other tests
47     ActionController::Routing::Routes.routes = @routes
48   end
49
50   # test escaping in XML error message body
51   def test_error_xml
52     mime = Mime::XML
53     @request.accept = mime.to_s
54
55     get :error, :format => :xml
56
57     assert_response TEST_RESPONSE
58     assert_equal mime.to_s, @response.content_type
59
60     # the XML parsing must succeed here
61     ret = Hash.from_xml @response.body
62     # check the result, it must be the same after parsing from XML
63     assert_equal TEST_MESSAGE, ret['error']['message']
64   end
65
66   # test escaping in HTML error message
67   def test_error_html
68     get :error
69     assert_response TEST_RESPONSE
70
71     # check whether the result contains the expected escaped string
72     expected = html_escape TEST_MESSAGE
73     assert @response.body.index(expected) > 0
74   end
75
76 end