Updated README.rdoc again
[feedcatcher.git] / vendor / rails / actionpack / test / controller / request / xml_params_parsing_test.rb
1 require 'abstract_unit'
2
3 class XmlParamsParsingTest < ActionController::IntegrationTest
4 class TestController < ActionController::Base
5 class << self
6 attr_accessor :last_request_parameters
7 end
8
9 def parse
10 self.class.last_request_parameters = request.request_parameters
11 head :ok
12 end
13 end
14
15 def teardown
16 TestController.last_request_parameters = nil
17 end
18
19 test "parses hash params" do
20 with_test_routing do
21 xml = "<person><name>David</name></person>"
22 post "/parse", xml, default_headers
23 assert_response :ok
24 assert_equal({"person" => {"name" => "David"}}, TestController.last_request_parameters)
25 end
26 end
27
28 test "parses single file" do
29 with_test_routing do
30 xml = "<person><name>David</name><avatar type='file' name='me.jpg' content_type='image/jpg'>#{ActiveSupport::Base64.encode64('ABC')}</avatar></person>"
31 post "/parse", xml, default_headers
32 assert_response :ok
33
34 person = TestController.last_request_parameters
35 assert_equal "image/jpg", person['person']['avatar'].content_type
36 assert_equal "me.jpg", person['person']['avatar'].original_filename
37 assert_equal "ABC", person['person']['avatar'].read
38 end
39 end
40
41 test "parses multiple files" do
42 xml = <<-end_body
43 <person>
44 <name>David</name>
45 <avatars>
46 <avatar type='file' name='me.jpg' content_type='image/jpg'>#{ActiveSupport::Base64.encode64('ABC')}</avatar>
47 <avatar type='file' name='you.gif' content_type='image/gif'>#{ActiveSupport::Base64.encode64('DEF')}</avatar>
48 </avatars>
49 </person>
50 end_body
51
52 with_test_routing do
53 post "/parse", xml, default_headers
54 assert_response :ok
55 end
56
57 person = TestController.last_request_parameters
58
59 assert_equal "image/jpg", person['person']['avatars']['avatar'].first.content_type
60 assert_equal "me.jpg", person['person']['avatars']['avatar'].first.original_filename
61 assert_equal "ABC", person['person']['avatars']['avatar'].first.read
62
63 assert_equal "image/gif", person['person']['avatars']['avatar'].last.content_type
64 assert_equal "you.gif", person['person']['avatars']['avatar'].last.original_filename
65 assert_equal "DEF", person['person']['avatars']['avatar'].last.read
66 end
67
68 private
69 def with_test_routing
70 with_routing do |set|
71 set.draw do |map|
72 map.connect ':action', :controller => "xml_params_parsing_test/test"
73 end
74 yield
75 end
76 end
77
78 def default_headers
79 {'CONTENT_TYPE' => 'application/xml'}
80 end
81 end
82
83 class LegacyXmlParamsParsingTest < XmlParamsParsingTest
84 private
85 def default_headers
86 {'HTTP_X_POST_DATA_FORMAT' => 'xml'}
87 end
88 end