Refactor variance chart to make view responsible for sorting measures

This commit is contained in:
Liam Morley 2021-10-28 12:05:41 -04:00
parent f5e5abc27e
commit ad7dd85524
9 changed files with 58 additions and 62 deletions

View file

@ -142,16 +142,6 @@ def district_admin_sees_district_change
expect(page).to have_current_path(expected_path)
end
def district_admin_sees_measures_in_correct_order
def index_of_row_for(measure_id:)
expect(page).to have_css("[data-for-measure-id='#{measure_id}']")
page.all('rect.measure-row-bar').find_index { |item| item['data-for-measure-id'] == "#{measure_id}" }
end
expect(index_of_row_for(measure_id: '2A-i')).to be < index_of_row_for(measure_id: '1A-i')
expect(index_of_row_for(measure_id: '1A-i')).to be < index_of_row_for(measure_id: '4C-i')
end
def district_admin_sees_dashboard_content
expect(page).to have_select('academic-year', selected: '2020 2021')
expect(page).to have_select('district', selected: 'Winchester')
@ -163,8 +153,6 @@ def district_admin_sees_dashboard_content
district_admin_sees_problem_solving_emphasis
page.assert_selector('.measure-row-bar', count: 5)
district_admin_sees_measures_in_correct_order
end
def district_admin_sees_browse_content

View file

@ -1,6 +1,6 @@
require 'rails_helper'
RSpec.describe MeasureGraphRowPresenter do
describe VarianceChartRowPresenter do
let(:watch_low_benchmark) { 2.9 }
let(:growth_low_benchmark) { 3.1 }
@ -18,7 +18,7 @@ RSpec.describe MeasureGraphRowPresenter do
}
let(:presenter) {
MeasureGraphRowPresenter.new measure: measure, score: score
VarianceChartRowPresenter.new measure: measure, score: score
}
shared_examples_for 'measure_name' do
@ -124,22 +124,18 @@ RSpec.describe MeasureGraphRowPresenter do
end
context 'sorting scores' do
it 'selects a shorter bar width before a longer bar' do
this_presenter = MeasureGraphRowPresenter.new measure: measure, score: 3.7
other_presenter = MeasureGraphRowPresenter.new measure: measure, score: 4.4
expect(this_presenter <=> other_presenter).to be < 0
it 'selects a longer bar before a shorter bar for measures in the approval/ideal zones' do
approval_presenter = VarianceChartRowPresenter.new measure: measure, score: 3.7
ideal_presenter = VarianceChartRowPresenter.new measure: measure, score: 4.4
expect(ideal_presenter <=> approval_presenter).to be < 0
expect([approval_presenter, ideal_presenter].sort).to eq [ideal_presenter, approval_presenter]
end
it 'selects a warning bar before a ideal bar' do
this_presenter = MeasureGraphRowPresenter.new measure: measure, score: 1.0
other_presenter = MeasureGraphRowPresenter.new measure: measure, score: 5.0
expect(this_presenter <=> other_presenter).to be < 0
end
it 'selects an ideal bar after a warning bar' do
this_presenter = MeasureGraphRowPresenter.new measure: measure, score: 4.4
other_presenter = MeasureGraphRowPresenter.new measure: measure, score: 1.0
expect(this_presenter <=> other_presenter).to be > 0
it 'selects a warning bar below a ideal bar' do
warning_presenter = VarianceChartRowPresenter.new measure: measure, score: 1.0
ideal_presenter = VarianceChartRowPresenter.new measure: measure, score: 5.0
expect(warning_presenter <=> ideal_presenter).to be > 0
expect([warning_presenter, ideal_presenter].sort).to eq [ideal_presenter, warning_presenter]
end
end
end

View file

@ -9,18 +9,18 @@ describe 'dashboard/index.html.erb' do
before :each do
assign :category_presenters, []
assign :measure_graph_row_presenters, measure_graph_row_presenters
assign :variance_chart_row_presenters, variance_chart_row_presenters
render
end
context 'when some presenters have a nil score' do
let(:measure_graph_row_presenters) {
let(:variance_chart_row_presenters) {
[
MeasureGraphRowPresenter.new(measure: support_for_teaching, score: nil),
MeasureGraphRowPresenter.new(measure: create(:measure, name: 'Should Be Displayed', measure_id: 'should-be-displayed'), score: rand),
MeasureGraphRowPresenter.new(measure: effective_leadership, score: nil),
MeasureGraphRowPresenter.new(measure: professional_qualifications, score: nil)
VarianceChartRowPresenter.new(measure: support_for_teaching, score: nil),
VarianceChartRowPresenter.new(measure: create(:measure, name: 'Should Be Displayed', measure_id: 'should-be-displayed'), score: rand),
VarianceChartRowPresenter.new(measure: effective_leadership, score: nil),
VarianceChartRowPresenter.new(measure: professional_qualifications, score: nil)
]
}
@ -40,9 +40,9 @@ describe 'dashboard/index.html.erb' do
end
context 'when all the presenters have a non-nil score' do
let(:measure_graph_row_presenters) {
let(:variance_chart_row_presenters) {
[
MeasureGraphRowPresenter.new(measure: create(:measure, name: 'Display Me', measure_id: 'display-me'), score: rand)
VarianceChartRowPresenter.new(measure: create(:measure, name: 'Display Me', measure_id: 'display-me'), score: rand)
]
}

View file

@ -0,0 +1,26 @@
require 'rails_helper'
describe 'dashboard/_variance_chart.html.erb' do
subject { Nokogiri::HTML(rendered) }
let(:higher_scoring_measure) { create(:measure) }
let(:lower_scoring_measure) { create(:measure) }
before :each do
presenters = [
VarianceChartRowPresenter.new(measure: lower_scoring_measure, score: 1),
VarianceChartRowPresenter.new(measure: higher_scoring_measure, score: 5)
]
render partial: 'variance_chart', locals: { presenters: presenters }
end
it 'displays higher scoring measures above lower scoring measures' do
measure_row_bars = subject.css("rect.measure-row-bar")
higher_scoring_measure_index = measure_row_bars.find_index { |bar| bar['data-for-measure-id'] == higher_scoring_measure.measure_id }
lower_scoring_measure_index = measure_row_bars.find_index { |bar| bar['data-for-measure-id'] == lower_scoring_measure.measure_id }
expect(higher_scoring_measure_index).to be < lower_scoring_measure_index
end
end