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:
authorGitLab Bot <gitlab-bot@gitlab.com>2022-02-15 11:58:20 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2022-02-15 11:58:20 +0300
commit59c9ff627603da03f6a7c330d57a2c765b3c24a3 (patch)
treedd8f3a2fbc9564818a77d2d8798fcc464d220e8e /spec/services
parent30b4659f2c485885324fd8d67fcd92a2939310a3 (diff)
Add latest changes from gitlab-org/gitlab@14-7-stable-ee
Diffstat (limited to 'spec/services')
-rw-r--r--spec/services/packages/composer/create_package_service_spec.rb12
-rw-r--r--spec/services/packages/debian/find_or_create_package_service_spec.rb12
-rw-r--r--spec/services/packages/debian/process_changes_service_spec.rb24
-rw-r--r--spec/services/packages/generic/find_or_create_package_service_spec.rb17
-rw-r--r--spec/services/packages/helm/process_file_service_spec.rb13
-rw-r--r--spec/services/packages/maven/find_or_create_package_service_spec.rb8
-rw-r--r--spec/services/packages/npm/create_package_service_spec.rb14
-rw-r--r--spec/services/packages/nuget/update_package_from_metadata_service_spec.rb14
-rw-r--r--spec/services/packages/pypi/create_package_service_spec.rb21
-rw-r--r--spec/services/packages/rubygems/process_gem_service_spec.rb22
-rw-r--r--spec/services/packages/terraform_module/create_package_service_spec.rb26
11 files changed, 176 insertions, 7 deletions
diff --git a/spec/services/packages/composer/create_package_service_spec.rb b/spec/services/packages/composer/create_package_service_spec.rb
index 593777faa55..b04a6c8382f 100644
--- a/spec/services/packages/composer/create_package_service_spec.rb
+++ b/spec/services/packages/composer/create_package_service_spec.rb
@@ -88,13 +88,23 @@ RSpec.describe Packages::Composer::CreatePackageService do
end
context 'belonging to another project' do
- let(:other_project) { create(:project) }
+ let(:other_project) { create(:project)}
let!(:other_package) { create(:composer_package, name: package_name, version: 'dev-master', project: other_project) }
it 'fails with an error' do
expect { subject }
.to raise_error(/is already taken/)
end
+
+ context 'with pending_destruction package' do
+ let!(:other_package) { create(:composer_package, :pending_destruction, name: package_name, version: 'dev-master', project: other_project) }
+
+ it 'creates the package' do
+ expect { subject }
+ .to change { Packages::Package.composer.count }.by(1)
+ .and change { Packages::Composer::Metadatum.count }.by(1)
+ end
+ end
end
context 'same name but of different type' do
diff --git a/spec/services/packages/debian/find_or_create_package_service_spec.rb b/spec/services/packages/debian/find_or_create_package_service_spec.rb
index f06f86b0146..84a0e1465e8 100644
--- a/spec/services/packages/debian/find_or_create_package_service_spec.rb
+++ b/spec/services/packages/debian/find_or_create_package_service_spec.rb
@@ -32,8 +32,6 @@ RSpec.describe Packages::Debian::FindOrCreatePackageService do
end
context 'run twice' do
- let(:subject2) { service.execute }
-
let(:package2) { service.execute.payload[:package] }
it 'returns the same object' do
@@ -42,6 +40,16 @@ RSpec.describe Packages::Debian::FindOrCreatePackageService do
expect(package2.id).to eq(package.id)
end
+
+ context 'with package marked as pending_destruction' do
+ it 'creates a new package' do
+ expect { subject }.to change { ::Packages::Package.count }.by(1)
+ package.pending_destruction!
+ expect { package2 }.to change { ::Packages::Package.count }.by(1)
+
+ expect(package2.id).not_to eq(package.id)
+ end
+ end
end
context 'with non-existing distribution' do
diff --git a/spec/services/packages/debian/process_changes_service_spec.rb b/spec/services/packages/debian/process_changes_service_spec.rb
index 8e5e36cdbcb..52bcddb6f5e 100644
--- a/spec/services/packages/debian/process_changes_service_spec.rb
+++ b/spec/services/packages/debian/process_changes_service_spec.rb
@@ -25,6 +25,30 @@ RSpec.describe Packages::Debian::ProcessChangesService do
expect(created_package.version).to eq '1.2.3~alpha2'
expect(created_package.creator).to eq user
end
+
+ context 'with existing package' do
+ let_it_be_with_reload(:existing_package) { create(:debian_package, name: 'sample', version: '1.2.3~alpha2', project: distribution.project) }
+
+ before do
+ existing_package.update!(debian_distribution: distribution)
+ end
+
+ it 'does not create a package' do
+ expect { subject.execute }
+ .to not_change { Packages::Package.count }
+ .and not_change { Packages::PackageFile.count }
+ end
+
+ context 'marked as pending_destruction' do
+ it 'creates a package' do
+ existing_package.pending_destruction!
+
+ expect { subject.execute }
+ .to change { Packages::Package.count }.by(1)
+ .and not_change { Packages::PackageFile.count }
+ end
+ end
+ end
end
context 'with invalid package file' do
diff --git a/spec/services/packages/generic/find_or_create_package_service_spec.rb b/spec/services/packages/generic/find_or_create_package_service_spec.rb
index a045cb36418..10ec917bc99 100644
--- a/spec/services/packages/generic/find_or_create_package_service_spec.rb
+++ b/spec/services/packages/generic/find_or_create_package_service_spec.rb
@@ -83,6 +83,23 @@ RSpec.describe Packages::Generic::FindOrCreatePackageService do
expect(package.reload.original_build_info.pipeline).to eq(pipeline)
end
end
+
+ context 'when a pending_destruction package exists', :aggregate_failures do
+ let!(:package) { project.packages.generic.create!(params.merge(status: :pending_destruction)) }
+
+ it 'creates a new package' do
+ service = described_class.new(project, user, params)
+
+ expect { service.execute }.to change { project.packages.generic.count }.by(1)
+
+ package = project.packages.generic.last
+
+ expect(package.creator).to eq(user)
+ expect(package.name).to eq('mypackage')
+ expect(package.version).to eq('0.0.1')
+ expect(package.original_build_info).to be_nil
+ end
+ end
end
end
end
diff --git a/spec/services/packages/helm/process_file_service_spec.rb b/spec/services/packages/helm/process_file_service_spec.rb
index 2e98590a4f4..d22c1de2335 100644
--- a/spec/services/packages/helm/process_file_service_spec.rb
+++ b/spec/services/packages/helm/process_file_service_spec.rb
@@ -53,6 +53,19 @@ RSpec.describe Packages::Helm::ProcessFileService do
expect(package_file.helm_file_metadatum.channel).to eq(channel)
expect(package_file.helm_file_metadatum.metadata).to eq(expected)
end
+
+ context 'marked as pending_destruction' do
+ before do
+ existing_package.pending_destruction!
+ end
+
+ it 'reuses the processing package' do
+ expect { execute }
+ .to not_change { Packages::Package.count }
+ .and not_change { Packages::PackageFile.count }
+ .and change { Packages::Helm::FileMetadatum.count }.by(1)
+ end
+ end
end
context 'with a valid file' do
diff --git a/spec/services/packages/maven/find_or_create_package_service_spec.rb b/spec/services/packages/maven/find_or_create_package_service_spec.rb
index 59f5677f526..cca074e2fa6 100644
--- a/spec/services/packages/maven/find_or_create_package_service_spec.rb
+++ b/spec/services/packages/maven/find_or_create_package_service_spec.rb
@@ -81,6 +81,14 @@ RSpec.describe Packages::Maven::FindOrCreatePackageService do
let!(:existing_package) { create(:maven_package, name: path, version: version, project: project) }
it_behaves_like 'reuse existing package'
+
+ context 'marked as pending_destruction' do
+ before do
+ existing_package.pending_destruction!
+ end
+
+ it_behaves_like 'create package'
+ end
end
context 'without existing package' do
diff --git a/spec/services/packages/npm/create_package_service_spec.rb b/spec/services/packages/npm/create_package_service_spec.rb
index a5b36527565..5b41055397b 100644
--- a/spec/services/packages/npm/create_package_service_spec.rb
+++ b/spec/services/packages/npm/create_package_service_spec.rb
@@ -112,6 +112,20 @@ RSpec.describe Packages::Npm::CreatePackageService do
it { expect(subject[:http_status]).to eq 403 }
it { expect(subject[:message]).to be 'Package already exists.' }
+
+ context 'marked as pending_destruction' do
+ before do
+ existing_package.pending_destruction!
+ end
+
+ it 'creates a new package' do
+ expect { subject }
+ .to change { Packages::Package.count }.by(1)
+ .and change { Packages::Package.npm.count }.by(1)
+ .and change { Packages::Tag.count }.by(1)
+ .and change { Packages::Npm::Metadatum.count }.by(1)
+ end
+ end
end
describe 'max file size validation' do
diff --git a/spec/services/packages/nuget/update_package_from_metadata_service_spec.rb b/spec/services/packages/nuget/update_package_from_metadata_service_spec.rb
index d682ee12ed5..6a4dbeb10dc 100644
--- a/spec/services/packages/nuget/update_package_from_metadata_service_spec.rb
+++ b/spec/services/packages/nuget/update_package_from_metadata_service_spec.rb
@@ -106,6 +106,20 @@ RSpec.describe Packages::Nuget::UpdatePackageFromMetadataService, :clean_gitlab_
it_behaves_like 'taking the lease'
it_behaves_like 'not updating the package if the lease is taken'
+
+ context 'marked as pending_destruction' do
+ before do
+ existing_package.pending_destruction!
+ end
+
+ it 'reuses the processing package', :aggregate_failures do
+ expect { subject }
+ .to not_change { ::Packages::Package.count }
+ .and change { Packages::Dependency.count }.by(1)
+ .and change { Packages::DependencyLink.count }.by(1)
+ .and change { ::Packages::Nuget::Metadatum.count }.by(0)
+ end
+ end
end
context 'with a nuspec file with metadata' do
diff --git a/spec/services/packages/pypi/create_package_service_spec.rb b/spec/services/packages/pypi/create_package_service_spec.rb
index a932cf73eb7..3d0c10724d4 100644
--- a/spec/services/packages/pypi/create_package_service_spec.rb
+++ b/spec/services/packages/pypi/create_package_service_spec.rb
@@ -72,6 +72,27 @@ RSpec.describe Packages::Pypi::CreatePackageService do
.and change { Packages::PackageFile.count }.by(0)
.and raise_error(/File name has already been taken/)
end
+
+ context 'with a pending_destruction package', :aggregate_failures do
+ before do
+ Packages::Package.pypi.last.pending_destruction!
+ end
+
+ it 'creates a new package' do
+ expect { subject }
+ .to change { Packages::Package.pypi.count }.by(1)
+ .and change { Packages::PackageFile.count }.by(1)
+
+ expect(created_package.name).to eq 'foo'
+ expect(created_package.version).to eq '1.0'
+
+ expect(created_package.pypi_metadatum.required_python).to eq '>=2.7'
+ expect(created_package.package_files.size).to eq 1
+ expect(created_package.package_files.first.file_name).to eq 'foo.tgz'
+ expect(created_package.package_files.first.file_sha256).to eq 'abc'
+ expect(created_package.package_files.first.file_md5).to eq 'def'
+ end
+ end
end
context 'without an existing file' do
diff --git a/spec/services/packages/rubygems/process_gem_service_spec.rb b/spec/services/packages/rubygems/process_gem_service_spec.rb
index 64deb39c6d8..caff338ef53 100644
--- a/spec/services/packages/rubygems/process_gem_service_spec.rb
+++ b/spec/services/packages/rubygems/process_gem_service_spec.rb
@@ -85,6 +85,28 @@ RSpec.describe Packages::Rubygems::ProcessGemService do
end
end
+ context 'when the package already exists marked as pending_destruction' do
+ let_it_be_with_reload(:existing_package) { create(:rubygems_package, name: 'package', version: '0.0.1', project: package.project) }
+
+ let(:sub_service) { double }
+
+ before do
+ expect(Packages::Rubygems::MetadataExtractionService).to receive(:new).with(package, gemspec).and_return(sub_service)
+ expect(Packages::Rubygems::CreateGemspecService).to receive(:new).with(package, gemspec).and_return(sub_service)
+ expect(Packages::Rubygems::CreateDependenciesService).to receive(:new).with(package, gemspec).and_return(sub_service)
+
+ expect(sub_service).to receive(:execute).exactly(3).times.and_return(true)
+
+ existing_package.pending_destruction!
+ end
+
+ it 'reuses the processing package' do
+ expect { subject }
+ .to not_change { package.project.packages.count }
+ .and not_change { existing_package.package_files.count }
+ end
+ end
+
context 'sub-service failure' do
before do
expect(Packages::Rubygems::MetadataExtractionService).to receive(:new).with(package, gemspec).and_raise(::Packages::Rubygems::ProcessGemService::ExtractionError.new('failure'))
diff --git a/spec/services/packages/terraform_module/create_package_service_spec.rb b/spec/services/packages/terraform_module/create_package_service_spec.rb
index e172aa726fd..f73b5682835 100644
--- a/spec/services/packages/terraform_module/create_package_service_spec.rb
+++ b/spec/services/packages/terraform_module/create_package_service_spec.rb
@@ -6,8 +6,6 @@ RSpec.describe Packages::TerraformModule::CreatePackageService do
let_it_be(:project) { create(:project, namespace: namespace) }
let_it_be(:user) { create(:user) }
let_it_be(:sha256) { '440e5e148a25331bbd7991575f7d54933c0ebf6cc735a18ee5066ac1381bb590' }
- let_it_be(:temp_file) { Tempfile.new('test') }
- let_it_be(:file) { UploadedFile.new(temp_file.path, sha256: sha256) }
let(:overrides) { {} }
@@ -16,7 +14,7 @@ RSpec.describe Packages::TerraformModule::CreatePackageService do
module_name: 'foo',
module_system: 'bar',
module_version: '1.0.1',
- file: file,
+ file: UploadedFile.new(Tempfile.new('test').path, sha256: sha256),
file_name: 'foo-bar-1.0.1.tgz'
}.merge(overrides)
end
@@ -24,7 +22,7 @@ RSpec.describe Packages::TerraformModule::CreatePackageService do
subject { described_class.new(project, user, params).execute }
describe '#execute' do
- context 'valid package' do
+ shared_examples 'creating a package' do
it 'creates a package' do
expect { subject }
.to change { ::Packages::Package.count }.by(1)
@@ -32,12 +30,24 @@ RSpec.describe Packages::TerraformModule::CreatePackageService do
end
end
+ context 'valid package' do
+ it_behaves_like 'creating a package'
+ end
+
context 'package already exists elsewhere' do
let(:project2) { create(:project, namespace: namespace) }
let!(:existing_package) { create(:terraform_module_package, project: project2, name: 'foo/bar', version: '1.0.0') }
it { expect(subject[:http_status]).to eq 403 }
it { expect(subject[:message]).to be 'Access Denied' }
+
+ context 'marked as pending_destruction' do
+ before do
+ existing_package.pending_destruction!
+ end
+
+ it_behaves_like 'creating a package'
+ end
end
context 'version already exists' do
@@ -45,6 +55,14 @@ RSpec.describe Packages::TerraformModule::CreatePackageService do
it { expect(subject[:http_status]).to eq 403 }
it { expect(subject[:message]).to be 'Package version already exists.' }
+
+ context 'marked as pending_destruction' do
+ before do
+ existing_version.pending_destruction!
+ end
+
+ it_behaves_like 'creating a package'
+ end
end
context 'with empty version' do