diff options
Diffstat (limited to 'spec/models/container_repository_spec.rb')
-rw-r--r-- | spec/models/container_repository_spec.rb | 95 |
1 files changed, 83 insertions, 12 deletions
diff --git a/spec/models/container_repository_spec.rb b/spec/models/container_repository_spec.rb index 0ecefff3a97..abaae5b059a 100644 --- a/spec/models/container_repository_spec.rb +++ b/spec/models/container_repository_spec.rb @@ -3,6 +3,8 @@ require 'spec_helper' RSpec.describe ContainerRepository do + using RSpec::Parameterized::TableSyntax + let(:group) { create(:group, name: 'group') } let(:project) { create(:project, path: 'test', group: group) } @@ -29,18 +31,6 @@ RSpec.describe ContainerRepository do end end - describe '.exists_by_path?' do - it 'returns true for known container repository paths' do - path = ContainerRegistry::Path.new("#{project.full_path}/#{repository.name}") - expect(described_class.exists_by_path?(path)).to be_truthy - end - - it 'returns false for unknown container repository paths' do - path = ContainerRegistry::Path.new('you/dont/know/me') - expect(described_class.exists_by_path?(path)).to be_falsey - end - end - describe '#tag' do it 'has a test tag' do expect(repository.tag('test')).not_to be_nil @@ -359,6 +349,17 @@ RSpec.describe ContainerRepository do it { is_expected.to contain_exactly(repository) } end + describe '.expiration_policy_started_at_nil_or_before' do + let_it_be(:repository1) { create(:container_repository, expiration_policy_started_at: nil) } + let_it_be(:repository2) { create(:container_repository, expiration_policy_started_at: 1.day.ago) } + let_it_be(:repository3) { create(:container_repository, expiration_policy_started_at: 2.hours.ago) } + let_it_be(:repository4) { create(:container_repository, expiration_policy_started_at: 1.week.ago) } + + subject { described_class.expiration_policy_started_at_nil_or_before(3.hours.ago) } + + it { is_expected.to contain_exactly(repository1, repository2, repository4) } + end + describe '.waiting_for_cleanup' do let_it_be(:repository_cleanup_scheduled) { create(:container_repository, :cleanup_scheduled) } let_it_be(:repository_cleanup_unfinished) { create(:container_repository, :cleanup_unfinished) } @@ -368,4 +369,74 @@ RSpec.describe ContainerRepository do it { is_expected.to contain_exactly(repository_cleanup_scheduled, repository_cleanup_unfinished) } end + + describe '.exists_by_path?' do + it 'returns true for known container repository paths' do + path = ContainerRegistry::Path.new("#{project.full_path}/#{repository.name}") + expect(described_class.exists_by_path?(path)).to be_truthy + end + + it 'returns false for unknown container repository paths' do + path = ContainerRegistry::Path.new('you/dont/know/me') + expect(described_class.exists_by_path?(path)).to be_falsey + end + end + + describe '.with_enabled_policy' do + let_it_be(:repository) { create(:container_repository) } + let_it_be(:repository2) { create(:container_repository) } + + subject { described_class.with_enabled_policy } + + before do + repository.project.container_expiration_policy.update!(enabled: true) + end + + it { is_expected.to eq([repository]) } + end + + context 'with repositories' do + let_it_be_with_reload(:repository) { create(:container_repository, :cleanup_unscheduled) } + let_it_be(:other_repository) { create(:container_repository, :cleanup_unscheduled) } + + let(:policy) { repository.project.container_expiration_policy } + + before do + ContainerExpirationPolicy.update_all(enabled: true) + end + + describe '.requiring_cleanup' do + subject { described_class.requiring_cleanup } + + context 'with next_run_at in the future' do + before do + policy.update_column(:next_run_at, 10.minutes.from_now) + end + + it { is_expected.to eq([]) } + end + + context 'with next_run_at in the past' do + before do + policy.update_column(:next_run_at, 10.minutes.ago) + end + + it { is_expected.to eq([repository]) } + end + end + + describe '.with_unfinished_cleanup' do + subject { described_class.with_unfinished_cleanup } + + it { is_expected.to eq([]) } + + context 'with an unfinished repository' do + before do + repository.cleanup_unfinished! + end + + it { is_expected.to eq([repository]) } + end + end + end end |