X-Git-Url: https://git.openstreetmap.org/rails.git/blobdiff_plain/9b10cbccb6ab258d6cecc1f8ba32c4ee1781c92f..c9fa49c99485b0ba1242c6d13e12df9ab1532987:/test/test_helper.rb diff --git a/test/test_helper.rb b/test/test_helper.rb index a83a89f2a..16b678f83 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -1,31 +1,46 @@ ENV["RAILS_ENV"] = "test" -require File.expand_path(File.dirname(__FILE__) + "/../config/environment") -require 'test_help' +require File.expand_path('../../config/environment', __FILE__) +require 'rails/test_help' load 'composite_primary_keys/fixtures.rb' -class ActiveSupport::TestCase - # Transactional fixtures accelerate your tests by wrapping each test method - # in a transaction that's rolled back on completion. This ensures that the - # test database remains unchanged so your fixtures don't have to be reloaded - # between every test method. Fewer database queries means faster tests. - # - # Read Mike Clark's excellent walkthrough at - # http://clarkware.com/cgi/blosxom/2005/10/24#Rails10FastTesting - # - # Every Active Record database supports transactions except MyISAM tables - # in MySQL. Turn off transactional fixtures in this case; however, if you - # don't care one way or the other, switching from MyISAM to InnoDB tables - # is recommended. - self.use_transactional_fixtures = false - - # Instantiated fixtures are slow, but give you @david where otherwise you - # would need people(:david). If you don't want to migrate your existing - # test cases which use the @david style and don't mind the speed hit (each - # instantiated fixtures translates to a database query per test method), - # then set this back to true. - self.use_instantiated_fixtures = false +# This monkey patch is to make tests where a rack module alters +# the response work with rails 2 - it can be dropped when we move +# to rails 3. +module ActionController + module Integration + class Session + def process_with_capture(method, path, parameters = nil, headers = nil) + status = process_without_capture(method, path, parameters, headers) + @controller = ActionController::Base.last_controller + @request = @controller.request + @response.session = @controller.response.session + @response.template = @controller.response.template + @response.redirected_to = @response.location + status + end + + alias_method_chain :process, :capture + end + + module ControllerCapture + module ClassMethods + mattr_accessor :last_controller + + def clear_last_instantiation! + self.last_controller = nil + end + def new_with_capture(*args) + controller = new_without_capture(*args) + self.last_controller ||= controller + controller + end + end + end + end +end +class ActiveSupport::TestCase # Load standard fixtures needed to test API methods def self.api_fixtures #print "setting up the api_fixtures" @@ -121,6 +136,10 @@ class ActiveSupport::TestCase @request.env["HTTP_AUTHORIZATION"] = "Basic %s" % Base64.encode64("#{user}:#{pass}") end + def error_format(format) + @request.env["HTTP_X_ERROR_FORMAT"] = format + end + def content(c) @request.env["RAW_POST_DATA"] = c.to_s end @@ -142,6 +161,35 @@ class ActiveSupport::TestCase assert_select "span[class=translation_missing]", false, "Missing translation #{msg}" end + # Set things up for OpenID testing + def openid_setup + begin + # Test if the ROTS (Ruby OpenID Test Server) is already running + rots_response = Net::HTTP.get_response(URI.parse("http://localhost:1123/")) + rescue + # It isn't, so start a new instance. + rots = IO.popen(RAILS_ROOT + "/vendor/gems/rots-0.2.1/bin/rots --silent") + + # Wait for up to 30 seconds for the server to start and respond before continuing + for i in (1 .. 30) + begin + sleep 1 + rots_response = Net::HTTP.get_response(URI.parse("http://localhost:1123/")) + # If the rescue block doesn't fire, ROTS is up and running and we can continue + break + rescue + # If the connection failed, do nothing and repeat the loop + end + end + + # Arrange to kill the process when we exit - note that we need + # to kill it really har due to a bug in ROTS + Kernel.at_exit do + Process.kill("KILL", rots.pid) + end + end + end + def openid_request(openid_request_uri) openid_response = Net::HTTP.get_response(URI.parse(openid_request_uri)) openid_response_uri = URI(openid_response['Location'])