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(:builds) do let(:job_name) { 'incorrect name' }
[ let(:pipeline) { create(:ci_pipeline, :success, builds: builds) }
create(:ci_build, :success, pipeline: pipeline, name: 'first', coverage: 40),
create(:ci_build, :success, pipeline: pipeline, coverage: 60)
]
end
context 'when particular job specified' do let(:builds) do
let(:job_name) { 'first' } [
create(:ci_build, :success, name: 'first', coverage: 40),
create(:ci_build, :success, coverage: 60)
]
end
it 'returns coverage for the particular job' do it 'returns nil' do
expect(badge.status).to eq 40 expect(badge.status).to eq(nil)
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
end
end
context 'pipeline does not exist' do it 'returns nil' do
it_behaves_like 'unknown coverage report' expect(badge.status).to eq(40.00)
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