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.rb139
1 files changed, 139 insertions, 0 deletions
diff --git a/spec/requests/api/merge_requests_spec.rb b/spec/requests/api/merge_requests_spec.rb
index 4339f1dd830..3a3eae73932 100644
--- a/spec/requests/api/merge_requests_spec.rb
+++ b/spec/requests/api/merge_requests_spec.rb
@@ -440,6 +440,7 @@ RSpec.describe API::MergeRequests do
milestone: milestone,
author: user,
assignees: [user],
+ reviewers: [user2],
source_project: project,
target_project: project,
source_branch: 'what',
@@ -498,6 +499,71 @@ RSpec.describe API::MergeRequests do
expect(mr['assignee']['id']).not_to eq(user2.id)
end
end
+
+ context 'filter by reviewer' do
+ context 'with reviewer_id' do
+ context 'with an id' do
+ let(:params) { { not: { reviewer_id: user2.id } } }
+
+ it 'returns merge requests that do not have the given reviewer' do
+ get api(endpoint_path, user), params: { not: { reviewer_id: user2.id } }
+
+ expect(response).to have_gitlab_http_status(:ok)
+ expect(json_response).to be_an(Array)
+ expect(json_response.length).to eq(4)
+ expect(json_response.map { |mr| mr['id'] }).not_to include(merge_request2)
+ end
+ end
+
+ context 'with Any' do
+ let(:params) { { not: { reviewer_id: 'Any' } } }
+
+ it 'returns a 400' do
+ # Any is not supported for negated filter
+ get api(endpoint_path, user), params: params
+
+ expect(response).to have_gitlab_http_status(:bad_request)
+ expect(json_response['error']).to eq('not[reviewer_id] is invalid')
+ end
+ end
+
+ context 'with None' do
+ let(:params) { { not: { reviewer_id: 'None' } } }
+
+ it 'returns a 400' do
+ # None is not supported for negated filter
+ get api(endpoint_path, user), params: params
+
+ expect(response).to have_gitlab_http_status(:bad_request)
+ expect(json_response['error']).to eq('not[reviewer_id] is invalid')
+ end
+ end
+ end
+
+ context 'with reviewer_username' do
+ let(:params) { { not: { reviewer_username: user2.username } } }
+
+ it 'returns merge requests that do not have the given reviewer' do
+ get api(endpoint_path, user), params: params
+
+ expect(response).to have_gitlab_http_status(:ok)
+ expect(json_response).to be_an(Array)
+ expect(json_response.length).to eq(4)
+ expect(json_response.map { |mr| mr['id'] }).not_to include(merge_request2)
+ end
+ end
+
+ context 'when both reviewer_id and reviewer_username' do
+ let(:params) { { not: { reviewer_id: user2.id, reviewer_username: user2.username } } }
+
+ it 'returns a 400' do
+ get api('/merge_requests', user), params: params
+
+ expect(response).to have_gitlab_http_status(:bad_request)
+ expect(json_response['error']).to eq('not[reviewer_id], not[reviewer_username] are mutually exclusive')
+ end
+ end
+ end
end
context 'source_branch param' do
@@ -666,6 +732,79 @@ RSpec.describe API::MergeRequests do
end
end
+ context 'filter by reviewer' do
+ let_it_be(:review_requested_mr1) do
+ create(:merge_request, :unique_branches, author: user, reviewers: [user2], source_project: project2, target_project: project2)
+ end
+
+ let_it_be(:review_requested_mr2) do
+ create(:merge_request, :unique_branches, author: user2, reviewers: [user], source_project: project2, target_project: project2)
+ end
+
+ let(:params) { { scope: :all } }
+
+ context 'with reviewer_id' do
+ let(:params) { super().merge(reviewer_id: reviewer_id) }
+
+ context 'with an id' do
+ let(:reviewer_id) { user2.id }
+
+ it 'returns review requested merge requests for the given user' do
+ get api('/merge_requests', user), params: params
+
+ expect_response_contain_exactly(review_requested_mr1.id)
+ end
+ end
+
+ context 'with Any' do
+ let(:reviewer_id) { 'Any' }
+
+ it 'returns review requested merge requests for any user' do
+ get api('/merge_requests', user), params: params
+
+ expect_response_contain_exactly(review_requested_mr1.id, review_requested_mr2.id)
+ end
+ end
+
+ context 'with None' do
+ let(:reviewer_id) { 'None' }
+
+ it 'returns merge requests that has no assigned reviewers' do
+ get api('/merge_requests', user), params: params
+
+ expect_response_contain_exactly(
+ merge_request.id,
+ merge_request_closed.id,
+ merge_request_merged.id,
+ merge_request_locked.id,
+ merge_request2.id
+ )
+ end
+ end
+ end
+
+ context 'with reviewer_username' do
+ let(:params) { super().merge(reviewer_username: user2.username) }
+
+ it 'returns review requested merge requests for the given user' do
+ get api('/merge_requests', user), params: params
+
+ expect_response_contain_exactly(review_requested_mr1.id)
+ end
+ end
+
+ context 'with both reviewer_id and reviewer_username' do
+ let(:params) { super().merge(reviewer_id: user2.id, reviewer_username: user2.username) }
+
+ it 'returns a 400' do
+ get api('/merge_requests', user), params: params
+
+ expect(response).to have_gitlab_http_status(:bad_request)
+ expect(json_response['error']).to eq('reviewer_id, reviewer_username are mutually exclusive')
+ end
+ end
+ end
+
it 'returns an array of merge requests assigned to the given user' do
merge_request3 = create(:merge_request, :simple, author: user, assignees: [user2], source_project: project2, target_project: project2, source_branch: 'other-branch')