diff options
Diffstat (limited to 'spec/finders/merge_requests_finder_spec.rb')
-rw-r--r-- | spec/finders/merge_requests_finder_spec.rb | 118 |
1 files changed, 99 insertions, 19 deletions
diff --git a/spec/finders/merge_requests_finder_spec.rb b/spec/finders/merge_requests_finder_spec.rb index 68958e37001..7b59b581b1c 100644 --- a/spec/finders/merge_requests_finder_spec.rb +++ b/spec/finders/merge_requests_finder_spec.rb @@ -333,6 +333,8 @@ RSpec.describe MergeRequestsFinder do end context 'assignee filtering' do + let_it_be(:user3) { create(:user) } + let(:issuables) { described_class.new(user, params).execute } it_behaves_like 'assignee ID filter' do @@ -351,7 +353,6 @@ RSpec.describe MergeRequestsFinder do merge_request3.assignees = [user2, user3] end - let_it_be(:user3) { create(:user) } let(:params) { { assignee_username: [user2.username, user3.username] } } let(:expected_issuables) { [merge_request3] } end @@ -366,38 +367,95 @@ RSpec.describe MergeRequestsFinder do end it_behaves_like 'no assignee filter' do - let_it_be(:user3) { create(:user) } let(:expected_issuables) { [merge_request4, merge_request5] } end it_behaves_like 'any assignee filter' do let(:expected_issuables) { [merge_request1, merge_request2, merge_request3] } end + end - context 'filtering by group milestone' do - let(:group_milestone) { create(:milestone, group: group) } + context 'reviewer filtering' do + subject { described_class.new(user, params).execute } - before do - merge_request1.update!(milestone: group_milestone) - merge_request2.update!(milestone: group_milestone) - end + context 'by reviewer_id' do + let(:params) { { reviewer_id: user2.id } } + let(:expected_mr) { [merge_request1, merge_request2] } - it 'returns merge requests assigned to that group milestone' do - params = { milestone_title: group_milestone.title } + it { is_expected.to contain_exactly(*expected_mr) } + end - merge_requests = described_class.new(user, params).execute + context 'by NOT reviewer_id' do + let(:params) { { not: { reviewer_id: user2.id } } } + let(:expected_mr) { [merge_request3, merge_request4, merge_request5] } - expect(merge_requests).to contain_exactly(merge_request1, merge_request2) - end + it { is_expected.to contain_exactly(*expected_mr) } + end - context 'using NOT' do - let(:params) { { not: { milestone_title: group_milestone.title } } } + context 'by reviewer_username' do + let(:params) { { reviewer_username: user2.username } } + let(:expected_mr) { [merge_request1, merge_request2] } - it 'returns MRs not assigned to that group milestone' do - merge_requests = described_class.new(user, params).execute + it { is_expected.to contain_exactly(*expected_mr) } + end - expect(merge_requests).to contain_exactly(merge_request3, merge_request4, merge_request5) - end + context 'by NOT reviewer_username' do + let(:params) { { not: { reviewer_username: user2.username } } } + let(:expected_mr) { [merge_request3, merge_request4, merge_request5] } + + it { is_expected.to contain_exactly(*expected_mr) } + end + + context 'by reviewer_id=None' do + let(:params) { { reviewer_id: 'None' } } + let(:expected_mr) { [merge_request4, merge_request5] } + + it { is_expected.to contain_exactly(*expected_mr) } + end + + context 'by reviewer_id=Any' do + let(:params) { { reviewer_id: 'Any' } } + let(:expected_mr) { [merge_request1, merge_request2, merge_request3] } + + it { is_expected.to contain_exactly(*expected_mr) } + end + + context 'by reviewer_id with unknown user' do + let(:params) { { reviewer_id: 99999 } } + + it { is_expected.to be_empty } + end + + context 'by NOT reviewer_id with unknown user' do + let(:params) { { not: { reviewer_id: 99999 } } } + + it { is_expected.to be_empty } + end + end + + context 'filtering by group milestone' do + let(:group_milestone) { create(:milestone, group: group) } + + before do + merge_request1.update!(milestone: group_milestone) + merge_request2.update!(milestone: group_milestone) + end + + it 'returns merge requests assigned to that group milestone' do + params = { milestone_title: group_milestone.title } + + merge_requests = described_class.new(user, params).execute + + expect(merge_requests).to contain_exactly(merge_request1, merge_request2) + end + + context 'using NOT' do + let(:params) { { not: { milestone_title: group_milestone.title } } } + + it 'returns MRs not assigned to that group milestone' do + merge_requests = described_class.new(user, params).execute + + expect(merge_requests).to contain_exactly(merge_request3, merge_request4, merge_request5) end end end @@ -563,6 +621,28 @@ RSpec.describe MergeRequestsFinder do expect(mrs).to eq([mr2]) end end + + it 'does not raise any exception with complex filters' do + # available filters from MergeRequest dashboard UI + params = { + project_id: project1.id, + scope: 'authored', + state: 'opened', + author_username: user.username, + assignee_username: user.username, + reviewer_username: user.username, + approver_usernames: [user.username], + approved_by_usernames: [user.username], + milestone_title: 'none', + release_tag: 'none', + label_names: 'none', + my_reaction_emoji: 'none', + draft: 'no' + } + + merge_requests = described_class.new(user, params).execute + expect { merge_requests.load }.not_to raise_error + end end describe '#row_count', :request_store do |