diff options
Diffstat (limited to 'spec/models/ci/pipeline_artifact_spec.rb')
-rw-r--r-- | spec/models/ci/pipeline_artifact_spec.rb | 114 |
1 files changed, 92 insertions, 22 deletions
diff --git a/spec/models/ci/pipeline_artifact_spec.rb b/spec/models/ci/pipeline_artifact_spec.rb index 8cbace845a9..3fe09f05cab 100644 --- a/spec/models/ci/pipeline_artifact_spec.rb +++ b/spec/models/ci/pipeline_artifact_spec.rb @@ -3,7 +3,7 @@ require 'spec_helper' RSpec.describe Ci::PipelineArtifact, type: :model do - let(:coverage_report) { create(:ci_pipeline_artifact) } + let(:coverage_report) { create(:ci_pipeline_artifact, :with_coverage_report) } describe 'associations' do it { is_expected.to belong_to(:pipeline) } @@ -15,7 +15,7 @@ RSpec.describe Ci::PipelineArtifact, type: :model do it_behaves_like 'UpdateProjectStatistics' do let_it_be(:pipeline, reload: true) { create(:ci_pipeline) } - subject { build(:ci_pipeline_artifact, pipeline: pipeline) } + subject { build(:ci_pipeline_artifact, :with_code_coverage_with_multiple_files, pipeline: pipeline) } end describe 'validations' do @@ -51,7 +51,7 @@ RSpec.describe Ci::PipelineArtifact, type: :model do end describe 'file is being stored' do - subject { create(:ci_pipeline_artifact) } + subject { create(:ci_pipeline_artifact, :with_coverage_report) } context 'when existing object has local store' do it_behaves_like 'mounted file in local store' @@ -68,7 +68,7 @@ RSpec.describe Ci::PipelineArtifact, type: :model do end context 'when file contains multi-byte characters' do - let(:coverage_report_multibyte) { create(:ci_pipeline_artifact, :with_multibyte_characters) } + let(:coverage_report_multibyte) { create(:ci_pipeline_artifact, :with_coverage_multibyte_characters) } it 'sets the size in bytesize' do expect(coverage_report_multibyte.size).to eq(14) @@ -76,48 +76,118 @@ RSpec.describe Ci::PipelineArtifact, type: :model do end end - describe '.has_code_coverage?' do - subject { Ci::PipelineArtifact.has_code_coverage? } + describe '.report_exists?' do + subject(:pipeline_artifact) { Ci::PipelineArtifact.report_exists?(file_type) } - context 'when pipeline artifact has a code coverage' do - let!(:pipeline_artifact) { create(:ci_pipeline_artifact) } + context 'when file_type is code_coverage' do + let(:file_type) { :code_coverage } + + context 'when pipeline artifact has a coverage report' do + let!(:pipeline_artifact) { create(:ci_pipeline_artifact, :with_coverage_report) } + + it 'returns true' do + expect(pipeline_artifact).to be_truthy + end + end - it 'returns true' do - expect(subject).to be_truthy + context 'when pipeline artifact does not have a coverage report' do + it 'returns false' do + expect(pipeline_artifact).to be_falsey + end end end - context 'when pipeline artifact does not have a code coverage' do + context 'when file_type is code_quality_mr_diff' do + let(:file_type) { :code_quality_mr_diff } + + context 'when pipeline artifact has a codequality mr diff report' do + let!(:pipeline_artifact) { create(:ci_pipeline_artifact, :with_codequality_mr_diff_report) } + + it 'returns true' do + expect(pipeline_artifact).to be_truthy + end + end + + context 'when pipeline artifact does not have a codequality mr diff report' do + it 'returns false' do + expect(pipeline_artifact).to be_falsey + end + end + end + + context 'when file_type is nil' do + let(:file_type) { nil } + it 'returns false' do - expect(subject).to be_falsey + expect(pipeline_artifact).to be_falsey end end end - describe '.find_with_code_coverage' do - subject { Ci::PipelineArtifact.find_with_code_coverage } + describe '.find_by_file_type' do + subject(:pipeline_artifact) { Ci::PipelineArtifact.find_by_file_type(file_type) } - context 'when pipeline artifact has a coverage report' do - let!(:coverage_report) { create(:ci_pipeline_artifact) } + context 'when file_type is code_coverage' do + let(:file_type) { :code_coverage } + + context 'when pipeline artifact has a coverage report' do + let!(:coverage_report) { create(:ci_pipeline_artifact, :with_coverage_report) } - it 'returns a pipeline artifact with a code coverage' do - expect(subject.file_type).to eq('code_coverage') + it 'returns a pipeline artifact with a coverage report' do + expect(pipeline_artifact.file_type).to eq('code_coverage') + end + end + + context 'when pipeline artifact does not have a coverage report' do + it 'returns nil' do + expect(pipeline_artifact).to be_nil + end + end + end + + context 'when file_type is code_quality_mr_diff' do + let(:file_type) { :code_quality_mr_diff } + + context 'when pipeline artifact has a quality report' do + let!(:coverage_report) { create(:ci_pipeline_artifact, :with_codequality_mr_diff_report) } + + it 'returns a pipeline artifact with a quality report' do + expect(pipeline_artifact.file_type).to eq('code_quality_mr_diff') + end + end + + context 'when pipeline artifact does not have a quality report' do + it 'returns nil' do + expect(pipeline_artifact).to be_nil + end end end - context 'when pipeline artifact does not have a coverage report' do + context 'when file_type is nil' do + let(:file_type) { nil } + it 'returns nil' do - expect(subject).to be_nil + expect(pipeline_artifact).to be_nil end end end describe '#present' do - subject { coverage_report.present } + subject(:presenter) { report.present } context 'when file_type is code_coverage' do + let(:report) { coverage_report } + it 'uses code coverage presenter' do - expect(subject.present).to be_kind_of(Ci::PipelineArtifacts::CodeCoveragePresenter) + expect(presenter).to be_kind_of(Ci::PipelineArtifacts::CodeCoveragePresenter) + end + end + + context 'when file_type is code_quality_mr_diff' do + let(:report) { create(:ci_pipeline_artifact, :with_codequality_mr_diff_report) } + + it 'uses code codequality mr diff presenter' do + expect(presenter).to be_kind_of(Ci::PipelineArtifacts::CodeQualityMrDiffPresenter) end end end |