diff options
Diffstat (limited to 'spec/services/projects')
7 files changed, 48 insertions, 134 deletions
diff --git a/spec/services/projects/after_rename_service_spec.rb b/spec/services/projects/after_rename_service_spec.rb index a8db87e48d0..a9329f092fa 100644 --- a/spec/services/projects/after_rename_service_spec.rb +++ b/spec/services/projects/after_rename_service_spec.rb @@ -64,22 +64,11 @@ RSpec.describe Projects::AfterRenameService do allow(project_storage).to receive(:rename_repo) { true } end - context 'when the project has pages deployed' do - it 'schedules a move of the pages directory' do - allow(project).to receive(:pages_deployed?).and_return(true) - - expect(PagesTransferWorker).to receive(:perform_async).with('rename_project', anything) - - service_execute - end - end - context 'when the project does not have pages deployed' do it 'does nothing with the pages directory' do allow(project).to receive(:pages_deployed?).and_return(false) expect(PagesTransferWorker).not_to receive(:perform_async) - expect(Gitlab::PagesTransfer).not_to receive(:new) service_execute end @@ -172,29 +161,6 @@ RSpec.describe Projects::AfterRenameService do end end - context 'gitlab pages' do - context 'when the project has pages deployed' do - it 'schedules a move of the pages directory' do - allow(project).to receive(:pages_deployed?).and_return(true) - - expect(PagesTransferWorker).to receive(:perform_async).with('rename_project', anything) - - service_execute - end - end - - context 'when the project does not have pages deployed' do - it 'does nothing with the pages directory' do - allow(project).to receive(:pages_deployed?).and_return(false) - - expect(PagesTransferWorker).not_to receive(:perform_async) - expect(Gitlab::PagesTransfer).not_to receive(:new) - - service_execute - end - end - end - context 'attachments' do let(:uploader) { create(:upload, :issuable_upload, :with_file, model: project) } let(:file_uploader) { build(:file_uploader, project: project) } diff --git a/spec/services/projects/autocomplete_service_spec.rb b/spec/services/projects/autocomplete_service_spec.rb index ed043bacf31..54a21d2f22b 100644 --- a/spec/services/projects/autocomplete_service_spec.rb +++ b/spec/services/projects/autocomplete_service_spec.rb @@ -158,7 +158,6 @@ RSpec.describe Projects::AutocompleteService do subject { described_class.new(project, user).contacts.as_json } before do - stub_feature_flags(customer_relations: true) group.add_developer(user) end diff --git a/spec/services/projects/destroy_rollback_service_spec.rb b/spec/services/projects/destroy_rollback_service_spec.rb deleted file mode 100644 index 3eaacc8c1e7..00000000000 --- a/spec/services/projects/destroy_rollback_service_spec.rb +++ /dev/null @@ -1,46 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -RSpec.describe Projects::DestroyRollbackService do - let_it_be(:user) { create(:user) } - let_it_be(:project) { create(:project, :repository, namespace: user.namespace) } - - let(:repository) { project.repository } - let(:repository_storage) { project.repository_storage } - - subject { described_class.new(project, user, {}).execute } - - describe '#execute' do - let(:path) { repository.disk_path + '.git' } - let(:removal_path) { "#{repository.disk_path}+#{project.id}#{Repositories::DestroyService::DELETED_FLAG}.git" } - - before do - aggregate_failures do - expect(TestEnv.storage_dir_exists?(repository_storage, path)).to be_truthy - expect(TestEnv.storage_dir_exists?(repository_storage, removal_path)).to be_falsey - end - - # Don't run sidekiq to check if renamed repository exists - Sidekiq::Testing.fake! { destroy_project(project, user, {}) } - - aggregate_failures do - expect(TestEnv.storage_dir_exists?(repository_storage, path)).to be_falsey - expect(TestEnv.storage_dir_exists?(repository_storage, removal_path)).to be_truthy - end - end - - it 'restores the repositories' do - Sidekiq::Testing.fake! { subject } - - aggregate_failures do - expect(TestEnv.storage_dir_exists?(repository_storage, path)).to be_truthy - expect(TestEnv.storage_dir_exists?(repository_storage, removal_path)).to be_falsey - end - end - end - - def destroy_project(project, user, params = {}) - Projects::DestroyService.new(project, user, params).execute - end -end diff --git a/spec/services/projects/destroy_service_spec.rb b/spec/services/projects/destroy_service_spec.rb index cd923720631..c00438199fd 100644 --- a/spec/services/projects/destroy_service_spec.rb +++ b/spec/services/projects/destroy_service_spec.rb @@ -9,7 +9,6 @@ RSpec.describe Projects::DestroyService, :aggregate_failures, :event_store_publi let!(:project) { create(:project, :repository, namespace: user.namespace) } let(:path) { project.repository.disk_path } - let(:remove_path) { removal_path(path) } let(:async) { false } # execute or async_execute before do @@ -24,7 +23,6 @@ RSpec.describe Projects::DestroyService, :aggregate_failures, :event_store_publi expect(Project.unscoped.all).not_to include(project) expect(project.gitlab_shell.repository_exists?(project.repository_storage, path + '.git')).to be_falsey - expect(project.gitlab_shell.repository_exists?(project.repository_storage, remove_path + '.git')).to be_falsey end it 'publishes a ProjectDeleted event with project id and namespace id' do @@ -73,6 +71,18 @@ RSpec.describe Projects::DestroyService, :aggregate_failures, :event_store_publi end it_behaves_like 'deleting the project' + + context 'when project is undergoing refresh' do + let!(:build_artifacts_size_refresh) { create(:project_build_artifacts_size_refresh, :pending, project: project) } + + it 'does not log about artifact deletion but continues to delete artifacts' do + expect(Gitlab::ProjectStatsRefreshConflictsLogger).not_to receive(:warn_artifact_deletion_during_stats_refresh) + + expect { destroy_project(project, user, {}) } + .to change { Ci::JobArtifact.count }.by(-2) + .and change { Projects::BuildArtifactsSizeRefresh.count }.by(-1) + end + end end end @@ -192,10 +202,6 @@ RSpec.describe Projects::DestroyService, :aggregate_failures, :event_store_publi it do expect(project.gitlab_shell.repository_exists?(project.repository_storage, path + '.git')).to be_falsey end - - it do - expect(project.gitlab_shell.repository_exists?(project.repository_storage, remove_path + '.git')).to be_truthy - end end context 'when flushing caches fail due to Git errors' do @@ -392,36 +398,13 @@ RSpec.describe Projects::DestroyService, :aggregate_failures, :event_store_publi end end - context 'repository +deleted path removal' do - context 'regular phase' do - it 'schedules +deleted removal of existing repos' do - service = described_class.new(project, user, {}) - allow(service).to receive(:schedule_stale_repos_removal) - - expect(Repositories::ShellDestroyService).to receive(:new).and_call_original - expect(GitlabShellWorker).to receive(:perform_in) - .with(5.minutes, :remove_repository, project.repository_storage, removal_path(project.disk_path)) - - service.execute + context 'repository removal' do + it 'removal of existing repos' do + expect_next_instances_of(Repositories::DestroyService, 2) do |instance| + expect(instance).to receive(:execute).and_return(status: :success) end - end - - context 'stale cleanup' do - let(:async) { true } - - it 'schedules +deleted wiki and repo removal' do - allow(ProjectDestroyWorker).to receive(:perform_async) - - expect(Repositories::ShellDestroyService).to receive(:new).with(project.repository).and_call_original - expect(GitlabShellWorker).to receive(:perform_in) - .with(10.minutes, :remove_repository, project.repository_storage, removal_path(project.disk_path)) - - expect(Repositories::ShellDestroyService).to receive(:new).with(project.wiki.repository).and_call_original - expect(GitlabShellWorker).to receive(:perform_in) - .with(10.minutes, :remove_repository, project.repository_storage, removal_path(project.wiki.disk_path)) - destroy_project(project, user, {}) - end + described_class.new(project, user, {}).execute end end @@ -480,7 +463,6 @@ RSpec.describe Projects::DestroyService, :aggregate_failures, :event_store_publi expect do destroy_project(project, user) end.to change(WebHook, :count).by(-2) - .and change(WebHookLog, :count).by(-1) end context 'when an error is raised deleting webhooks' do @@ -541,7 +523,6 @@ RSpec.describe Projects::DestroyService, :aggregate_failures, :event_store_publi expect(Project.unscoped.all).not_to include(project) expect(project.gitlab_shell.repository_exists?(project.repository_storage, path + '.git')).to be_falsey - expect(project.gitlab_shell.repository_exists?(project.repository_storage, remove_path + '.git')).to be_falsey expect(project.all_pipelines).to be_empty expect(project.builds).to be_empty end @@ -550,8 +531,4 @@ RSpec.describe Projects::DestroyService, :aggregate_failures, :event_store_publi def destroy_project(project, user, params = {}) described_class.new(project, user, params).public_send(async ? :async_execute : :execute) end - - def removal_path(path) - "#{path}+#{project.id}#{Repositories::DestroyService::DELETED_FLAG}" - end end diff --git a/spec/services/projects/refresh_build_artifacts_size_statistics_service_spec.rb b/spec/services/projects/refresh_build_artifacts_size_statistics_service_spec.rb index 41487e9ea48..6a715312097 100644 --- a/spec/services/projects/refresh_build_artifacts_size_statistics_service_spec.rb +++ b/spec/services/projects/refresh_build_artifacts_size_statistics_service_spec.rb @@ -52,6 +52,12 @@ RSpec.describe Projects::RefreshBuildArtifactsSizeStatisticsService, :clean_gitl expect { service.execute }.to change { refresh.reload.last_job_artifact_id.to_i }.to(artifact_3.id) end + it 'updates the last_job_artifact_id to the ID of the last artifact from the project' do + expect { service.execute } + .to change { refresh.reload.last_job_artifact_id_on_refresh_start.to_i } + .to(project.job_artifacts.last.id) + end + it 'requeues the refresh job' do service.execute expect(refresh.reload).to be_pending @@ -63,7 +69,8 @@ RSpec.describe Projects::RefreshBuildArtifactsSizeStatisticsService, :clean_gitl :project_build_artifacts_size_refresh, :pending, project: project, - last_job_artifact_id: artifact_3.id + last_job_artifact_id: artifact_3.id, + last_job_artifact_id_on_refresh_start: artifact_4.id ) end @@ -77,6 +84,10 @@ RSpec.describe Projects::RefreshBuildArtifactsSizeStatisticsService, :clean_gitl expect(refresh.reload.last_job_artifact_id).to eq(artifact_3.id) end + it 'keeps the last_job_artifact_id_on_refresh_start unchanged' do + expect(refresh.reload.last_job_artifact_id_on_refresh_start).to eq(artifact_4.id) + end + it 'keeps the state of the refresh record at running' do expect(refresh.reload).to be_running end diff --git a/spec/services/projects/transfer_service_spec.rb b/spec/services/projects/transfer_service_spec.rb index e547ace1d9f..bebe80b710b 100644 --- a/spec/services/projects/transfer_service_spec.rb +++ b/spec/services/projects/transfer_service_spec.rb @@ -53,9 +53,6 @@ RSpec.describe Projects::TransferService do allow_next_instance_of(Gitlab::UploadsTransfer) do |service| allow(service).to receive(:move_project).and_return(true) end - allow_next_instance_of(Gitlab::PagesTransfer) do |service| - allow(service).to receive(:move_project).and_return(true) - end group.add_owner(user) end @@ -725,15 +722,6 @@ RSpec.describe Projects::TransferService do group.add_owner(user) end - it 'schedules a job when pages are deployed' do - project.mark_pages_as_deployed - - expect(PagesTransferWorker).to receive(:perform_async) - .with("move_project", [project.path, user.namespace.full_path, group.full_path]) - - execute_transfer - end - it 'does not schedule a job when no pages are deployed' do expect(PagesTransferWorker).not_to receive(:perform_async) diff --git a/spec/services/projects/update_pages_service_spec.rb b/spec/services/projects/update_pages_service_spec.rb index 777162b6196..cbbed82aa0b 100644 --- a/spec/services/projects/update_pages_service_spec.rb +++ b/spec/services/projects/update_pages_service_spec.rb @@ -205,6 +205,25 @@ RSpec.describe Projects::UpdatePagesService do include_examples 'fails with outdated reference message' end end + + context 'when uploaded deployment size is wrong' do + it 'raises an error' do + allow_next_instance_of(PagesDeployment) do |deployment| + allow(deployment) + .to receive(:size) + .and_return(file.size + 1) + end + + expect do + expect(execute).not_to eq(:success) + + expect(GenericCommitStatus.last.description).to eq("Error: The uploaded artifact size does not match the expected value.") + project.pages_metadatum.reload + expect(project.pages_metadatum).not_to be_deployed + expect(project.pages_metadatum.pages_deployment).to be_ni + end.to raise_error(Projects::UpdatePagesService::WrongUploadedDeploymentSizeError) + end + end end end |