summaryrefslogtreecommitdiff
path: root/spec/services/merge_requests
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-11-19 08:27:35 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2020-11-19 08:27:35 +0000
commit7e9c479f7de77702622631cff2628a9c8dcbc627 (patch)
treec8f718a08e110ad7e1894510980d2155a6549197 /spec/services/merge_requests
parente852b0ae16db4052c1c567d9efa4facc81146e88 (diff)
downloadgitlab-ce-7e9c479f7de77702622631cff2628a9c8dcbc627.tar.gz
Add latest changes from gitlab-org/gitlab@13-6-stable-eev13.6.0-rc42
Diffstat (limited to 'spec/services/merge_requests')
-rw-r--r--spec/services/merge_requests/add_context_service_spec.rb16
-rw-r--r--spec/services/merge_requests/cleanup_refs_service_spec.rb56
-rw-r--r--spec/services/merge_requests/refresh_service_spec.rb12
-rw-r--r--spec/services/merge_requests/reopen_service_spec.rb10
4 files changed, 79 insertions, 15 deletions
diff --git a/spec/services/merge_requests/add_context_service_spec.rb b/spec/services/merge_requests/add_context_service_spec.rb
index 58ed91218d1..27b46a9023c 100644
--- a/spec/services/merge_requests/add_context_service_spec.rb
+++ b/spec/services/merge_requests/add_context_service_spec.rb
@@ -12,10 +12,20 @@ RSpec.describe MergeRequests::AddContextService do
subject(:service) { described_class.new(project, admin, merge_request: merge_request, commits: commits) }
describe "#execute" do
- it "adds context commit" do
- service.execute
+ context "when admin mode is enabled", :enable_admin_mode do
+ it "adds context commit" do
+ service.execute
- expect(merge_request.merge_request_context_commit_diff_files.length).to eq(2)
+ expect(merge_request.merge_request_context_commit_diff_files.length).to eq(2)
+ end
+ end
+
+ context "when admin mode is disabled" do
+ it "doesn't add context commit" do
+ subject.execute
+
+ expect(merge_request.merge_request_context_commit_diff_files.length).to eq(0)
+ end
end
context "when user doesn't have permission to update merge request" do
diff --git a/spec/services/merge_requests/cleanup_refs_service_spec.rb b/spec/services/merge_requests/cleanup_refs_service_spec.rb
index a051b3c9355..38c0e204e54 100644
--- a/spec/services/merge_requests/cleanup_refs_service_spec.rb
+++ b/spec/services/merge_requests/cleanup_refs_service_spec.rb
@@ -4,14 +4,15 @@ require 'spec_helper'
RSpec.describe MergeRequests::CleanupRefsService do
describe '.schedule' do
- let(:merge_request) { build(:merge_request) }
+ let(:merge_request) { create(:merge_request) }
- it 'schedules MergeRequestCleanupRefsWorker' do
- expect(MergeRequestCleanupRefsWorker)
- .to receive(:perform_in)
- .with(described_class::TIME_THRESHOLD, merge_request.id)
+ it 'creates a merge request cleanup schedule' do
+ freeze_time do
+ described_class.schedule(merge_request)
- described_class.schedule(merge_request)
+ expect(merge_request.reload.cleanup_schedule.scheduled_at)
+ .to eq(described_class::TIME_THRESHOLD.from_now)
+ end
end
end
@@ -20,6 +21,8 @@ RSpec.describe MergeRequests::CleanupRefsService do
# Need to re-enable this as it's being stubbed in spec_helper for
# performance reasons but is needed to run for this test.
allow(Gitlab::Git::KeepAround).to receive(:execute).and_call_original
+
+ merge_request.create_cleanup_schedule(scheduled_at: described_class::TIME_THRESHOLD.ago)
end
subject(:result) { described_class.new(merge_request).execute }
@@ -32,6 +35,7 @@ RSpec.describe MergeRequests::CleanupRefsService do
expect(result[:status]).to eq(:success)
expect(kept_around?(old_ref_head)).to be_truthy
expect(ref_head).to be_nil
+ expect(merge_request.cleanup_schedule.completed_at).to be_present
end
end
@@ -43,6 +47,7 @@ RSpec.describe MergeRequests::CleanupRefsService do
it 'does not fail' do
expect(result[:status]).to eq(:success)
+ expect(merge_request.cleanup_schedule.completed_at).to be_present
end
end
@@ -85,6 +90,44 @@ RSpec.describe MergeRequests::CleanupRefsService do
it_behaves_like 'service that does not clean up merge request refs'
end
+
+ context 'when cleanup schedule fails to update' do
+ before do
+ allow(merge_request.cleanup_schedule).to receive(:update).and_return(false)
+ end
+
+ it 'creates keep around ref and deletes merge request refs' do
+ old_ref_head = ref_head
+
+ aggregate_failures do
+ expect(result[:status]).to eq(:error)
+ expect(kept_around?(old_ref_head)).to be_truthy
+ expect(ref_head).to be_nil
+ expect(merge_request.cleanup_schedule.completed_at).not_to be_present
+ end
+ end
+ end
+
+ context 'when merge request is not scheduled to be cleaned up yet' do
+ before do
+ merge_request.cleanup_schedule.update!(scheduled_at: 1.day.from_now)
+ end
+
+ it_behaves_like 'service that does not clean up merge request refs'
+ end
+
+ context 'when repository no longer exists' do
+ before do
+ Repositories::DestroyService.new(merge_request.project.repository).execute
+ end
+
+ it 'does not fail and still mark schedule as complete' do
+ aggregate_failures do
+ expect(result[:status]).to eq(:success)
+ expect(merge_request.cleanup_schedule.completed_at).to be_present
+ end
+ end
+ end
end
shared_examples_for 'service that does not clean up merge request refs' do
@@ -92,6 +135,7 @@ RSpec.describe MergeRequests::CleanupRefsService do
aggregate_failures do
expect(result[:status]).to eq(:error)
expect(ref_head).to be_present
+ expect(merge_request.cleanup_schedule.completed_at).not_to be_present
end
end
end
diff --git a/spec/services/merge_requests/refresh_service_spec.rb b/spec/services/merge_requests/refresh_service_spec.rb
index d603cbb16aa..3ccf02fcdfb 100644
--- a/spec/services/merge_requests/refresh_service_spec.rb
+++ b/spec/services/merge_requests/refresh_service_spec.rb
@@ -683,14 +683,14 @@ RSpec.describe MergeRequests::RefreshService do
end
end
- context 'marking the merge request as work in progress' do
+ context 'marking the merge request as draft' do
let(:refresh_service) { service.new(@project, @user) }
before do
allow(refresh_service).to receive(:execute_hooks)
end
- it 'marks the merge request as work in progress from fixup commits' do
+ it 'marks the merge request as draft from fixup commits' do
fixup_merge_request = create(:merge_request,
source_project: @project,
source_branch: 'wip',
@@ -705,11 +705,11 @@ RSpec.describe MergeRequests::RefreshService do
expect(fixup_merge_request.work_in_progress?).to eq(true)
expect(fixup_merge_request.notes.last.note).to match(
- /marked as a \*\*Work In Progress\*\* from #{Commit.reference_pattern}/
+ /marked this merge request as \*\*draft\*\* from #{Commit.reference_pattern}/
)
end
- it 'references the commit that caused the Work in Progress status' do
+ it 'references the commit that caused the draft status' do
wip_merge_request = create(:merge_request,
source_project: @project,
source_branch: 'wip',
@@ -724,11 +724,11 @@ RSpec.describe MergeRequests::RefreshService do
refresh_service.execute(oldrev, newrev, 'refs/heads/wip')
expect(wip_merge_request.reload.notes.last.note).to eq(
- "marked as a **Work In Progress** from #{wip_commit.id}"
+ "marked this merge request as **draft** from #{wip_commit.id}"
)
end
- it 'does not mark as WIP based on commits that do not belong to an MR' do
+ it 'does not mark as draft based on commits that do not belong to an MR' do
allow(refresh_service).to receive(:find_new_commits)
refresh_service.instance_variable_set("@commits", [
double(
diff --git a/spec/services/merge_requests/reopen_service_spec.rb b/spec/services/merge_requests/reopen_service_spec.rb
index ffc2ebb344c..2bd83dc36a8 100644
--- a/spec/services/merge_requests/reopen_service_spec.rb
+++ b/spec/services/merge_requests/reopen_service_spec.rb
@@ -23,6 +23,8 @@ RSpec.describe MergeRequests::ReopenService do
before do
allow(service).to receive(:execute_hooks)
+ merge_request.create_cleanup_schedule(scheduled_at: Time.current)
+ merge_request.update_column(:merge_ref_sha, 'abc123')
perform_enqueued_jobs do
service.execute(merge_request)
@@ -43,6 +45,14 @@ RSpec.describe MergeRequests::ReopenService do
expect(email.subject).to include(merge_request.title)
end
+ it 'destroys cleanup schedule record' do
+ expect(merge_request.reload.cleanup_schedule).to be_nil
+ end
+
+ it 'clears the cached merge_ref_sha' do
+ expect(merge_request.reload.merge_ref_sha).to be_nil
+ end
+
context 'note creation' do
it 'creates resource state event about merge_request reopen' do
event = merge_request.resource_state_events.last