summaryrefslogtreecommitdiff
path: root/spec/requests/api/merge_requests_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/requests/api/merge_requests_spec.rb')
-rw-r--r--spec/requests/api/merge_requests_spec.rb88
1 files changed, 83 insertions, 5 deletions
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