Commit 84c708c3 authored by drew cimino's avatar drew cimino

Restructure spec around method contexts

parent 51d6fab3
...@@ -3,25 +3,16 @@ ...@@ -3,25 +3,16 @@
require 'spec_helper' require 'spec_helper'
RSpec.describe Gitlab::Badge::Coverage::Report do RSpec.describe Gitlab::Badge::Coverage::Report do
let(:project) { double('project') } let(:project) { build(:project) }
let_it_be(:successful_pipeline) do
create(:ci_pipeline, :success)
end
let(:badge) do let(:badge) do
described_class.new(project, 'master', opts: { job: job_name }).tap do |new_badge| described_class.new(project, 'master', opts: { job: job_name })
allow(new_badge).to receive(:pipeline).and_return(successful_pipeline)
end
end end
let(:pipeline) { nil }
let(:job_name) { nil } let(:job_name) { nil }
let(:builds) { [] } let(:builds) { [] }
before do
allow(successful_pipeline).to receive(:builds).and_return(Ci::Build.where(id: builds.map(&:id)))
end
describe '#entity' do describe '#entity' do
it 'describes a coverage' do it 'describes a coverage' do
expect(badge.entity).to eq 'coverage' expect(badge.entity).to eq 'coverage'
...@@ -40,50 +31,55 @@ RSpec.describe Gitlab::Badge::Coverage::Report do ...@@ -40,50 +31,55 @@ RSpec.describe Gitlab::Badge::Coverage::Report do
end end
end end
shared_examples 'unknown coverage report' do describe '#status' do
context 'particular job specified' do before do
let(:job_name) { '' } allow(badge).to receive(:pipeline).and_return(pipeline)
end
context 'with no pipeline' do
it 'returns nil' do it 'returns nil' do
expect(badge.status).to be_nil expect(badge.status).to be_nil
end end
end end
context 'particular job not specified' do context 'with no job specified' do
let(:job_name) { nil } let(:pipeline) { double('pipeline', coverage: 1) }
it 'returns nil' do it 'returns the pipeline coverage value' do
expect(badge.status).to be_nil expect(badge.status).to eq(1.00)
end
end end
end end
context 'when latest successful pipeline exists' do context 'with an unmatching job name specified' do
let(:job_name) { 'incorrect name' }
let(:pipeline) { create(:ci_pipeline, :success, builds: builds) }
let(:builds) do let(:builds) do
[ [
create(:ci_build, :success, pipeline: pipeline, name: 'first', coverage: 40), create(:ci_build, :success, name: 'first', coverage: 40),
create(:ci_build, :success, pipeline: pipeline, coverage: 60) create(:ci_build, :success, coverage: 60)
] ]
end end
context 'when particular job specified' do it 'returns nil' do
let(:job_name) { 'first' } expect(badge.status).to eq(nil)
it 'returns coverage for the particular job' do
expect(badge.status).to eq 40
end end
end end
context 'when particular job not specified' do context 'with a matching job name specified' do
let(:job_name) { '' } let(:job_name) { 'first' }
let(:pipeline) { create(:ci_pipeline, :success, builds: builds) }
it 'returns arithemetic mean for the pipeline' do let(:builds) do
expect(badge.status).to eq 50 [
create(:ci_build, :success, name: 'first', coverage: 40),
create(:ci_build, :success, coverage: 60)
]
end end
it 'returns nil' do
expect(badge.status).to eq(40.00)
end end
end end
context 'pipeline does not exist' do
it_behaves_like 'unknown coverage report'
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