diff options
Diffstat (limited to 'spec/models/merge_request_spec.rb')
-rw-r--r-- | spec/models/merge_request_spec.rb | 244 |
1 files changed, 158 insertions, 86 deletions
diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb index a5e68829c5d..e16f7a94eb7 100644 --- a/spec/models/merge_request_spec.rb +++ b/spec/models/merge_request_spec.rb @@ -180,6 +180,26 @@ RSpec.describe MergeRequest, factory_default: :keep, feature_category: :code_rev end end + describe '.by_sorted_source_branches' do + let(:fork_for_project) { fork_project(project) } + + let!(:merge_request_to_master) { create(:merge_request, :closed, target_project: project, source_branch: 'a-feature') } + let!(:merge_request_to_other_branch) { create(:merge_request, target_project: project, source_branch: 'b-feature') } + let!(:merge_request_to_master2) { create(:merge_request, target_project: project, source_branch: 'a-feature') } + let!(:merge_request_from_fork_to_master) { create(:merge_request, source_project: fork_for_project, target_project: project, source_branch: 'b-feature') } + + it 'returns merge requests sorted by name and id' do + expect(described_class.by_sorted_source_branches(%w[a-feature b-feature non-existing-feature])).to eq( + [ + merge_request_to_master2, + merge_request_to_master, + merge_request_from_fork_to_master, + merge_request_to_other_branch + ] + ) + end + end + describe '.without_hidden', feature_category: :insider_threat do let_it_be(:banned_user) { create(:user, :banned) } let_it_be(:hidden_merge_request) { create(:merge_request, :unique_branches, author: banned_user) } @@ -1021,10 +1041,12 @@ RSpec.describe MergeRequest, factory_default: :keep, feature_category: :code_rev let(:tag_name) { subject.source_branch } it 'returns the sha of the source branch last commit' do - subject.source_project.repository.add_tag(subject.author, - tag_name, - subject.target_branch_sha, - 'Add a tag') + subject.source_project.repository.add_tag( + subject.author, + tag_name, + subject.target_branch_sha, + 'Add a tag' + ) expect(subject.source_branch_sha).to eq(last_branch_commit.sha) @@ -1372,8 +1394,7 @@ RSpec.describe MergeRequest, factory_default: :keep, feature_category: :code_rev before do allow(merge_request).to receive(:commits) { [merge_request.source_project.repository.commit] } - create(:note_on_commit, commit_id: merge_request.commits.first.id, - project: merge_request.project) + create(:note_on_commit, commit_id: merge_request.commits.first.id, project: merge_request.project) create(:note, noteable: merge_request, project: merge_request.project) end @@ -1383,16 +1404,19 @@ RSpec.describe MergeRequest, factory_default: :keep, feature_category: :code_rev end it "includes notes for commits from target project as well" do - create(:note_on_commit, commit_id: merge_request.commits.first.id, - project: merge_request.target_project) + create(:note_on_commit, commit_id: merge_request.commits.first.id, project: merge_request.target_project) expect(merge_request.commits).not_to be_empty expect(merge_request.related_notes.count).to eq(3) end it "excludes system notes for commits" do - system_note = create(:note_on_commit, :system, commit_id: merge_request.commits.first.id, - project: merge_request.project) + system_note = create( + :note_on_commit, + :system, + commit_id: merge_request.commits.first.id, + project: merge_request.project + ) expect(merge_request.related_notes.count).to eq(2) expect(merge_request.related_notes).not_to include(system_note) @@ -2148,10 +2172,12 @@ RSpec.describe MergeRequest, factory_default: :keep, feature_category: :code_rev context 'when there is a pipeline with the diff head sha' do let!(:pipeline) do - create(:ci_empty_pipeline, - project: merge_request.project, - sha: merge_request.diff_head_sha, - ref: merge_request.source_branch) + create( + :ci_empty_pipeline, + project: merge_request.project, + sha: merge_request.diff_head_sha, + ref: merge_request.source_branch + ) end it 'updates the head pipeline' do @@ -2180,12 +2206,14 @@ RSpec.describe MergeRequest, factory_default: :keep, feature_category: :code_rev context 'when detached merge request pipeline is run on head ref of the merge request' do let!(:pipeline) do - create(:ci_pipeline, - source: :merge_request_event, - project: merge_request.source_project, - ref: merge_request.ref_path, - sha: sha, - merge_request: merge_request) + create( + :ci_pipeline, + source: :merge_request_event, + project: merge_request.source_project, + ref: merge_request.ref_path, + sha: sha, + merge_request: merge_request + ) end let(:sha) { merge_request.diff_head_sha } @@ -2545,11 +2573,13 @@ RSpec.describe MergeRequest, factory_default: :keep, feature_category: :code_rev let(:merge_request) { create(:merge_request, source_project: project) } let!(:base_pipeline) do - create(:ci_pipeline, - :with_test_reports, - project: project, - ref: merge_request.target_branch, - sha: merge_request.diff_base_sha) + create( + :ci_pipeline, + :with_test_reports, + project: project, + ref: merge_request.target_branch, + sha: merge_request.diff_base_sha + ) end before do @@ -2558,11 +2588,13 @@ RSpec.describe MergeRequest, factory_default: :keep, feature_category: :code_rev context 'when head pipeline has test reports' do let!(:head_pipeline) do - create(:ci_pipeline, - :with_test_reports, - project: project, - ref: merge_request.source_branch, - sha: merge_request.diff_head_sha) + create( + :ci_pipeline, + :with_test_reports, + project: project, + ref: merge_request.source_branch, + sha: merge_request.diff_head_sha + ) end context 'when reactive cache worker is parsing asynchronously' do @@ -2598,10 +2630,12 @@ RSpec.describe MergeRequest, factory_default: :keep, feature_category: :code_rev context 'when head pipeline does not have test reports' do let!(:head_pipeline) do - create(:ci_pipeline, - project: project, - ref: merge_request.source_branch, - sha: merge_request.diff_head_sha) + create( + :ci_pipeline, + project: project, + ref: merge_request.source_branch, + sha: merge_request.diff_head_sha + ) end it 'returns status and error message' do @@ -2903,10 +2937,12 @@ RSpec.describe MergeRequest, factory_default: :keep, feature_category: :code_rev before do project.add_maintainer(current_user) - ProcessCommitWorker.new.perform(project.id, - current_user.id, - project.commit(revert_commit_id).to_hash, - project.default_branch == branch) + ProcessCommitWorker.new.perform( + project.id, + current_user.id, + project.commit(revert_commit_id).to_hash, + project.default_branch == branch + ) end context 'but merged at timestamp cannot be found' do @@ -3003,10 +3039,13 @@ RSpec.describe MergeRequest, factory_default: :keep, feature_category: :code_rev context 'when resource event for the merge exists' do before do - SystemNoteService.change_status(merge_request, - merge_request.target_project, - user, - merge_request.state, nil) + SystemNoteService.change_status( + merge_request, + merge_request.target_project, + user, + merge_request.state, + nil + ) end it 'returns the resource event creation date' do @@ -3174,9 +3213,7 @@ RSpec.describe MergeRequest, factory_default: :keep, feature_category: :code_rev context 'with skip_ci_check option' do before do - allow(subject).to receive_messages(check_mergeability: nil, - can_be_merged?: true, - broken?: false) + allow(subject).to receive_messages(check_mergeability: nil, can_be_merged?: true, broken?: false) end where(:mergeable_ci_state, :skip_ci_check, :expected_mergeable) do @@ -3197,10 +3234,12 @@ RSpec.describe MergeRequest, factory_default: :keep, feature_category: :code_rev context 'with skip_discussions_check option' do before do - allow(subject).to receive_messages(mergeable_ci_state?: true, - check_mergeability: nil, - can_be_merged?: true, - broken?: false) + allow(subject).to receive_messages( + mergeable_ci_state?: true, + check_mergeability: nil, + can_be_merged?: true, + broken?: false + ) end where(:mergeable_discussions_state, :skip_discussions_check, :expected_mergeable) do @@ -3693,17 +3732,21 @@ RSpec.describe MergeRequest, factory_default: :keep, feature_category: :code_rev expect_any_instance_of(Discussions::UpdateDiffPositionService).to receive(:execute).with(discussion).and_call_original - subject.update_diff_discussion_positions(old_diff_refs: old_diff_refs, - new_diff_refs: new_diff_refs, - current_user: subject.author) + subject.update_diff_discussion_positions( + old_diff_refs: old_diff_refs, + new_diff_refs: new_diff_refs, + current_user: subject.author + ) end it 'does not call the resolve method' do expect(MergeRequests::ResolvedDiscussionNotificationService).not_to receive(:new) - subject.update_diff_discussion_positions(old_diff_refs: old_diff_refs, - new_diff_refs: new_diff_refs, - current_user: subject.author) + subject.update_diff_discussion_positions( + old_diff_refs: old_diff_refs, + new_diff_refs: new_diff_refs, + current_user: subject.author + ) end context 'when resolve_outdated_diff_discussions is set' do @@ -3718,9 +3761,11 @@ RSpec.describe MergeRequest, factory_default: :keep, feature_category: :code_rev expect_any_instance_of(MergeRequests::ResolvedDiscussionNotificationService) .to receive(:execute).with(subject) - subject.update_diff_discussion_positions(old_diff_refs: old_diff_refs, - new_diff_refs: new_diff_refs, - current_user: subject.author) + subject.update_diff_discussion_positions( + old_diff_refs: old_diff_refs, + new_diff_refs: new_diff_refs, + current_user: subject.author + ) end end @@ -3730,9 +3775,11 @@ RSpec.describe MergeRequest, factory_default: :keep, feature_category: :code_rev it 'does not call the resolve method' do expect(MergeRequests::ResolvedDiscussionNotificationService).not_to receive(:new) - subject.update_diff_discussion_positions(old_diff_refs: old_diff_refs, - new_diff_refs: new_diff_refs, - current_user: subject.author) + subject.update_diff_discussion_positions( + old_diff_refs: old_diff_refs, + new_diff_refs: new_diff_refs, + current_user: subject.author + ) end end @@ -3744,9 +3791,11 @@ RSpec.describe MergeRequest, factory_default: :keep, feature_category: :code_rev it 'does not call the resolve method' do expect(MergeRequests::ResolvedDiscussionNotificationService).not_to receive(:new) - subject.update_diff_discussion_positions(old_diff_refs: old_diff_refs, - new_diff_refs: new_diff_refs, - current_user: subject.author) + subject.update_diff_discussion_positions( + old_diff_refs: old_diff_refs, + new_diff_refs: new_diff_refs, + current_user: subject.author + ) end end end @@ -4883,10 +4932,7 @@ RSpec.describe MergeRequest, factory_default: :keep, feature_category: :code_rev let(:target_project) { create(:project, :public) } let(:source_project) { fork_project(target_project) } let(:merge_request) do - create(:merge_request, - source_project: source_project, - source_branch: 'fixes', - target_project: target_project) + create(:merge_request, source_project: source_project, source_branch: 'fixes', target_project: target_project) end let(:user) { create(:user) } @@ -4916,10 +4962,7 @@ RSpec.describe MergeRequest, factory_default: :keep, feature_category: :code_rev let(:user) { create(:user) } subject do - create(:merge_request, - merge_when_pipeline_succeeds: true, - merge_user: user, - author: user) + create(:merge_request, merge_when_pipeline_succeeds: true, merge_user: user, author: user) end context 'author is not a project member' do @@ -4943,9 +4986,7 @@ RSpec.describe MergeRequest, factory_default: :keep, feature_category: :code_rev let(:merge_user) { create(:user) } subject do - create(:merge_request, - merge_when_pipeline_succeeds: true, - merge_user: merge_user) + create(:merge_request, merge_when_pipeline_succeeds: true, merge_user: merge_user) end before do @@ -5098,20 +5139,24 @@ RSpec.describe MergeRequest, factory_default: :keep, feature_category: :code_rev let!(:project) { create(:project) } let!(:fork) { fork_project(project) } let!(:merge_request1) do - create(:merge_request, - :merge_when_pipeline_succeeds, - target_project: project, - target_branch: 'master', - source_project: project, - source_branch: 'feature-1') + create( + :merge_request, + :merge_when_pipeline_succeeds, + target_project: project, + target_branch: 'master', + source_project: project, + source_branch: 'feature-1' + ) end let!(:merge_request4) do - create(:merge_request, - target_project: project, - target_branch: 'master', - source_project: fork, - source_branch: 'fork-feature-2') + create( + :merge_request, + target_project: project, + target_branch: 'master', + source_project: fork, + source_branch: 'fork-feature-2' + ) end let(:query) { described_class.with_auto_merge_enabled } @@ -5653,4 +5698,31 @@ RSpec.describe MergeRequest, factory_default: :keep, feature_category: :code_rev subject.prepare end end + + describe '#check_for_spam?' do + let_it_be(:project) { create(:project, :public) } + let(:merge_request) { build_stubbed(:merge_request, source_project: project) } + + subject { merge_request.check_for_spam? } + + before do + merge_request.title = 'New title' + end + + it { is_expected.to eq(true) } + + context 'when project is private' do + let_it_be(:project) { create(:project, :private) } + + it { is_expected.to eq(false) } + end + + context 'when no spammable attribute has changed' do + before do + merge_request.title = merge_request.title_was + end + + it { is_expected.to eq(false) } + end + end end |