diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2023-06-20 13:43:29 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2023-06-20 13:43:29 +0300 |
commit | 3b1af5cc7ed2666ff18b718ce5d30fa5a2756674 (patch) | |
tree | 3bc4a40e0ee51ec27eabf917c537033c0c5b14d4 /spec/services/packages/nuget/update_package_from_metadata_service_spec.rb | |
parent | 9bba14be3f2c211bf79e15769cd9b77bc73a13bc (diff) |
Add latest changes from gitlab-org/gitlab@16-1-stable-eev16.1.0-rc42
Diffstat (limited to 'spec/services/packages/nuget/update_package_from_metadata_service_spec.rb')
-rw-r--r-- | spec/services/packages/nuget/update_package_from_metadata_service_spec.rb | 92 |
1 files changed, 54 insertions, 38 deletions
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 c35863030b0..fa7d994c13c 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 @@ -12,13 +12,15 @@ RSpec.describe Packages::Nuget::UpdatePackageFromMetadataService, :clean_gitlab_ let(:package_version) { '1.0.0' } let(:package_file_name) { 'dummyproject.dummypackage.1.0.0.nupkg' } - shared_examples 'raising an' do |error_class| + shared_examples 'raising an' do |error_class, with_message:| it "raises an #{error_class}" do - expect { subject }.to raise_error(error_class) + expect { subject }.to raise_error(error_class, with_message) end end describe '#execute' do + using RSpec::Parameterized::TableSyntax + subject { service.execute } shared_examples 'taking the lease' do @@ -38,7 +40,7 @@ RSpec.describe Packages::Nuget::UpdatePackageFromMetadataService, :clean_gitlab_ shared_examples 'not updating the package if the lease is taken' do context 'without obtaining the exclusive lease' do let(:lease_key) { "packages:nuget:update_package_from_metadata_service:package:#{package_id}" } - let(:metadata) { { package_name: package_name, package_version: package_version } } + let(:metadata) { { package_name: package_name, package_version: package_version, authors: 'author1, author2', description: 'test description' } } let(:package_from_package_file) { package_file.package } before do @@ -66,12 +68,12 @@ RSpec.describe Packages::Nuget::UpdatePackageFromMetadataService, :clean_gitlab_ context 'with no existing package' do let(:package_id) { package.id } - it 'updates package and package file', :aggregate_failures do + it 'updates package and package file and creates metadatum', :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) + .and change { ::Packages::Nuget::Metadatum.count }.by(1) expect(package.reload.name).to eq(package_name) expect(package.version).to eq(package_version) @@ -98,7 +100,7 @@ RSpec.describe Packages::Nuget::UpdatePackageFromMetadataService, :clean_gitlab_ .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) + .and change { ::Packages::Nuget::Metadatum.count }.by(1) expect(package_file.reload.file_name).to eq(package_file_name) expect(package_file.package).to eq(existing_package) end @@ -117,7 +119,7 @@ RSpec.describe Packages::Nuget::UpdatePackageFromMetadataService, :clean_gitlab_ .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) + .and change { ::Packages::Nuget::Metadatum.count }.by(1) end end end @@ -158,6 +160,8 @@ RSpec.describe Packages::Nuget::UpdatePackageFromMetadataService, :clean_gitlab_ .and change { ::Packages::Nuget::Metadatum.count }.by(1) metadatum = package_file.reload.package.nuget_metadatum + expect(metadatum.authors).to eq('Author Test') + expect(metadatum.description).to eq('Description Test') expect(metadatum.license_url).to eq('https://opensource.org/licenses/MIT') expect(metadatum.project_url).to eq('https://gitlab.com/gitlab-org/gitlab') expect(metadatum.icon_url).to eq('https://opensource.org/files/osi_keyhole_300X300_90ppi_0.png') @@ -166,13 +170,25 @@ RSpec.describe Packages::Nuget::UpdatePackageFromMetadataService, :clean_gitlab_ context 'with too long url' do let_it_be(:too_long_url) { "http://localhost/#{'bananas' * 50}" } - let(:metadata) { { package_name: package_name, package_version: package_version, license_url: too_long_url } } + let(:metadata) { { package_name: package_name, package_version: package_version, authors: 'Author Test', description: 'Description Test', license_url: too_long_url } } before do allow(service).to receive(:metadata).and_return(metadata) end - it_behaves_like 'raising an', ::Packages::Nuget::UpdatePackageFromMetadataService::InvalidMetadataError + it_behaves_like 'raising an', described_class::InvalidMetadataError, with_message: /Validation failed: License url is too long/ + end + + context 'without authors or description' do + %i[authors description].each do |property| + let(:metadata) { { package_name: package_name, package_version: package_version, property => nil } } + + before do + allow(service).to receive(:metadata).and_return(metadata) + end + + it_behaves_like 'raising an', described_class::InvalidMetadataError, with_message: described_class::INVALID_METADATA_ERROR_MESSAGE + end end end @@ -212,7 +228,7 @@ RSpec.describe Packages::Nuget::UpdatePackageFromMetadataService, :clean_gitlab_ end end - it_behaves_like 'raising an', ::Packages::Nuget::MetadataExtractionService::ExtractionError + it_behaves_like 'raising an', ::Packages::Nuget::MetadataExtractionService::ExtractionError, with_message: 'nuspec file not found' end context 'with a symbol package' do @@ -222,7 +238,7 @@ RSpec.describe Packages::Nuget::UpdatePackageFromMetadataService, :clean_gitlab_ context 'with no existing package' do let(:package_id) { package.id } - it_behaves_like 'raising an', ::Packages::Nuget::UpdatePackageFromMetadataService::InvalidMetadataError + it_behaves_like 'raising an', described_class::InvalidMetadataError, with_message: described_class::MISSING_MATCHING_PACKAGE_ERROR_MESSAGE end context 'with existing package' do @@ -251,41 +267,41 @@ RSpec.describe Packages::Nuget::UpdatePackageFromMetadataService, :clean_gitlab_ end context 'with an invalid package name' do - invalid_names = [ - '', - 'My/package', - '../../../my_package', - '%2e%2e%2fmy_package' - ] - - invalid_names.each do |invalid_name| - context "with #{invalid_name}" do - before do - allow(service).to receive(:package_name).and_return(invalid_name) - end + invalid_name_error_msg = 'Validation failed: Name is invalid' + + where(:invalid_name, :error_message) do + '' | described_class::INVALID_METADATA_ERROR_MESSAGE + 'My/package' | invalid_name_error_msg + '../../../my_package' | invalid_name_error_msg + '%2e%2e%2fmy_package' | invalid_name_error_msg + end - it_behaves_like 'raising an', ::Packages::Nuget::UpdatePackageFromMetadataService::InvalidMetadataError + with_them do + before do + allow(service).to receive(:package_name).and_return(invalid_name) end + + it_behaves_like 'raising an', described_class::InvalidMetadataError, with_message: params[:error_message] end end context 'with an invalid package version' do - invalid_versions = [ - '', - '555', - '1./2.3', - '../../../../../1.2.3', - '%2e%2e%2f1.2.3' - ] - - invalid_versions.each do |invalid_version| - context "with #{invalid_version}" do - before do - allow(service).to receive(:package_version).and_return(invalid_version) - end + invalid_version_error_msg = 'Validation failed: Version is invalid' + + where(:invalid_version, :error_message) do + '' | described_class::INVALID_METADATA_ERROR_MESSAGE + '555' | invalid_version_error_msg + '1./2.3' | invalid_version_error_msg + '../../../../../1.2.3' | invalid_version_error_msg + '%2e%2e%2f1.2.3' | invalid_version_error_msg + end - it_behaves_like 'raising an', ::Packages::Nuget::UpdatePackageFromMetadataService::InvalidMetadataError + with_them do + before do + allow(service).to receive(:package_version).and_return(invalid_version) end + + it_behaves_like 'raising an', described_class::InvalidMetadataError, with_message: params[:error_message] end end end |