agent testing!
authorBlake Mizerany <blake@blake.local>
Tue, 15 Jan 2008 22:30:41 +0000 (15 14:30 -0800)
committerBlake Mizerany <blake@blake.local>
Tue, 15 Jan 2008 22:30:41 +0000 (15 14:30 -0800)
lib/sinatra.rb
lib/sinatra/test/methods.rb

index 00f5f8e..f17ff70 100644 (file)
@@ -1,4 +1,5 @@
 require 'rubygems'
+require 'metaid'
 
 if ENV['SWIFT']
  require 'swiftcore/swiftiplied_mongrel'
@@ -89,10 +90,10 @@ module Sinatra
     end
         
     def invoke(env)
-      return unless pattern =~ env['PATH_INFO'].squeeze('/')
       if options[:agent] 
         return unless env['HTTP_USER_AGENT'] =~ options[:agent]
       end
+      return unless pattern =~ env['PATH_INFO'].squeeze('/')
       params = param_keys.zip($~.captures.map(&:from_param)).to_hash
       Result.new(block, params, 200)
     end
index 159cad1..11fea42 100644 (file)
@@ -1,3 +1,13 @@
+class Rack::MockRequest
+  class << self
+    alias :env_for_without_env :env_for
+    def env_for(uri = "", opts = {})
+      env = { 'HTTP_USER_AGENT' => opts.delete(:agent) }
+      env_for_without_env(uri, opts).merge(env)
+    end
+  end
+end
+
 module Sinatra
   
   module Test
@@ -5,23 +15,27 @@ module Sinatra
     module Methods
   
       def get_it(path, params = {})
+        agent = params.delete(:agent)
         @request = Rack::MockRequest.new(Sinatra.application)
-        @response = @request.get(path, :input => params.to_params)
+        @response = @request.get(path, :input => params.to_params, :agent => agent)
       end
 
       def post_it(path, params = {})
+        agent = params.delete(:agent)
         @request = Rack::MockRequest.new(Sinatra.application)
-        @response = @request.post(path, :input => params.to_params)
+        @response = @request.post(path, :input => params.to_params, :agent => agent)
       end
 
       def put_it(path, params = {})
+        agent = params.delete(:agent)
         @request = Rack::MockRequest.new(Sinatra.application)
-        @response = @request.put(path, :input => params.to_params)
+        @response = @request.put(path, :input => params.to_params, :agent => agent)
       end
 
       def delete_it(path, params = {})
+        agent = params.delete(:agent)
         @request = Rack::MockRequest.new(Sinatra.application)
-        @response = @request.delete(path, :input => params.to_params)
+        @response = @request.delete(path, :input => params.to_params, :agent => agent)
       end
       
       def follow!