diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-02-02 06:09:10 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-02-02 06:09:10 +0300 |
commit | 7580728fc297c86cc5a31fb67e7153217facf1c0 (patch) | |
tree | 59279991d34f28fc1b415a14e77df08d5c11d265 /spec/services/packages | |
parent | d8714cf67ce4db786b26b64f0f0bef50fb6976e6 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/services/packages')
-rw-r--r-- | spec/services/packages/debian/destroy_distribution_service_spec.rb | 69 | ||||
-rw-r--r-- | spec/services/packages/debian/update_distribution_service_spec.rb | 144 |
2 files changed, 213 insertions, 0 deletions
diff --git a/spec/services/packages/debian/destroy_distribution_service_spec.rb b/spec/services/packages/debian/destroy_distribution_service_spec.rb new file mode 100644 index 00000000000..d658b0ed66e --- /dev/null +++ b/spec/services/packages/debian/destroy_distribution_service_spec.rb @@ -0,0 +1,69 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Packages::Debian::DestroyDistributionService do + RSpec.shared_examples 'Destroy Debian Distribution' do |expected_message| + it 'returns ServiceResponse', :aggregate_failures do + if expected_message.nil? + expect { response } + .to change { container.debian_distributions.klass.all.count } + .from(1).to(0) + .and change { container.debian_distributions.count } + .from(1).to(0) + .and change { component1.class.all.count } + .from(2).to(0) + .and change { architecture1.class.all.count } + .from(3).to(0) + else + expect { response } + .to not_change { container.debian_distributions.klass.all.count } + .and not_change { container.debian_distributions.count } + .and not_change { component1.class.all.count } + .and not_change { architecture1.class.all.count } + end + + expect(response).to be_a(ServiceResponse) + expect(response.success?).to eq(expected_message.nil?) + expect(response.error?).to eq(!expected_message.nil?) + expect(response.message).to eq(expected_message) + + if expected_message.nil? + expect(response.payload).to eq({}) + else + expect(response.payload).to eq(distribution: distribution) + end + end + end + + RSpec.shared_examples 'Debian Destroy Distribution Service' do |container_type, can_freeze| + context "with a Debian #{container_type} distribution" do + let_it_be(:container, freeze: can_freeze) { create(container_type) } # rubocop:disable Rails/SaveBang + let_it_be(:distribution, freeze: can_freeze) { create("debian_#{container_type}_distribution", container: container) } + let_it_be(:component1, freeze: can_freeze) { create("debian_#{container_type}_component", distribution: distribution, name: 'component1') } + let_it_be(:component2, freeze: can_freeze) { create("debian_#{container_type}_component", distribution: distribution, name: 'component2') } + let_it_be(:architecture0, freeze: true) { create("debian_#{container_type}_architecture", distribution: distribution, name: 'all') } + let_it_be(:architecture1, freeze: can_freeze) { create("debian_#{container_type}_architecture", distribution: distribution, name: 'architecture1') } + let_it_be(:architecture2, freeze: can_freeze) { create("debian_#{container_type}_architecture", distribution: distribution, name: 'architecture2') } + + subject { described_class.new(distribution) } + + let(:response) { subject.execute } + + context 'with a distribution' do + it_behaves_like 'Destroy Debian Distribution' + end + + context 'when destroy fails' do + before do + expect(distribution).to receive(:destroy).and_return(false) + end + + it_behaves_like 'Destroy Debian Distribution', "Unable to destroy Debian #{container_type} distribution" + end + end + end + + it_behaves_like 'Debian Destroy Distribution Service', :project, true + it_behaves_like 'Debian Destroy Distribution Service', :group, false +end diff --git a/spec/services/packages/debian/update_distribution_service_spec.rb b/spec/services/packages/debian/update_distribution_service_spec.rb new file mode 100644 index 00000000000..c60e8e3f735 --- /dev/null +++ b/spec/services/packages/debian/update_distribution_service_spec.rb @@ -0,0 +1,144 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Packages::Debian::UpdateDistributionService do + RSpec.shared_examples 'Update Debian Distribution' do |expected_message, expected_components, expected_architectures| + it 'returns ServiceResponse', :aggregate_failures do + expect(distribution).to receive(:update).with(simple_params).and_call_original if expected_message.nil? + + expect { response } + .to not_change { container.debian_distributions.klass.all.count } + .and not_change { container.debian_distributions.count } + .and not_change { component1.class.all.count } + .and not_change { architecture1.class.all.count } + + expect(response).to be_a(ServiceResponse) + expect(response.success?).to eq(expected_message.nil?) + expect(response.error?).to eq(!expected_message.nil?) + expect(response.message).to eq(expected_message) + + expect(response.payload).to eq(distribution: distribution) + + distribution.reload + distribution.components.reload + distribution.architectures.reload + + if expected_message.nil? + simple_params.each_pair do |name, value| + expect(distribution.send(name)).to eq(value) + end + else + original_params.each_pair do |name, value| + expect(distribution.send(name)).to eq(value) + end + end + + expect(distribution.components.map(&:name)).to contain_exactly(*expected_components) + expect(distribution.architectures.map(&:name)).to contain_exactly(*expected_architectures) + end + end + + RSpec.shared_examples 'Debian Update Distribution Service' do |container_type, can_freeze| + context "with a Debian #{container_type} distribution" do + let_it_be(:container, freeze: can_freeze) { create(container_type) } # rubocop:disable Rails/SaveBang + let_it_be(:distribution, reload: true) { create("debian_#{container_type}_distribution", container: container) } + let_it_be(:component1) { create("debian_#{container_type}_component", distribution: distribution, name: 'component1') } + let_it_be(:component2) { create("debian_#{container_type}_component", distribution: distribution, name: 'component2') } + let_it_be(:architecture0) { create("debian_#{container_type}_architecture", distribution: distribution, name: 'all') } + let_it_be(:architecture1) { create("debian_#{container_type}_architecture", distribution: distribution, name: 'architecture1') } + let_it_be(:architecture2) { create("debian_#{container_type}_architecture", distribution: distribution, name: 'architecture2') } + + let(:original_params) do + { + suite: nil, + origin: nil, + label: nil, + version: nil, + description: nil, + valid_time_duration_seconds: nil, + automatic: true, + automatic_upgrades: false + } + end + + let(:params) { {} } + let(:simple_params) { params.except(:components, :architectures) } + + subject { described_class.new(distribution, params) } + + let(:response) { subject.execute } + + context 'with valid simple params' do + let(:params) do + { + suite: 'my-suite', + origin: 'my-origin', + label: 'my-label', + version: '42.0', + description: 'my-description', + valid_time_duration_seconds: 7.days, + automatic: false, + automatic_upgrades: true + } + end + + it_behaves_like 'Update Debian Distribution', nil, %w[component1 component2], %w[all architecture1 architecture2] + end + + context 'with invalid simple params' do + let(:params) do + { + suite: 'suite erronée', + origin: 'origin erronée', + label: 'label erronée', + version: 'version erronée', + description: 'description erronée', + valid_time_duration_seconds: 1.hour + } + end + + it_behaves_like 'Update Debian Distribution', 'Suite is invalid, Origin is invalid, Label is invalid, Version is invalid, and Valid time duration seconds must be greater than or equal to 86400', %w[component1 component2], %w[all architecture1 architecture2] + end + + context 'with valid components and architectures' do + let(:params) do + { + suite: 'my-suite', + components: %w[component2 component3], + architectures: %w[architecture2 architecture3] + } + end + + it_behaves_like 'Update Debian Distribution', nil, %w[component2 component3], %w[all architecture2 architecture3] + end + + context 'with invalid components' do + let(:params) do + { + suite: 'my-suite', + components: %w[component2 erroné], + architectures: %w[architecture2 architecture3] + } + end + + it_behaves_like 'Update Debian Distribution', 'Component Name is invalid', %w[component1 component2], %w[all architecture1 architecture2] + end + + context 'with invalid architectures' do + let(:params) do + { + suite: 'my-suite', + components: %w[component2 component3], + architectures: %w[architecture2 erroné] + } + end + + it_behaves_like 'Update Debian Distribution', 'Architecture Name is invalid', %w[component1 component2], %w[all architecture1 architecture2] + end + end + end + + it_behaves_like 'Debian Update Distribution Service', :project, true + it_behaves_like 'Debian Update Distribution Service', :group, false +end |