diff options
Diffstat (limited to 'spec/requests/api/commits_spec.rb')
-rw-r--r-- | spec/requests/api/commits_spec.rb | 36 |
1 files changed, 33 insertions, 3 deletions
diff --git a/spec/requests/api/commits_spec.rb b/spec/requests/api/commits_spec.rb index de2cfb8fea0..ac3aa808f37 100644 --- a/spec/requests/api/commits_spec.rb +++ b/spec/requests/api/commits_spec.rb @@ -1439,6 +1439,22 @@ RSpec.describe API::Commits do it_behaves_like 'ref comments' end end + + context 'multiple notes' do + let!(:note) { create(:diff_note_on_commit, project: project) } + let(:commit) { note.commit } + let(:commit_id) { note.commit_id } + + it 'are returned without N + 1' do + get api(route, current_user) # warm up the cache + + control_count = ActiveRecord::QueryRecorder.new { get api(route, current_user) }.count + + create(:diff_note_on_commit, project: project, author: create(:user)) + + expect { get api(route, current_user) }.not_to exceed_query_limit(control_count) + end + end end context 'when the commit is present on two projects' do @@ -1898,8 +1914,12 @@ RSpec.describe API::Commits do let(:merged_mr) { create(:merge_request, source_project: project, source_branch: 'master', target_branch: 'feature') } let(:commit) { merged_mr.merge_request_diff.commits.last } - it 'returns the correct merge request' do + def perform_request(user) get api("/projects/#{project.id}/repository/commits/#{commit.id}/merge_requests", user) + end + + it 'returns the correct merge request' do + perform_request(user) expect(response).to have_gitlab_http_status(:ok) expect(response).to include_limited_pagination_headers @@ -1910,7 +1930,7 @@ RSpec.describe API::Commits do it 'returns 403 for an unauthorized user' do project.add_guest(user) - get api("/projects/#{project.id}/repository/commits/#{commit.id}/merge_requests", user) + perform_request(user) expect(response).to have_gitlab_http_status(:forbidden) end @@ -1926,11 +1946,21 @@ RSpec.describe API::Commits do let(:non_member) { create(:user) } it 'responds 403 when only members are allowed to read merge requests' do - get api("/projects/#{project.id}/repository/commits/#{commit.id}/merge_requests", non_member) + perform_request(non_member) expect(response).to have_gitlab_http_status(:forbidden) end end + + it 'returns multiple merge requests without N + 1' do + perform_request(user) + + control_count = ActiveRecord::QueryRecorder.new { perform_request(user) }.count + + create(:merge_request, :closed, source_project: project, source_branch: 'master', target_branch: 'feature') + + expect { perform_request(user) }.not_to exceed_query_limit(control_count) + end end describe 'GET /projects/:id/repository/commits/:sha/signature' do |