89 lines
2.1 KiB
Ruby
89 lines
2.1 KiB
Ruby
$performed_queries = []
|
|
CouchRest.class_eval do
|
|
class << self
|
|
alias_method :old_get, :get
|
|
def get(uri, options={})
|
|
$performed_queries << {url: uri, options: options} if is_query_uri?(uri)
|
|
old_get(uri, options)
|
|
end
|
|
|
|
def is_query_uri?(uri)
|
|
return false if uri =~ /\/_design\/\w+$/ # request design doc
|
|
return false if uri =~ /\/_uuids/
|
|
true
|
|
end
|
|
end
|
|
end
|
|
# taken from: http://stackoverflow.com/questions/5490411/counting-the-number-of-queries-performed
|
|
RSpec::Matchers.define :exceed_query_limit do |expected|
|
|
|
|
match do |block|
|
|
query_count(&block) > expected
|
|
end
|
|
|
|
failure_message_when_negated do |actual|
|
|
extra_queries = $performed_queries[expected..-1].map{|q| q[:url]}.map do |q|
|
|
if q =~ /5984\/\w+\/[0-9a-f]{32}$/
|
|
info = q
|
|
begin
|
|
record = CouchRest.get(q)
|
|
if record.is_a?(SimplyStored::Couch)
|
|
info += " #{record.class.name}"
|
|
end
|
|
rescue
|
|
end
|
|
info
|
|
else
|
|
q
|
|
end
|
|
end
|
|
"Expected to run maximum #{expected} queries, got #{@executed_queries}\nExtra queries:\n - #{extra_queries.join("\n - ")}"
|
|
end
|
|
|
|
def query_count(&block)
|
|
$performed_queries = []
|
|
block.call
|
|
@executed_queries = $performed_queries.size
|
|
end
|
|
|
|
def supports_block_expectations?
|
|
true
|
|
end
|
|
|
|
end
|
|
|
|
RSpec::Matchers.define :perform_any_queries do |expected|
|
|
match do |block|
|
|
query_count(&block) > 0
|
|
end
|
|
|
|
failure_message_when_negated do |actual|
|
|
extra_queries = $performed_queries.map{|q| q[:url]}.map do |q|
|
|
if q =~ /5984\/\w+\/[0-9a-f]{32}$/
|
|
info = q
|
|
begin
|
|
record = CouchRest.get(q)
|
|
if record.is_a?(SimplyStored::Couch)
|
|
info += " #{record.class.name}"
|
|
end
|
|
rescue
|
|
end
|
|
info
|
|
else
|
|
q
|
|
end
|
|
end
|
|
"Expected to run no queries, got #{@executed_queries}\nExtra queries:\n - #{extra_queries.join("\n - ")}"
|
|
end
|
|
|
|
def query_count(&block)
|
|
$performed_queries = []
|
|
block.call
|
|
@executed_queries = $performed_queries.size
|
|
end
|
|
|
|
def supports_block_expectations?
|
|
true
|
|
end
|
|
end
|