Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/models/merge_request_spec.rb')
-rw-r--r--spec/models/merge_request_spec.rb244
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