diff options
Diffstat (limited to 'spec/services/packages')
10 files changed, 117 insertions, 2 deletions
diff --git a/spec/services/packages/composer/create_package_service_spec.rb b/spec/services/packages/composer/create_package_service_spec.rb index 526c7b4929b..553d58fdd86 100644 --- a/spec/services/packages/composer/create_package_service_spec.rb +++ b/spec/services/packages/composer/create_package_service_spec.rb @@ -8,6 +8,7 @@ RSpec.describe Packages::Composer::CreatePackageService do let_it_be(:json) { { name: package_name }.to_json } let_it_be(:project) { create(:project, :custom_repo, files: { 'composer.json' => json } ) } let_it_be(:user) { create(:user) } + let(:params) do { branch: branch, diff --git a/spec/services/packages/conan/search_service_spec.rb b/spec/services/packages/conan/search_service_spec.rb index 39d284ee088..55dcdfe646d 100644 --- a/spec/services/packages/conan/search_service_spec.rb +++ b/spec/services/packages/conan/search_service_spec.rb @@ -5,6 +5,7 @@ require 'spec_helper' RSpec.describe Packages::Conan::SearchService do let_it_be(:user) { create(:user) } let_it_be(:project) { create(:project, :public) } + let!(:conan_package) { create(:conan_package, project: project) } let!(:conan_package2) { create(:conan_package, project: project) } diff --git a/spec/services/packages/create_package_file_service_spec.rb b/spec/services/packages/create_package_file_service_spec.rb index e4b4b15ebf9..2ff00ea8568 100644 --- a/spec/services/packages/create_package_file_service_spec.rb +++ b/spec/services/packages/create_package_file_service_spec.rb @@ -4,6 +4,7 @@ require 'spec_helper' RSpec.describe Packages::CreatePackageFileService do let_it_be(:package) { create(:maven_package) } let_it_be(:user) { create(:user) } + let(:service) { described_class.new(package, params) } describe '#execute' 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 3582b1f1dc3..f06f86b0146 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 @@ -6,6 +6,7 @@ RSpec.describe Packages::Debian::FindOrCreatePackageService do let_it_be(:distribution) { create(:debian_project_distribution) } let_it_be(:project) { distribution.project } let_it_be(:user) { create(:user) } + let(:params) { { name: 'foo', version: '1.0+debian', distribution_name: distribution.codename } } subject(:service) { described_class.new(project, user, params) } diff --git a/spec/services/packages/destroy_package_service_spec.rb b/spec/services/packages/destroy_package_service_spec.rb new file mode 100644 index 00000000000..92db8da968c --- /dev/null +++ b/spec/services/packages/destroy_package_service_spec.rb @@ -0,0 +1,61 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Packages::DestroyPackageService do + let_it_be(:user) { create(:user) } + + let!(:package) { create(:npm_package) } + + describe '#execute' do + subject(:service) { described_class.new(container: package, current_user: user) } + + context 'when the user is authorized' do + before do + package.project.add_maintainer(user) + end + + context 'when the destroy is successfull' do + it 'destroy the package' do + expect(package).to receive(:sync_maven_metadata).and_call_original + expect { service.execute }.to change { Packages::Package.count }.by(-1) + end + + it 'returns a success ServiceResponse' do + response = service.execute + + expect(response).to be_a(ServiceResponse) + expect(response).to be_success + expect(response.message).to eq("Package was successfully deleted") + end + end + + context 'when the destroy is not successful' do + before do + allow(package).to receive(:destroy!).and_raise(StandardError, "test") + end + + it 'returns an error ServiceResponse' do + response = service.execute + + expect(package).not_to receive(:sync_maven_metadata) + expect(response).to be_a(ServiceResponse) + expect(response).to be_error + expect(response.message).to eq("Failed to remove the package") + expect(response.status).to eq(:error) + end + end + end + + context 'when the user is not authorized' do + it 'returns an error ServiceResponse' do + response = service.execute + + expect(response).to be_a(ServiceResponse) + expect(response).to be_error + expect(response.message).to eq("You don't have access to this package") + expect(response.status).to eq(:error) + end + end + end +end 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 803371af4bf..d8b48af0121 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 @@ -91,6 +91,7 @@ RSpec.describe Packages::Maven::FindOrCreatePackageService do context 'with a build' do let_it_be(:pipeline) { create(:ci_pipeline, user: user) } + let(:build) { double('build', pipeline: pipeline) } let(:params) { { path: param_path, file_name: file_name, build: build } } @@ -103,6 +104,7 @@ RSpec.describe Packages::Maven::FindOrCreatePackageService do let_it_be_with_refind(:package_settings) { create(:namespace_package_setting, :group, maven_duplicates_allowed: false) } let_it_be_with_refind(:group) { package_settings.namespace } let_it_be_with_refind(:project) { create(:project, group: group) } + let!(:existing_package) { create(:maven_package, name: path, version: version, project: project) } it { expect { subject }.not_to change { project.package_files.count } } diff --git a/spec/services/packages/nuget/metadata_extraction_service_spec.rb b/spec/services/packages/nuget/metadata_extraction_service_spec.rb index 79428b58bd9..8eddd27f8a2 100644 --- a/spec/services/packages/nuget/metadata_extraction_service_spec.rb +++ b/spec/services/packages/nuget/metadata_extraction_service_spec.rb @@ -21,7 +21,8 @@ RSpec.describe Packages::Nuget::MetadataExtractionService do version: '12.0.3' } ], - package_tags: [] + package_tags: [], + package_types: [] } it { is_expected.to eq(expected_metadata) } @@ -47,6 +48,16 @@ RSpec.describe Packages::Nuget::MetadataExtractionService do end end + context 'with package types' do + let(:nuspec_filepath) { 'packages/nuget/with_package_types.nuspec' } + + it { is_expected.to have_key(:package_types) } + + it 'extracts package types' do + expect(subject[:package_types]).to include('SymbolsPackage') + end + end + context 'with a nuspec file with metadata' do let(:nuspec_filepath) { 'packages/nuget/with_metadata.nuspec' } diff --git a/spec/services/packages/nuget/search_service_spec.rb b/spec/services/packages/nuget/search_service_spec.rb index 1838065c5be..66c91487a8f 100644 --- a/spec/services/packages/nuget/search_service_spec.rb +++ b/spec/services/packages/nuget/search_service_spec.rb @@ -13,6 +13,7 @@ RSpec.describe Packages::Nuget::SearchService do let_it_be(:package_d) { create(:nuget_package, project: project, name: 'FooBarD') } let_it_be(:other_package_a) { create(:nuget_package, name: 'DummyPackageA') } let_it_be(:other_package_a) { create(:nuget_package, name: 'DummyPackageB') } + let(:search_term) { 'ummy' } let(:per_page) { 5 } let(:padding) { 0 } 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 ffe1a5b7646..328484c3e5a 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 @@ -5,7 +5,7 @@ require 'spec_helper' RSpec.describe Packages::Nuget::UpdatePackageFromMetadataService, :clean_gitlab_redis_shared_state do include ExclusiveLeaseHelpers - let(:package) { create(:nuget_package, :processing) } + let(:package) { create(:nuget_package, :processing, :with_symbol_package) } let(:package_file) { package.package_files.first } let(:service) { described_class.new(package_file) } let(:package_name) { 'DummyProject.DummyPackage' } @@ -201,6 +201,41 @@ RSpec.describe Packages::Nuget::UpdatePackageFromMetadataService, :clean_gitlab_ it_behaves_like 'raising an', ::Packages::Nuget::MetadataExtractionService::ExtractionError end + context 'with a symbol package' do + let(:package_file) { package.package_files.last } + let(:package_file_name) { 'dummyproject.dummypackage.1.0.0.snupkg' } + + context 'with no existing package' do + let(:package_id) { package.id } + + it_behaves_like 'raising an', ::Packages::Nuget::UpdatePackageFromMetadataService::InvalidMetadataError + end + + context 'with existing package' do + let!(:existing_package) { create(:nuget_package, project: package.project, name: package_name, version: package_version) } + let(:package_id) { existing_package.id } + + it 'link existing package and updates package file', :aggregate_failures do + expect(service).to receive(:try_obtain_lease).and_call_original + expect(::Packages::Nuget::SyncMetadatumService).not_to receive(:new) + expect(::Packages::UpdateTagsService).not_to receive(:new) + + expect { subject } + .to change { ::Packages::Package.count }.by(-1) + .and change { Packages::Dependency.count }.by(0) + .and change { Packages::DependencyLink.count }.by(0) + .and change { Packages::Nuget::DependencyLinkMetadatum.count }.by(0) + .and change { ::Packages::Nuget::Metadatum.count }.by(0) + expect(package_file.reload.file_name).to eq(package_file_name) + expect(package_file.package).to eq(existing_package) + end + + it_behaves_like 'taking the lease' + + it_behaves_like 'not updating the package if the lease is taken' + end + end + context 'with an invalid package name' do invalid_names = [ '', diff --git a/spec/services/packages/rubygems/dependency_resolver_service_spec.rb b/spec/services/packages/rubygems/dependency_resolver_service_spec.rb index 78abfc96ed5..f23ed0e5fbc 100644 --- a/spec/services/packages/rubygems/dependency_resolver_service_spec.rb +++ b/spec/services/packages/rubygems/dependency_resolver_service_spec.rb @@ -5,6 +5,7 @@ RSpec.describe Packages::Rubygems::DependencyResolverService do let_it_be(:project) { create(:project, :private) } let_it_be(:package) { create(:package, project: project) } let_it_be(:user) { create(:user) } + let(:gem_name) { package.name } let(:service) { described_class.new(project, user, gem_name: gem_name) } |