require 'rails_helper' describe SubcategoryCardPresenter do let(:scale) do Scale.new( watch_low_benchmark: 1.5, growth_low_benchmark: 2.5, approval_low_benchmark: 3.5, ideal_low_benchmark: 4.5, ) end let(:subcategory_card_presenter) { SubcategoryCardPresenter.new(scale: scale, score: score)} context 'when the given score is in the Warning zone for the given scale' do let(:score) { 1 } it 'returns a boolean indicating that the icon should be displayed' do expect(subcategory_card_presenter.display_icon?).to be_truthy end it 'returns the icon that represents the zone' do expect(subcategory_card_presenter.harvey_ball_icon).to eq "empty-circle" end it 'returns the color class of the zone' do expect(subcategory_card_presenter.color).to eq "warning" end end context 'when the given score is in the Watch zone for the given scale' do let(:score) { 2 } it 'returns a boolean indicating that the icon should be displayed' do expect(subcategory_card_presenter.display_icon?).to be_truthy end it 'returns the icon that represents the zone' do expect(subcategory_card_presenter.harvey_ball_icon).to eq "one-quarter-circle" end it 'returns the color class of the zone' do expect(subcategory_card_presenter.color).to eq "watch" end end context 'when the given score is in the Growth zone for the given scale' do let(:score) { 3 } it 'returns a boolean indicating that the icon should be displayed' do expect(subcategory_card_presenter.display_icon?).to be_truthy end it 'returns the icon that represents the zone' do expect(subcategory_card_presenter.harvey_ball_icon).to eq "half-circle" end it 'returns the color class of the zone' do expect(subcategory_card_presenter.color).to eq "growth" end end context 'when the given score is in the Approval zone for the given scale' do let(:score) { 4 } it 'returns a boolean indicating that the icon should be displayed' do expect(subcategory_card_presenter.display_icon?).to be_truthy end it 'returns the icon that represents the zone' do expect(subcategory_card_presenter.harvey_ball_icon).to eq "three-quarter-circle" end it 'returns the color class of the zone' do expect(subcategory_card_presenter.color).to eq "approval" end end context 'when the given score is in the Ideal zone for the given scale' do let(:score) { 5 } it 'returns a boolean indicating that the icon should be displayed' do expect(subcategory_card_presenter.display_icon?).to be_truthy end it 'returns the icon that represents the zone' do expect(subcategory_card_presenter.harvey_ball_icon).to eq "full-circle" end it 'returns the color class of the zone' do expect(subcategory_card_presenter.color).to eq "ideal" end end context 'when the given score is invalid for the given scale' do let(:score) { 0 } it 'returns a boolean indicating that the icon should be displayed' do expect(subcategory_card_presenter.display_icon?).to be_falsey end end end