From 4be3997c9f317e4295421d31204a31962206b55c Mon Sep 17 00:00:00 2001
From: Boris Peterbarg <boris@seekingalpha.com>
Date: Sun, 15 Mar 2015 17:35:58 +0200
Subject: Compare content_type with Mime::XML instead of regexp

Regexp is broken for both content types including charsets and for
integration tests, where the content_type is a Mime::Type and not String
---
 actionpack/lib/action_dispatch/testing/assertions.rb |  2 +-
 actionpack/test/controller/integration_test.rb       | 17 +++++++++++++++++
 2 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/actionpack/lib/action_dispatch/testing/assertions.rb b/actionpack/lib/action_dispatch/testing/assertions.rb
index f325c35b57..21b3b89d22 100644
--- a/actionpack/lib/action_dispatch/testing/assertions.rb
+++ b/actionpack/lib/action_dispatch/testing/assertions.rb
@@ -12,7 +12,7 @@ module ActionDispatch
     include Rails::Dom::Testing::Assertions
 
     def html_document
-      @html_document ||= if @response.content_type =~ /xml$/
+      @html_document ||= if @response.content_type === Mime::XML
         Nokogiri::XML::Document.parse(@response.body)
       else
         Nokogiri::HTML::Document.parse(@response.body)
diff --git a/actionpack/test/controller/integration_test.rb b/actionpack/test/controller/integration_test.rb
index 9504914dba..f0d92eb427 100644
--- a/actionpack/test/controller/integration_test.rb
+++ b/actionpack/test/controller/integration_test.rb
@@ -363,6 +363,7 @@ class IntegrationProcessTest < ActionDispatch::IntegrationTest
       respond_to do |format|
         format.html { render :text => "OK", :status => 200 }
         format.js { render :text => "JS OK", :status => 200 }
+        format.xml { render :xml => "<root></root>", :status => 200 }
       end
     end
 
@@ -419,6 +420,22 @@ class IntegrationProcessTest < ActionDispatch::IntegrationTest
     end
   end
 
+  def test_get_xml
+    with_test_route_set do
+      get "/get", {}, {"HTTP_ACCEPT" => "application/xml"}
+      assert_equal 200, status
+      assert_equal "OK", status_message
+      assert_response 200
+      assert_response :success
+      assert_response :ok
+      assert_equal({}, cookies.to_hash)
+      assert_equal "<root></root>", body
+      assert_equal "<root></root>", response.body
+      assert_instance_of Nokogiri::XML::Document, html_document
+      assert_equal 1, request_count
+    end
+  end
+
   def test_post
     with_test_route_set do
       post '/post'
-- 
cgit v1.2.3