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/services/projects/destroy_service_spec.rb')
-rw-r--r--spec/services/projects/destroy_service_spec.rb33
1 files changed, 29 insertions, 4 deletions
diff --git a/spec/services/projects/destroy_service_spec.rb b/spec/services/projects/destroy_service_spec.rb
index f7f02769f6a..ff2de45661f 100644
--- a/spec/services/projects/destroy_service_spec.rb
+++ b/spec/services/projects/destroy_service_spec.rb
@@ -4,6 +4,7 @@ require 'spec_helper'
RSpec.describe Projects::DestroyService, :aggregate_failures, :event_store_publisher do
include ProjectForksHelper
+ include BatchDestroyDependentAssociationsHelper
let_it_be(:user) { create(:user) }
@@ -331,8 +332,8 @@ RSpec.describe Projects::DestroyService, :aggregate_failures, :event_store_publi
context 'when image repository deletion succeeds' do
it 'removes tags' do
- expect_any_instance_of(ContainerRepository)
- .to receive(:delete_tags!).and_return(true)
+ expect_any_instance_of(Projects::ContainerRepository::CleanupTagsService)
+ .to receive(:execute).and_return({ status: :success })
destroy_project(project, user)
end
@@ -340,8 +341,8 @@ RSpec.describe Projects::DestroyService, :aggregate_failures, :event_store_publi
context 'when image repository deletion fails' do
it 'raises an exception' do
- expect_any_instance_of(ContainerRepository)
- .to receive(:delete_tags!).and_raise(RuntimeError)
+ expect_any_instance_of(Projects::ContainerRepository::CleanupTagsService)
+ .to receive(:execute).and_raise(RuntimeError)
expect(destroy_project(project, user)).to be false
end
@@ -548,6 +549,30 @@ RSpec.describe Projects::DestroyService, :aggregate_failures, :event_store_publi
end
end
+ context 'associations destoyed in batches' do
+ let!(:merge_request) { create(:merge_request, source_project: project) }
+ let!(:issue) { create(:issue, project: project) }
+ let!(:label) { create(:label, project: project) }
+
+ it 'destroys the associations marked as `dependent: :destroy`, in batches' do
+ query_recorder = ActiveRecord::QueryRecorder.new do
+ destroy_project(project, user, {})
+ end
+
+ expect(project.merge_requests).to be_empty
+ expect(project.issues).to be_empty
+ expect(project.labels).to be_empty
+
+ expected_queries = [
+ delete_in_batches_regexps(:merge_requests, :target_project_id, project, [merge_request]),
+ delete_in_batches_regexps(:issues, :project_id, project, [issue]),
+ delete_in_batches_regexps(:labels, :project_id, project, [label])
+ ].flatten
+
+ expect(query_recorder.log).to include(*expected_queries)
+ end
+ end
+
def destroy_project(project, user, params = {})
described_class.new(project, user, params).public_send(async ? :async_execute : :execute)
end