Commit 796efcc7 authored by Grzegorz Bizon's avatar Grzegorz Bizon

Add template class for coverage report badge

parent cc244160
module Gitlab
module Badge
module Coverage
##
# Class that represents a coverage badge template.
#
# Template object will be passed to badge.svg.erb template.
#
class Template
STATUS_COLOR = {
good: '#4c1',
acceptable: '#b0c',
medium: '#dfb317',
low: '#e05d44',
unknown: '#9f9f9f'
}
def initialize(badge)
@entity = badge.entity
@status = badge.status
end
def key_text
@entity.to_s
end
def value_text
@status ? "#{@status}%" : 'unknown'
end
def key_width
62
end
def value_width
@status ? 32 : 58
end
def key_color
'#555'
end
def value_color
case @status
when nil then STATUS_COLOR[:unknown]
when 95..100 then STATUS_COLOR[:good]
when 90..95 then STATUS_COLOR[:acceptable]
when 75..90 then STATUS_COLOR[:medium]
when 0..75 then STATUS_COLOR[:low]
else
STATUS_COLOR[:unknown]
end
end
def key_text_anchor
key_width / 2
end
def value_text_anchor
key_width + (value_width / 2)
end
def width
key_width + value_width
end
end
end
end
end
require 'spec_helper'
describe Gitlab::Badge::Coverage::Template do
let(:badge) { double(entity: 'coverage', status: 90) }
let(:template) { described_class.new(badge) }
describe '#key_text' do
it 'is always says coverage' do
expect(template.key_text).to eq 'coverage'
end
end
describe '#value_text' do
context 'when coverage is known' do
it 'returns coverage percentage' do
expect(template.value_text).to eq '90%'
end
end
context 'when coverage is unknown' do
before do
allow(badge).to receive(:status).and_return(nil)
end
it 'returns string that says coverage is unknown' do
expect(template.value_text).to eq 'unknown'
end
end
end
describe '#key_width' do
it 'has a fixed key width' do
expect(template.key_width).to eq 62
end
end
describe '#value_width' do
context 'when coverage is known' do
it 'is narrower when coverage is known' do
expect(template.value_width).to eq 32
end
end
context 'when coverage is unknown' do
before do
allow(badge).to receive(:status).and_return(nil)
end
it 'is wider when coverage is unknown to fit text' do
expect(template.value_width).to eq 58
end
end
end
describe '#key_color' do
it 'always has the same color' do
expect(template.key_color).to eq '#555'
end
end
describe '#value_color' do
context 'when coverage is good' do
before do
allow(badge).to receive(:status).and_return(98)
end
it 'is green' do
expect(template.value_color).to eq '#4c1'
end
end
context 'when coverage is acceptable' do
before do
allow(badge).to receive(:status).and_return(90)
end
it 'is green-orange' do
expect(template.value_color).to eq '#b0c'
end
end
context 'when coverage is medium' do
before do
allow(badge).to receive(:status).and_return(75)
end
it 'is orange-yellow' do
expect(template.value_color).to eq '#dfb317'
end
end
context 'when coverage is low' do
before do
allow(badge).to receive(:status).and_return(50)
end
it 'is red' do
expect(template.value_color).to eq '#e05d44'
end
end
context 'when coverage is unknown' do
before do
allow(badge).to receive(:status).and_return(nil)
end
it 'is grey' do
expect(template.value_color).to eq '#9f9f9f'
end
end
end
describe '#width' do
context 'when coverage is known' do
it 'returns the key width plus value width' do
expect(template.width).to eq 94
end
end
context 'when coverage is unknown' do
before do
allow(badge).to receive(:status).and_return(nil)
end
it 'returns key width plus wider value width' do
expect(template.width).to eq 120
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