You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
124 lines
3.3 KiB
124 lines
3.3 KiB
require 'rails_helper'
|
|
|
|
describe GaugePresenter do
|
|
let(:zones) do
|
|
Zones.new(
|
|
watch_low_benchmark: 1.5,
|
|
growth_low_benchmark: 2.5,
|
|
approval_low_benchmark: 3.5,
|
|
ideal_low_benchmark: 4.5
|
|
)
|
|
end
|
|
let(:score) { 3 }
|
|
|
|
let(:gauge_presenter) { GaugePresenter.new(zones:, score:) }
|
|
|
|
it 'returns the key benchmark percentage for the gauge' do
|
|
expect(gauge_presenter.key_benchmark_percentage).to eq 0.625
|
|
end
|
|
|
|
context 'when the given score is in the Warning zone for the given scale' do
|
|
let(:score) { 1 }
|
|
|
|
it 'returns the title of the zone' do
|
|
expect(gauge_presenter.title).to eq 'Warning'
|
|
end
|
|
|
|
it 'returns the color class for the gauge' do
|
|
expect(gauge_presenter.color_class).to eq 'fill-warning'
|
|
end
|
|
|
|
it 'returns the score percentage for the gauge' do
|
|
expect(gauge_presenter.score_percentage).to eq 0.0
|
|
end
|
|
end
|
|
|
|
context 'when the given score is in the Watch zone for the given scale' do
|
|
let(:score) { 2 }
|
|
|
|
it 'returns the title of the zone' do
|
|
expect(gauge_presenter.title).to eq 'Watch'
|
|
end
|
|
|
|
it 'returns the color class for the gauge' do
|
|
expect(gauge_presenter.color_class).to eq 'fill-watch'
|
|
end
|
|
|
|
it 'returns the score percentage for the gauge' do
|
|
expect(gauge_presenter.score_percentage).to eq 0.25
|
|
end
|
|
end
|
|
|
|
context 'when the given score is in the Growth zone for the given scale' do
|
|
let(:score) { 3 }
|
|
|
|
it 'returns the title of the zone' do
|
|
expect(gauge_presenter.title).to eq 'Growth'
|
|
end
|
|
|
|
it 'returns the color class for the gauge' do
|
|
expect(gauge_presenter.color_class).to eq 'fill-growth'
|
|
end
|
|
|
|
it 'returns the score percentage for the gauge' do
|
|
expect(gauge_presenter.score_percentage).to eq 0.5
|
|
end
|
|
end
|
|
|
|
context 'when the given score is in the Approval zone for the given scale' do
|
|
let(:score) { 4 }
|
|
|
|
it 'returns the title of the zone' do
|
|
expect(gauge_presenter.title).to eq 'Approval'
|
|
end
|
|
|
|
it 'returns the color class for the gauge' do
|
|
expect(gauge_presenter.color_class).to eq 'fill-approval'
|
|
end
|
|
|
|
it 'returns the score percentage for the gauge' do
|
|
expect(gauge_presenter.score_percentage).to eq 0.75
|
|
end
|
|
end
|
|
|
|
context 'when the given score is in the Ideal zone for the given scale' do
|
|
let(:score) { 5 }
|
|
|
|
it 'returns the title of the zone' do
|
|
expect(gauge_presenter.title).to eq 'Ideal'
|
|
end
|
|
|
|
it 'returns the color class for the gauge' do
|
|
expect(gauge_presenter.color_class).to eq 'fill-ideal'
|
|
end
|
|
|
|
it 'returns the score percentage for the gauge' do
|
|
expect(gauge_presenter.score_percentage).to eq 1.0
|
|
end
|
|
end
|
|
|
|
context 'when there are no benchmarks or score for the gauge' do
|
|
let(:zones) do
|
|
Zones.new(
|
|
watch_low_benchmark: nil,
|
|
growth_low_benchmark: nil,
|
|
approval_low_benchmark: nil,
|
|
ideal_low_benchmark: nil
|
|
)
|
|
end
|
|
let(:score) { nil }
|
|
|
|
it 'returns the title of the zone' do
|
|
expect(gauge_presenter.title).to eq 'Insufficient Data'
|
|
end
|
|
|
|
it 'returns the color class for the gauge' do
|
|
expect(gauge_presenter.color_class).to eq 'fill-insufficient_data'
|
|
end
|
|
|
|
it 'returns the score percentage for the gauge' do
|
|
expect(gauge_presenter.score_percentage).to be_nil
|
|
end
|
|
end
|
|
end
|