80 lines
3 KiB
Ruby
80 lines
3 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'spec_helper'
|
|
|
|
RSpec.describe ::Ci::PipelineArtifacts::CreateCodeQualityMrDiffReportService do
|
|
describe '#execute' do
|
|
let(:merge_request) { create(:merge_request) }
|
|
let(:project) { merge_request.project }
|
|
let(:head_pipeline) { create(:ci_pipeline, :success, :with_codequality_reports, project: project, merge_requests_as_head_pipeline: [merge_request]) }
|
|
let(:base_pipeline) { create(:ci_pipeline, :success, project: project, ref: merge_request.target_branch, sha: merge_request.diff_base_sha) }
|
|
|
|
subject { described_class.new(head_pipeline).execute }
|
|
|
|
context 'when there are codequality reports' do
|
|
context 'when pipeline passes' do
|
|
context 'when degradations are present' do
|
|
context 'when degradations already present in target branch pipeline' do
|
|
before do
|
|
create(:ci_build, :success, :codequality_reports, name: 'codequality', pipeline: base_pipeline, project: project)
|
|
end
|
|
|
|
it "does not persist a pipeline artifact" do
|
|
expect { subject }.not_to change { Ci::PipelineArtifact.count }
|
|
end
|
|
end
|
|
|
|
context 'when degradation is not present in target branch pipeline' do
|
|
before do
|
|
create(:ci_build, :success, :codequality_reports_without_degradation, name: 'codequality', pipeline: base_pipeline, project: project)
|
|
end
|
|
|
|
it 'persists a pipeline artifact' do
|
|
expect { subject }.to change { Ci::PipelineArtifact.count }.by(1)
|
|
end
|
|
|
|
it 'persists the default file name' do
|
|
subject
|
|
|
|
pipeline_artifact = Ci::PipelineArtifact.first
|
|
|
|
expect(pipeline_artifact.file.filename).to eq('code_quality_mr_diff.json')
|
|
end
|
|
|
|
it 'sets expire_at to 1 week' do
|
|
freeze_time do
|
|
subject
|
|
|
|
pipeline_artifact = Ci::PipelineArtifact.first
|
|
|
|
expect(pipeline_artifact.expire_at).to eq(1.week.from_now)
|
|
end
|
|
end
|
|
|
|
it 'does not persist the same artifact twice' do
|
|
2.times { described_class.new(head_pipeline).execute }
|
|
|
|
expect { subject }.not_to change { Ci::PipelineArtifact.count }
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
context 'when there are no codequality reports for head pipeline' do
|
|
let(:head_pipeline) { create(:ci_pipeline, :success, project: project, merge_requests_as_head_pipeline: [merge_request]) }
|
|
|
|
it "does not persist a pipeline artifact" do
|
|
expect { subject }.not_to change { Ci::PipelineArtifact.count }
|
|
end
|
|
end
|
|
|
|
context 'when there are no codequality reports for base pipeline' do
|
|
let(:head_pipeline) { create(:ci_pipeline, :success, project: project, merge_requests_as_head_pipeline: [merge_request]) }
|
|
|
|
it "does not persist a pipeline artifact" do
|
|
expect { subject }.not_to change { Ci::PipelineArtifact.count }
|
|
end
|
|
end
|
|
end
|
|
end
|