lib/em-http/mock.rb in em-http-request-0.2.7 vs lib/em-http/mock.rb in em-http-request-0.2.9
- old
+ new
@@ -5,12 +5,16 @@
class FakeHttpClient < EventMachine::HttpClient
def setup(response, uri)
@uri = uri
- receive_data(response)
- succeed(self)
+ if response == :fail
+ fail(self)
+ else
+ receive_data(response)
+ succeed(self)
+ end
end
def unbind
end
@@ -18,15 +22,19 @@
@@registry = nil
@@registry_count = nil
def self.reset_counts!
- @@registry_count = Hash.new{|h,k| h[k] = Hash.new(0)}
+ @@registry_count = Hash.new do |registry,query|
+ registry[query] = Hash.new{|h,k| h[k] = Hash.new(0)}
+ end
end
def self.reset_registry!
- @@registry = Hash.new{|h,k| h[k] = {}}
+ @@registry = Hash.new do |registry,query|
+ registry[query] = Hash.new{|h,k| h[k] = {}}
+ end
end
reset_counts!
reset_registry!
@@ -38,37 +46,52 @@
def self.pass_through_requests
@@pass_through_requests
end
- def self.register(uri, method, data)
+ def self.register(uri, method, headers, data)
method = method.to_s.upcase
- @@registry[uri][method] = data
+ headers = headers.to_s
+ @@registry[uri][method][headers] = data
end
- def self.register_file(uri, method, file)
- register(uri, method, File.read(file))
+ def self.register_file(uri, method, headers, file)
+ register(uri, method, headers, File.read(file))
end
- def self.count(uri, method)
+ def self.count(uri, method, headers)
method = method.to_s.upcase
- @@registry_count[uri][method]
+ headers = headers.to_s
+ @@registry_count[uri][method][headers] rescue 0
end
+ def self.registered?(query, method, headers)
+ @@registry[query] and @@registry[query][method] and @@registry[query][method][headers]
+ end
+
+ def self.registered_content(query, method, headers)
+ @@registry[query][method][headers]
+ end
+
+ def self.increment_access(query, method, headers)
+ @@registry_count[query][method][headers] += 1
+ end
+
alias_method :real_send_request, :send_request
protected
def send_request(&blk)
- query = "#{@uri.scheme}://#{@uri.host}:#{@uri.port}#{encode_query(@uri.path, @options[:query], @uri.query)}"
- if s = @@registry[query] and fake = s[@method]
- @@registry_count[query][@method] += 1
+ query = "#{@req.uri.scheme}://#{@req.uri.host}:#{@req.uri.port}#{encode_query(@req.uri.path, @req.options[:query], @req.uri.query)}"
+ headers = @req.options[:head].to_s
+ if self.class.registered?(query, @req.method, headers)
+ self.class.increment_access(query, @req.method, headers)
client = FakeHttpClient.new(nil)
- client.setup(fake, @uri)
+ client.setup(self.class.registered_content(query, @req.method, headers), @req.uri)
client
elsif @@pass_through_requests
real_send_request
else
- raise "this request #{query} for method #{@method} isn't registered, and pass_through_requests is current set to false"
+ raise "this request #{query} for method #{@req.method} with the headers #{@req.options[:head].inspect} isn't registered, and pass_through_requests is current set to false"
end
end
end
end