diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2023-01-31 18:10:47 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2023-01-31 18:10:47 +0300 |
commit | 6f18a8d0b00eae84d262dff137fddd9639f3c52a (patch) | |
tree | f6297c5a843ee6096e996f58c768e80232e2b610 /spec/services | |
parent | c62dd5ae440db9ad4696000a863fbcb53fe83498 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/services')
13 files changed, 116 insertions, 53 deletions
diff --git a/spec/services/packages/debian/create_distribution_service_spec.rb b/spec/services/packages/debian/create_distribution_service_spec.rb index ecf82c6a1db..1c53f75cfb6 100644 --- a/spec/services/packages/debian/create_distribution_service_spec.rb +++ b/spec/services/packages/debian/create_distribution_service_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe Packages::Debian::CreateDistributionService do +RSpec.describe Packages::Debian::CreateDistributionService, feature_category: :package_registry do RSpec.shared_examples 'Create Debian Distribution' do |expected_message, expected_components, expected_architectures| let_it_be(:container) { create(container_type) } # rubocop:disable Rails/SaveBang diff --git a/spec/services/packages/debian/create_package_file_service_spec.rb b/spec/services/packages/debian/create_package_file_service_spec.rb index 7f84e749279..d2614a9af57 100644 --- a/spec/services/packages/debian/create_package_file_service_spec.rb +++ b/spec/services/packages/debian/create_package_file_service_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe Packages::Debian::CreatePackageFileService do +RSpec.describe Packages::Debian::CreatePackageFileService, feature_category: :package_registry do include WorkhorseHelpers let_it_be(:package) { create(:debian_incoming, without_package_files: true) } diff --git a/spec/services/packages/debian/extract_changes_metadata_service_spec.rb b/spec/services/packages/debian/extract_changes_metadata_service_spec.rb index ced846866c2..4d6acac219b 100644 --- a/spec/services/packages/debian/extract_changes_metadata_service_spec.rb +++ b/spec/services/packages/debian/extract_changes_metadata_service_spec.rb @@ -1,10 +1,9 @@ # frozen_string_literal: true require 'spec_helper' -RSpec.describe Packages::Debian::ExtractChangesMetadataService do +RSpec.describe Packages::Debian::ExtractChangesMetadataService, feature_category: :package_registry do describe '#execute' do - let_it_be(:distribution) { create(:debian_project_distribution, codename: 'unstable') } - let_it_be(:incoming) { create(:debian_incoming, project: distribution.project) } + let_it_be(:incoming) { create(:debian_incoming) } let(:source_file) { incoming.package_files.first } let(:dsc_file) { incoming.package_files.second } diff --git a/spec/services/packages/debian/extract_deb_metadata_service_spec.rb b/spec/services/packages/debian/extract_deb_metadata_service_spec.rb index 66a9ca5f9e0..1f5cf2ace5a 100644 --- a/spec/services/packages/debian/extract_deb_metadata_service_spec.rb +++ b/spec/services/packages/debian/extract_deb_metadata_service_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require 'spec_helper' -RSpec.describe Packages::Debian::ExtractDebMetadataService do +RSpec.describe Packages::Debian::ExtractDebMetadataService, feature_category: :package_registry do subject { described_class.new(file_path) } let(:file_name) { 'libsample0_1.2.3~alpha2_amd64.deb' } diff --git a/spec/services/packages/debian/extract_metadata_service_spec.rb b/spec/services/packages/debian/extract_metadata_service_spec.rb index 02c81ad1644..412f285152b 100644 --- a/spec/services/packages/debian/extract_metadata_service_spec.rb +++ b/spec/services/packages/debian/extract_metadata_service_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require 'spec_helper' -RSpec.describe Packages::Debian::ExtractMetadataService do +RSpec.describe Packages::Debian::ExtractMetadataService, feature_category: :package_registry do let(:service) { described_class.new(package_file) } subject { service.execute } diff --git a/spec/services/packages/debian/find_or_create_incoming_service_spec.rb b/spec/services/packages/debian/find_or_create_incoming_service_spec.rb index e1393c774b1..27c389b5312 100644 --- a/spec/services/packages/debian/find_or_create_incoming_service_spec.rb +++ b/spec/services/packages/debian/find_or_create_incoming_service_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe Packages::Debian::FindOrCreateIncomingService do +RSpec.describe Packages::Debian::FindOrCreateIncomingService, feature_category: :package_registry do let_it_be(:project) { create(:project) } let_it_be(:user) { create(:user) } 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 84a0e1465e8..36f96008582 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 @@ -2,54 +2,57 @@ require 'spec_helper' -RSpec.describe Packages::Debian::FindOrCreatePackageService do - let_it_be(:distribution) { create(:debian_project_distribution) } +RSpec.describe Packages::Debian::FindOrCreatePackageService, feature_category: :package_registry do + let_it_be(:distribution) { create(:debian_project_distribution, :with_suite) } let_it_be(:project) { distribution.project } let_it_be(:user) { create(:user) } - let(:params) { { name: 'foo', version: '1.0+debian', distribution_name: distribution.codename } } + let(:service) { described_class.new(project, user, params) } - subject(:service) { described_class.new(project, user, params) } + let(:package) { subject.payload[:package] } + let(:package2) { service.execute.payload[:package] } - describe '#execute' do - subject { service.execute } + shared_examples 'find or create Debian package' do + it 'returns the same object' do + expect { subject }.to change { ::Packages::Package.count }.by(1) + expect(subject).to be_success + expect(package).to be_valid + expect(package.project_id).to eq(project.id) + expect(package.creator_id).to eq(user.id) + expect(package.name).to eq('foo') + expect(package.version).to eq('1.0+debian') + expect(package).to be_debian + expect(package.debian_publication.distribution).to eq(distribution) - let(:package) { subject.payload[:package] } + expect { package2 }.not_to change { ::Packages::Package.count } + expect(package2.id).to eq(package.id) + end - context 'run once' do - it 'creates a new package', :aggregate_failures do + context 'with package marked as pending_destruction' do + it 'creates a new package' do expect { subject }.to change { ::Packages::Package.count }.by(1) - expect(subject).to be_success - - expect(package).to be_valid - expect(package.project_id).to eq(project.id) - expect(package.creator_id).to eq(user.id) - expect(package.name).to eq('foo') - expect(package.version).to eq('1.0+debian') - expect(package).to be_debian - expect(package.debian_publication.distribution).to eq(distribution) + + package.pending_destruction! + + expect { package2 }.to change { ::Packages::Package.count }.by(1) + expect(package2.id).not_to eq(package.id) end end + end - context 'run twice' do - let(:package2) { service.execute.payload[:package] } + describe '#execute' do + subject { service.execute } - it 'returns the same object' do - expect { subject }.to change { ::Packages::Package.count }.by(1) - expect { package2 }.not_to change { ::Packages::Package.count } + context 'with a codename as distribution name' do + let(:params) { { name: 'foo', version: '1.0+debian', distribution_name: distribution.codename } } - expect(package2.id).to eq(package.id) - end + it_behaves_like 'find or create Debian package' + 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) + context 'with a suite as distribution name' do + let(:params) { { name: 'foo', version: '1.0+debian', distribution_name: distribution.suite } } - expect(package2.id).not_to eq(package.id) - end - end + it_behaves_like 'find or create Debian package' end context 'with non-existing distribution' do diff --git a/spec/services/packages/debian/generate_distribution_key_service_spec.rb b/spec/services/packages/debian/generate_distribution_key_service_spec.rb index f82d577f071..bc86a9592d0 100644 --- a/spec/services/packages/debian/generate_distribution_key_service_spec.rb +++ b/spec/services/packages/debian/generate_distribution_key_service_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe Packages::Debian::GenerateDistributionKeyService do +RSpec.describe Packages::Debian::GenerateDistributionKeyService, feature_category: :package_registry do let(:params) { {} } subject { described_class.new(params: params) } diff --git a/spec/services/packages/debian/parse_debian822_service_spec.rb b/spec/services/packages/debian/parse_debian822_service_spec.rb index a2731816459..35b7ead9209 100644 --- a/spec/services/packages/debian/parse_debian822_service_spec.rb +++ b/spec/services/packages/debian/parse_debian822_service_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require 'spec_helper' -RSpec.describe Packages::Debian::ParseDebian822Service do +RSpec.describe Packages::Debian::ParseDebian822Service, feature_category: :package_registry do subject { described_class.new(input) } context 'with dpkg-deb --field output' do diff --git a/spec/services/packages/debian/process_changes_service_spec.rb b/spec/services/packages/debian/process_changes_service_spec.rb index 27b49a13d52..e3ed744377e 100644 --- a/spec/services/packages/debian/process_changes_service_spec.rb +++ b/spec/services/packages/debian/process_changes_service_spec.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true require 'spec_helper' -RSpec.describe Packages::Debian::ProcessChangesService do +RSpec.describe Packages::Debian::ProcessChangesService, feature_category: :package_registry do describe '#execute' do let_it_be(:user) { create(:user) } - let_it_be_with_reload(:distribution) { create(:debian_project_distribution, :with_file, codename: 'unstable') } + let_it_be_with_reload(:distribution) { create(:debian_project_distribution, :with_file, suite: 'unstable') } let!(:incoming) { create(:debian_incoming, project: distribution.project) } - let(:package_file) { incoming.package_files.last } + let(:package_file) { incoming.package_files.with_file_name('sample_1.2.3~alpha2_amd64.changes').first } subject { described_class.new(package_file, user) } @@ -27,11 +27,37 @@ RSpec.describe Packages::Debian::ProcessChangesService do 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) } - + context 'with non-matching distribution' do before do - existing_package.update!(debian_distribution: distribution) + distribution.update! suite: FFaker::Lorem.word + end + + it { expect { subject.execute }.to raise_error(ActiveRecord::RecordNotFound) } + end + + context 'with missing field in .changes file' do + shared_examples 'raises error with missing field' do |missing_field| + before do + allow_next_instance_of(::Packages::Debian::ExtractChangesMetadataService) do |extract_changes_metadata_service| + expect(extract_changes_metadata_service).to receive(:execute).once.and_wrap_original do |m, *args| + metadata = m.call(*args) + metadata[:fields].delete(missing_field) + metadata + end + end + end + + it { expect { subject.execute }.to raise_error(ArgumentError, "missing #{missing_field} field") } + end + + it_behaves_like 'raises error with missing field', 'Source' + it_behaves_like 'raises error with missing field', 'Version' + it_behaves_like 'raises error with missing field', 'Distribution' + end + + context 'with existing package' do + let_it_be_with_reload(:existing_package) do + create(:debian_package, name: 'sample', version: '1.2.3~alpha2', project: distribution.project, published_in: distribution) end it 'does not create a package and assigns the package_file to the existing package' do diff --git a/spec/services/packages/debian/process_package_file_service_spec.rb b/spec/services/packages/debian/process_package_file_service_spec.rb index 5eb4a7e79ca..caf29cfc4fa 100644 --- a/spec/services/packages/debian/process_package_file_service_spec.rb +++ b/spec/services/packages/debian/process_package_file_service_spec.rb @@ -3,10 +3,11 @@ require 'spec_helper' RSpec.describe Packages::Debian::ProcessPackageFileService, feature_category: :package_registry do describe '#execute' do - let_it_be_with_reload(:distribution) { create(:debian_project_distribution, :with_file, codename: 'unstable') } + let_it_be_with_reload(:distribution) { create(:debian_project_distribution, :with_suite, :with_file) } let!(:package) { create(:debian_package, :processing, project: distribution.project, published_in: nil) } let(:distribution_name) { distribution.codename } + let(:component_name) { 'main' } let(:debian_file_metadatum) { package_file.debian_file_metadatum } subject { described_class.new(package_file, distribution_name, component_name) } @@ -42,6 +43,12 @@ RSpec.describe Packages::Debian::ProcessPackageFileService, feature_category: :p context 'when there is no matching published package' do it_behaves_like 'updates package and package file' + + context 'with suite as distribution name' do + let(:distribution_name) { distribution.suite } + + it_behaves_like 'updates package and package file' + end end context 'when there is a matching published package' do @@ -109,6 +116,34 @@ RSpec.describe Packages::Debian::ProcessPackageFileService, feature_category: :p end end + context 'without distribution name' do + let!(:package_file) { create(:debian_package_file, without_loaded_metadatum: true) } + let(:distribution_name) { '' } + + it 'raise ArgumentError', :aggregate_failures do + expect(::Packages::Debian::GenerateDistributionWorker).not_to receive(:perform_async) + expect { subject.execute } + .to not_change(Packages::Package, :count) + .and not_change(Packages::PackageFile, :count) + .and not_change(package.package_files, :count) + .and raise_error(ArgumentError, 'missing distribution name') + end + end + + context 'without component name' do + let!(:package_file) { create(:debian_package_file, without_loaded_metadatum: true) } + let(:component_name) { '' } + + it 'raise ArgumentError', :aggregate_failures do + expect(::Packages::Debian::GenerateDistributionWorker).not_to receive(:perform_async) + expect { subject.execute } + .to not_change(Packages::Package, :count) + .and not_change(Packages::PackageFile, :count) + .and not_change(package.package_files, :count) + .and raise_error(ArgumentError, 'missing component name') + end + end + context 'with package file without Debian metadata' do let!(:package_file) { create(:debian_package_file, without_loaded_metadatum: true) } let(:component_name) { 'main' } diff --git a/spec/services/packages/debian/sign_distribution_service_spec.rb b/spec/services/packages/debian/sign_distribution_service_spec.rb index fc070b6e45e..50c34443495 100644 --- a/spec/services/packages/debian/sign_distribution_service_spec.rb +++ b/spec/services/packages/debian/sign_distribution_service_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe Packages::Debian::SignDistributionService do +RSpec.describe Packages::Debian::SignDistributionService, feature_category: :package_registry do let_it_be(:group) { create(:group, :public) } let(:content) { FFaker::Lorem.paragraph } diff --git a/spec/services/packages/debian/update_distribution_service_spec.rb b/spec/services/packages/debian/update_distribution_service_spec.rb index 3dff2754cec..cfafed5841f 100644 --- a/spec/services/packages/debian/update_distribution_service_spec.rb +++ b/spec/services/packages/debian/update_distribution_service_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe Packages::Debian::UpdateDistributionService do +RSpec.describe Packages::Debian::UpdateDistributionService, feature_category: :package_registry do RSpec.shared_examples 'Update Debian Distribution' do |expected_message, expected_components, expected_architectures, component_file_delta = 0| it 'returns ServiceResponse', :aggregate_failures do expect(distribution).to receive(:update).with(simple_params).and_call_original if expected_message.nil? |