if ::ActionPack::VERSION::MAJOR == 4
  require 'test_xml/mini_test'
else
  require 'test_xml/test_unit'
end

module Roar
  module Rails
    module TestCase
      include TestXml::Assertions # FIXME: including from test_xml in MiniTest::Test doesn't work with rails 4.

      def get(action, *args)
        process(action, "GET", *args)
      end

      def post(action, *args)
        process(action, "POST", *args)
      end

      def put(action, *args)
        process(action, "PUT", *args)
      end

      def delete(action, *args)
        process(action, "DELETE", *args)
      end

      def process(action, http_method, document="", params={})
        if document.is_a?(Hash)
          params = document
          document = ""
        end

        request.env['RAW_POST_DATA'] = document

        super(*process_args(action, http_method, document, params))
      end

    private
      module ProcessArgs
        def process_args(*args) # TODO: remove when <= 3.1 support is dropped (in 2016).
          args
        end
      end
      include ProcessArgs
      include TestCase::VersionStrategy # overwrites #process_args for <= 3.1.


      module Assertions
        def assert_body(body, options={})
          return assert_xml_equal body, response.body if options[:xml]
          assert_equal body, response.body
        end
      end
      include Assertions
    end
  end
end

require 'minitest'

module Roar
  module Rails
    module TestCase
      include TestXml::Assertions # FIXME: including from test_xml in MiniTest::Test doesn't work with rails 4.

      def get(action, *args)
        process(action, "GET", *args)
      end

      def post(action, *args)
        process(action, "POST", *args)
      end

      def put(action, *args)
        process(action, "PUT", *args)
      end

      def delete(action, *args)
        process(action, "DELETE", *args)
      end

      def process(action, http_method, document="", params={})
        if document.is_a?(Hash)
          params = document
          document = ""
        end

        request.env['RAW_POST_DATA'] = document

        super(*process_args(action, http_method, document, params))
      end

    private
      module ProcessArgs
        def process_args(*args) # TODO: remove when <= 3.1 support is dropped (in 2016).
          args
        end
      end
      include ProcessArgs
      include TestCase::VersionStrategy # overwrites #process_args for <= 3.1.


      module Assertions
        def assert_body(body, options={})
          return assert_xml_equal body, response.body if options[:xml]
          assert_equal body, response.body
        end
      end
      include Assertions
    end
  end
end

Make Roar::Rails::TestCase always require minitest
Make Roar::Rails::TestCase always require minitest

Signed-off-by: Alex Coles <60c6d277a8bd81de7fdde19201bf9c58a3df08f4@alexbcoles.com>
