From 7e9c479f7de77702622631cff2628a9c8dcbc627 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Thu, 19 Nov 2020 08:27:35 +0000 Subject: Add latest changes from gitlab-org/gitlab@13-6-stable-ee --- spec/requests/api/merge_requests_spec.rb | 88 ++++++++++++++++++++++++++++++-- 1 file changed, 83 insertions(+), 5 deletions(-) (limited to 'spec/requests/api/merge_requests_spec.rb') diff --git a/spec/requests/api/merge_requests_spec.rb b/spec/requests/api/merge_requests_spec.rb index 506607f4cc2..e7005bd3ec5 100644 --- a/spec/requests/api/merge_requests_spec.rb +++ b/spec/requests/api/merge_requests_spec.rb @@ -1312,13 +1312,44 @@ RSpec.describe API::MergeRequests do end describe 'GET /projects/:id/merge_requests/:merge_request_iid/changes' do - let_it_be(:merge_request) { create(:merge_request, :simple, author: user, assignees: [user], source_project: project, target_project: project, source_branch: 'markdown', title: "Test", created_at: base_time) } + let_it_be(:merge_request) do + create( + :merge_request, + :simple, + author: user, + assignees: [user], + source_project: project, + target_project: project, + source_branch: 'markdown', + title: "Test", + created_at: base_time + ) + end - it 'returns the change information of the merge_request' do - get api("/projects/#{project.id}/merge_requests/#{merge_request.iid}/changes", user) + shared_examples 'find an existing merge request' do + it 'returns the change information of the merge_request' do + get api("/projects/#{project.id}/merge_requests/#{merge_request.iid}/changes", user) - expect(response).to have_gitlab_http_status(:ok) - expect(json_response['changes'].size).to eq(merge_request.diffs.size) + expect(response).to have_gitlab_http_status(:ok) + expect(json_response['changes'].size).to eq(merge_request.diffs.size) + expect(json_response['overflow']).to be_falsy + end + end + + shared_examples 'accesses diffs via raw_diffs' do + let(:params) { {} } + + it 'as expected' do + expect_any_instance_of(MergeRequest) do |merge_request| + expect(merge_request).to receive(:raw_diffs).and_call_original + end + + expect_any_instance_of(MergeRequest) do |merge_request| + expect(merge_request).not_to receive(:diffs) + end + + get(api("/projects/#{project.id}/merge_requests/#{merge_request.iid}/changes", user), params: params) + end end it 'returns a 404 when merge_request_iid not found' do @@ -1331,6 +1362,53 @@ RSpec.describe API::MergeRequests do expect(response).to have_gitlab_http_status(:not_found) end + + it_behaves_like 'find an existing merge request' + it_behaves_like 'accesses diffs via raw_diffs' + + it 'returns the overflow status as false' do + get api("/projects/#{project.id}/merge_requests/#{merge_request.iid}/changes", user) + + expect(response).to have_gitlab_http_status(:ok) + expect(json_response['overflow']).to be_falsy + end + + context 'when using DB-backed diffs via feature flag' do + before do + stub_feature_flags(mrc_api_use_raw_diffs_from_gitaly: false) + end + + it_behaves_like 'find an existing merge request' + + it 'accesses diffs via DB-backed diffs.diffs' do + expect_any_instance_of(MergeRequest) do |merge_request| + expect(merge_request).to receive(:diffs).and_call_original + end + + get api("/projects/#{project.id}/merge_requests/#{merge_request.iid}/changes", user) + end + + context 'when the diff_collection has overflowed its size limits' do + before do + expect_next_instance_of(Gitlab::Git::DiffCollection) do |diff_collection| + expect(diff_collection).to receive(:overflow?).and_return(true) + end + end + + it 'returns the overflow status as true' do + get api("/projects/#{project.id}/merge_requests/#{merge_request.iid}/changes", user) + + expect(response).to have_gitlab_http_status(:ok) + expect(json_response['overflow']).to be_truthy + end + end + + context 'when access_raw_diffs is passed as an option' do + it_behaves_like 'accesses diffs via raw_diffs' do + let(:params) { { access_raw_diffs: true } } + end + end + end end describe 'GET /projects/:id/merge_requests/:merge_request_iid/pipelines' do -- cgit v1.2.3