Commit 42496ece authored by Grzegorz Bizon's avatar Grzegorz Bizon

Render coverage badge for latest successful pipeline

parent ac73de50
...@@ -13,8 +13,7 @@ module Gitlab ...@@ -13,8 +13,7 @@ module Gitlab
@job = job @job = job
@pipeline = @project.pipelines @pipeline = @project.pipelines
.where(ref: @ref) .latest_successful_for(@ref)
.where(sha: @project.commit(@ref).try(:sha))
.first .first
end end
......
...@@ -44,45 +44,49 @@ describe Gitlab::Badge::Coverage::Report do ...@@ -44,45 +44,49 @@ describe Gitlab::Badge::Coverage::Report do
end end
end end
context 'pipeline exists' do context 'when latest successful pipeline exists' do
let!(:pipeline) do before do
create(:ci_pipeline, project: project, create_pipeline do |pipeline|
sha: project.commit.id, create(:ci_build, :success, pipeline: pipeline, name: 'first', coverage: 40)
ref: 'master') create(:ci_build, :success, pipeline: pipeline, coverage: 60)
end end
context 'builds exist' do create_pipeline do |pipeline|
before do create(:ci_build, :failed, pipeline: pipeline, coverage: 10)
create(:ci_build, name: 'first', pipeline: pipeline, coverage: 40)
create(:ci_build, pipeline: pipeline, coverage: 60)
end end
end
context 'particular job specified' do context 'when particular job specified' do
let(:job_name) { 'first' } let(:job_name) { 'first' }
it 'returns coverage for the particular job' do it 'returns coverage for the particular job' do
expect(badge.status).to eq 40 expect(badge.status).to eq 40
end
end end
end
context 'particular job not specified' do context 'when particular job not specified' do
let(:job_name) { '' } let(:job_name) { '' }
it 'returns arithemetic mean for the pipeline' do
expect(badge.status).to eq 50
end
end
end
it 'returns arithemetic mean for the pipeline' do context 'when only failed pipeline exists' do
expect(badge.status).to eq 50 before do
end create_pipeline do |pipeline|
create(:ci_build, :failed, pipeline: pipeline, coverage: 10)
end end
end end
context 'builds do not exist' do it_behaves_like 'unknown coverage report'
it_behaves_like 'unknown coverage report'
context 'particular job specified' do context 'particular job specified' do
let(:job_name) { 'nonexistent' } let(:job_name) { 'nonexistent' }
it 'retruns nil' do it 'retruns nil' do
expect(badge.status).to be_nil expect(badge.status).to be_nil
end
end end
end end
end end
...@@ -90,4 +94,13 @@ describe Gitlab::Badge::Coverage::Report do ...@@ -90,4 +94,13 @@ describe Gitlab::Badge::Coverage::Report do
context 'pipeline does not exist' do context 'pipeline does not exist' do
it_behaves_like 'unknown coverage report' it_behaves_like 'unknown coverage report'
end end
def create_pipeline
opts = { project: project, sha: project.commit.id, ref: 'master' }
create(:ci_pipeline, opts).tap do |pipeline|
yield pipeline
pipeline.build_updated
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