diff options
Diffstat (limited to 'spec/lib/gitlab/background_migration/disable_expiration_policies_linked_to_no_container_images_spec.rb')
-rw-r--r-- | spec/lib/gitlab/background_migration/disable_expiration_policies_linked_to_no_container_images_spec.rb | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/spec/lib/gitlab/background_migration/disable_expiration_policies_linked_to_no_container_images_spec.rb b/spec/lib/gitlab/background_migration/disable_expiration_policies_linked_to_no_container_images_spec.rb new file mode 100644 index 00000000000..04eb9ad475f --- /dev/null +++ b/spec/lib/gitlab/background_migration/disable_expiration_policies_linked_to_no_container_images_spec.rb @@ -0,0 +1,142 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Gitlab::BackgroundMigration::DisableExpirationPoliciesLinkedToNoContainerImages do + let_it_be(:projects) { table(:projects) } + let_it_be(:container_expiration_policies) { table(:container_expiration_policies) } + let_it_be(:container_repositories) { table(:container_repositories) } + let_it_be(:namespaces) { table(:namespaces) } + + let!(:namespace) { namespaces.create!(name: 'test', path: 'test') } + + let!(:policy1) { create_expiration_policy(project_id: 1, enabled: true) } + let!(:policy2) { create_expiration_policy(project_id: 2, enabled: false) } + let!(:policy3) { create_expiration_policy(project_id: 3, enabled: false) } + let!(:policy4) { create_expiration_policy(project_id: 4, enabled: true, with_images: true) } + let!(:policy5) { create_expiration_policy(project_id: 5, enabled: false, with_images: true) } + let!(:policy6) { create_expiration_policy(project_id: 6, enabled: false) } + let!(:policy7) { create_expiration_policy(project_id: 7, enabled: true) } + let!(:policy8) { create_expiration_policy(project_id: 8, enabled: true, with_images: true) } + let!(:policy9) { create_expiration_policy(project_id: 9, enabled: true) } + + describe '#perform' do + subject { described_class.new.perform(from_id, to_id) } + + shared_examples 'disabling policies with no images' do + it 'disables the proper policies' do + subject + + rows = container_expiration_policies.order(:project_id).to_h do |row| + [row.project_id, row.enabled] + end + expect(rows).to eq(expected_rows) + end + end + + context 'the whole range' do + let(:from_id) { 1 } + let(:to_id) { 9 } + + it_behaves_like 'disabling policies with no images' do + let(:expected_rows) do + { + 1 => false, + 2 => false, + 3 => false, + 4 => true, + 5 => false, + 6 => false, + 7 => false, + 8 => true, + 9 => false + } + end + end + end + + context 'a range with no policies to disable' do + let(:from_id) { 2 } + let(:to_id) { 6 } + + it_behaves_like 'disabling policies with no images' do + let(:expected_rows) do + { + 1 => true, + 2 => false, + 3 => false, + 4 => true, + 5 => false, + 6 => false, + 7 => true, + 8 => true, + 9 => true + } + end + end + end + + context 'a range with only images' do + let(:from_id) { 4 } + let(:to_id) { 5 } + + it_behaves_like 'disabling policies with no images' do + let(:expected_rows) do + { + 1 => true, + 2 => false, + 3 => false, + 4 => true, + 5 => false, + 6 => false, + 7 => true, + 8 => true, + 9 => true + } + end + end + end + + context 'a range with a single element' do + let(:from_id) { 9 } + let(:to_id) { 9 } + + it_behaves_like 'disabling policies with no images' do + let(:expected_rows) do + { + 1 => true, + 2 => false, + 3 => false, + 4 => true, + 5 => false, + 6 => false, + 7 => true, + 8 => true, + 9 => false + } + end + end + end + end + + def create_expiration_policy(project_id:, enabled:, with_images: false) + projects.create!(id: project_id, namespace_id: namespace.id, name: "gitlab-#{project_id}") + + if with_images + container_repositories.create!(project_id: project_id, name: "image-#{project_id}") + end + + container_expiration_policies.create!( + enabled: enabled, + project_id: project_id + ) + end + + def enabled_policies + container_expiration_policies.where(enabled: true) + end + + def disabled_policies + container_expiration_policies.where(enabled: false) + end +end |