summaryrefslogtreecommitdiff
path: root/spec/services/packages/debian/find_or_create_package_service_spec.rb
diff options
context:
space:
mode:
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.rb69
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