diff options
Diffstat (limited to 'spec/services/packages/debian/process_changes_service_spec.rb')
-rw-r--r-- | spec/services/packages/debian/process_changes_service_spec.rb | 40 |
1 files changed, 33 insertions, 7 deletions
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 |