Commit b2695395 authored by Albert Salim's avatar Albert Salim Committed by Aleksei Lipniagov

Add test coverage and refactor existing tests on job artifacts

parent cb74e49b
This diff is collapsed.
This diff is collapsed.
...@@ -3,59 +3,74 @@ ...@@ -3,59 +3,74 @@
require 'spec_helper' require 'spec_helper'
RSpec.describe Ci::JobArtifacts::DestroyBatchService do RSpec.describe Ci::JobArtifacts::DestroyBatchService do
let(:artifacts) { Ci::JobArtifact.all } let(:artifacts) { Ci::JobArtifact.where(id: [artifact_with_file.id, artifact_without_file.id]) }
let(:service) { described_class.new(artifacts, pick_up_at: Time.current) } let(:service) { described_class.new(artifacts, pick_up_at: Time.current) }
let_it_be(:artifact_with_file, refind: true) do
create(:ci_job_artifact, :zip)
end
let_it_be(:artifact_without_file, refind: true) do
create(:ci_job_artifact)
end
let_it_be(:undeleted_artifact, refind: true) do
create(:ci_job_artifact)
end
describe '.execute' do describe '.execute' do
subject(:execute) { service.execute } subject(:execute) { service.execute }
let_it_be(:artifact, refind: true) do it 'creates a deleted object for artifact with attached file' do
create(:ci_job_artifact) expect { subject }.to change { Ci::DeletedObject.count }.by(1)
end end
context 'when the artifact has a file attached to it' do it 'does not remove the attached file' do
before do expect { execute }.not_to change { artifact_with_file.file.exists? }
artifact.file = fixture_file_upload(Rails.root.join('spec/fixtures/ci_build_artifacts.zip'), 'application/zip') end
artifact.save!
end
it 'creates a deleted object' do it 'deletes the artifact records' do
expect { subject }.to change { Ci::DeletedObject.count }.by(1) expect { subject }.to change { Ci::JobArtifact.count }.by(-2)
end end
it 'does not remove the files' do it 'reports metrics for destroyed artifacts' do
expect { execute }.not_to change { artifact.file.exists? } expect_next_instance_of(Gitlab::Ci::Artifacts::Metrics) do |metrics|
expect(metrics).to receive(:increment_destroyed_artifacts_count).with(2).and_call_original
expect(metrics).to receive(:increment_destroyed_artifacts_bytes).with(107464).and_call_original
end end
it 'reports metrics for destroyed artifacts' do execute
expect_next_instance_of(Gitlab::Ci::Artifacts::Metrics) do |metrics| end
expect(metrics).to receive(:increment_destroyed_artifacts_count).with(1).and_call_original
expect(metrics).to receive(:increment_destroyed_artifacts_bytes).with(107464).and_call_original context 'ProjectStatistics' do
end it 'resets project statistics' do
expect(ProjectStatistics).to receive(:increment_statistic).once
.with(artifact_with_file.project, :build_artifacts_size, -artifact_with_file.file.size)
.and_call_original
expect(ProjectStatistics).to receive(:increment_statistic).once
.with(artifact_without_file.project, :build_artifacts_size, 0)
.and_call_original
execute execute
end end
context 'ProjectStatistics' do context 'with update_stats: false' do
it 'resets project statistics' do it 'does not update project statistics' do
expect(ProjectStatistics).to receive(:increment_statistic).once expect(ProjectStatistics).not_to receive(:increment_statistic)
.with(artifact.project, :build_artifacts_size, -artifact.file.size)
.and_call_original
execute service.execute(update_stats: false)
end end
context 'with update_stats: false' do it 'returns size statistics' do
it 'does not update project statistics' do expected_updates = {
expect(ProjectStatistics).not_to receive(:increment_statistic) statistics_updates: {
artifact_with_file.project => -artifact_with_file.file.size,
service.execute(update_stats: false) artifact_without_file.project => 0
end }
}
it 'returns size statistics' do expect(service.execute(update_stats: false)).to match(
expect(service.execute(update_stats: false)).to match( a_hash_including(expected_updates))
a_hash_including(statistics_updates: { artifact.project => -artifact.file.size }))
end
end end
end end
end end
...@@ -71,7 +86,7 @@ RSpec.describe Ci::JobArtifacts::DestroyBatchService do ...@@ -71,7 +86,7 @@ RSpec.describe Ci::JobArtifacts::DestroyBatchService do
it 'raises an exception and stop destroying' do it 'raises an exception and stop destroying' do
expect { execute }.to raise_error(ActiveRecord::RecordNotDestroyed) expect { execute }.to raise_error(ActiveRecord::RecordNotDestroyed)
.and not_change { Ci::JobArtifact.count }.from(1) .and not_change { Ci::JobArtifact.count }
end end
end end
end end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment