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