Commit 3d4ba90c authored by Bob Van Landuyt's avatar Bob Van Landuyt

Count occurrences of a specific query in the query recorder.

parent 20f78421
......@@ -264,24 +264,22 @@ describe ProjectsController do
context 'when the project is forked and has a repository', :request_store do
let(:public_project) { create(:project, :public, :repository) }
let(:other_user) { create(:user) }
render_views
before do
# View the project as a user that does not have any rights
sign_in(create(:user))
sign_in(other_user)
fork_project(public_project)
end
it 'does not increase the number of queries when the project is forked' do
# When a project is part of a fork network, we check if the `current_user`
# has a fork in their own namespace. We query this several times. Caching
# the result in the RequestStore brings the number of queries for this
# request down from 64 to 59.
expected_query = /#{public_project.fork_network.find_forks_in(other_user.namespace).to_sql}/
expect { get(:show, namespace_id: public_project.namespace, id: public_project) }
.not_to exceed_query_limit(59)
.not_to exceed_query_limit(1).for_query(expected_query)
end
end
end
......
......@@ -41,7 +41,8 @@ RSpec::Matchers.define :exceed_query_limit do |expected|
supports_block_expectations
match do |block|
query_count(&block) > expected_count + threshold
@subject_block = block
actual_count > expected_count + threshold
end
failure_message_when_negated do |actual|
......@@ -55,6 +56,11 @@ RSpec::Matchers.define :exceed_query_limit do |expected|
self
end
def for_query(query)
@query = query
self
end
def threshold
@threshold.to_i
end
......@@ -68,12 +74,15 @@ RSpec::Matchers.define :exceed_query_limit do |expected|
end
def actual_count
@recorder.count
@actual_count ||= if @query
recorder.log.select { |recorded| recorded =~ @query }.size
else
recorder.count
end
end
def query_count(&block)
@recorder = ActiveRecord::QueryRecorder.new(&block)
@recorder.count
def recorder
@recorder ||= ActiveRecord::QueryRecorder.new(&@subject_block)
end
def count_queries(queries)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment