- # Set things up for OpenID testing
- def openid_setup
- 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
- 1.upto(30).each do
- begin
- sleep 1
- 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
- next
+ ##
+ # execute a block with a given set of HTTP responses stubbed
+ def with_http_stubs(stubs_file)
+ stubs = YAML.load_file(File.expand_path("../http/#{stubs_file}.yml", __FILE__))
+ stubs.each do |url, response|
+ stub_request(:get, Regexp.new(Regexp.quote(url))).to_return(:status => response["code"], :body => response["body"])
+ end
+
+ yield
+ end
+
+ def stub_gravatar_request(email, status = 200, body = nil)
+ hash = ::Digest::MD5.hexdigest(email.downcase)
+ url = "https://www.gravatar.com/avatar/#{hash}?d=404"
+ stub_request(:get, url).and_return(:status => status, :body => body)
+ end
+
+ def stub_hostip_requests
+ # Controller tests and integration tests use different IPs
+ stub_request(:get, "https://api.hostip.info/country.php?ip=0.0.0.0")
+ stub_request(:get, "https://api.hostip.info/country.php?ip=127.0.0.1")
+ end
+
+ def email_text_parts(message)
+ message.parts.each_with_object([]) do |part, text_parts|
+ if part.content_type.start_with?("text/")
+ text_parts.push(part)
+ elsif part.multipart?
+ text_parts.concat(email_text_parts(part))