diff --git a/app/controllers/dashboard_controller.rb b/app/controllers/dashboard_controller.rb index 8bb10469..978510b4 100644 --- a/app/controllers/dashboard_controller.rb +++ b/app/controllers/dashboard_controller.rb @@ -4,6 +4,7 @@ class DashboardController < ApplicationController @measure_graph_row_presenters = measure_ids .map { |measure_id| Measure.find_by_measure_id measure_id } .map(&method(:presenter_for_measure)) + .sort().reverse end private diff --git a/app/presenters/measure_graph_row_presenter.rb b/app/presenters/measure_graph_row_presenter.rb index dd9487f5..7bb57a8d 100644 --- a/app/presenters/measure_graph_row_presenter.rb +++ b/app/presenters/measure_graph_row_presenter.rb @@ -1,4 +1,5 @@ class MeasureGraphRowPresenter + include Comparable def initialize(measure:, score:) @measure = measure @score = score @@ -29,6 +30,14 @@ class MeasureGraphRowPresenter end end + def <=>(other_presenter) + if x_offset.to_f == other_presenter.x_offset.to_f + return bar_width.to_f <=> other_presenter.bar_width.to_f + end + + x_offset.to_f <=> other_presenter.x_offset.to_f + end + private IDEAL_ZONE_WIDTH_PERCENTAGE = 0.5 / 2 diff --git a/spec/features/school_dashboard_feature_spec.rb b/spec/features/school_dashboard_feature_spec.rb index 50458fe1..82c225af 100644 --- a/spec/features/school_dashboard_feature_spec.rb +++ b/spec/features/school_dashboard_feature_spec.rb @@ -69,6 +69,11 @@ feature 'School dashboard', type: feature do expect(problem_solving_emphasis_row['x']).to eq '0.0%' page.assert_selector('.measure-row-bar', count: Measure.count) + professional_qualifications_row_index = measure_row_bars.find_index { |item| item['data-for-measure-id'] == '1A-i' } + student_physical_safety_row_index = measure_row_bars.find_index { |item| item['data-for-measure-id'] == '2A-i' } + problem_solving_emphasis_row_index = measure_row_bars.find_index { |item| item['data-for-measure-id'] == '4C-i' } + expect(student_physical_safety_row_index).to be < professional_qualifications_row_index + expect(professional_qualifications_row_index).to be < problem_solving_emphasis_row_index end let(:username) { 'winchester' } diff --git a/spec/presenters/measure_graph_row_presenter_spec.rb b/spec/presenters/measure_graph_row_presenter_spec.rb index c3f47349..badfb63c 100644 --- a/spec/presenters/measure_graph_row_presenter_spec.rb +++ b/spec/presenters/measure_graph_row_presenter_spec.rb @@ -122,4 +122,24 @@ RSpec.describe MeasureGraphRowPresenter do end end 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 + 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 + end + end end