diff --git a/app/helpers/variance_helper.rb b/app/helpers/variance_helper.rb index 354240a7..ba6175ac 100644 --- a/app/helpers/variance_helper.rb +++ b/app/helpers/variance_helper.rb @@ -16,6 +16,7 @@ module VarianceHelper end def graph_background_height(number_of_rows:) + number_of_rows += 1 if @has_empty_dataset graph_height(number_of_rows) - footer_gutter end diff --git a/app/views/overview/_variance_chart.html.erb b/app/views/overview/_variance_chart.html.erb index d572cfd9..39831b66 100644 --- a/app/views/overview/_variance_chart.html.erb +++ b/app/views/overview/_variance_chart.html.erb @@ -1,7 +1,9 @@ <% displayed_presenters = presenters.filter { |p| p.sufficient_data? }.sort %> <% not_displayed_presenters = presenters - displayed_presenters %> -<% if not_displayed_presenters.present? %> +<% if displayed_presenters.none? %> +

Note: No measures can be displayed due to limited availability of school admin data and/or low survey response rates.

+<% elsif not_displayed_presenters.present? %>

Note: The following measures are not displayed due to limited availability of school admin data and/or low survey response rates: <%= not_displayed_presenters.map(&:measure_name).join('; ') %>.

<% end %> @@ -87,6 +89,18 @@ <%= presenter.measure_name %> <% end %> + + <% if displayed_presenters.none? %> + + Insufficient data + + <% end %>

Distance From Benchmark

- <%= render partial: "variance_chart", locals: { presenters: @variance_chart_row_presenters} %> + <%= render partial: "variance_chart", locals: { presenters: @variance_chart_row_presenters } %> <%= render partial: 'layouts/empty_dataset_modal' if @has_empty_dataset %> diff --git a/spec/views/dashboard/variance_chart.html.erb_spec.rb b/spec/views/dashboard/variance_chart.html.erb_spec.rb index d2546f64..a0a5dc98 100644 --- a/spec/views/dashboard/variance_chart.html.erb_spec.rb +++ b/spec/views/dashboard/variance_chart.html.erb_spec.rb @@ -1,26 +1,53 @@ require 'rails_helper' describe 'overview/_variance_chart.html.erb' do - subject { Nokogiri::HTML(rendered) } + context 'When there are scores to show' do + subject { Nokogiri::HTML(rendered) } - let(:higher_scoring_measure) { create(:measure) } - let(:lower_scoring_measure) { create(:measure) } + let(:higher_scoring_measure) { create(:measure) } + let(:lower_scoring_measure) { create(:measure) } - before :each do - presenters = [ - VarianceChartRowPresenter.new(measure: lower_scoring_measure, score: Score.new(1)), - VarianceChartRowPresenter.new(measure: higher_scoring_measure, score: Score.new(5)) - ] + before :each do + presenters = [ + VarianceChartRowPresenter.new(measure: lower_scoring_measure, score: Score.new(1)), + VarianceChartRowPresenter.new(measure: higher_scoring_measure, score: Score.new(5)) + ] - render partial: 'variance_chart', locals: { presenters: presenters } + 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 do |bar| + bar['data-for-measure-id'] == higher_scoring_measure.measure_id + end + lower_scoring_measure_index = measure_row_bars.find_index do |bar| + bar['data-for-measure-id'] == lower_scoring_measure.measure_id + end + + expect(higher_scoring_measure_index).to be < lower_scoring_measure_index + end end - it 'displays higher scoring measures above lower scoring measures' do - measure_row_bars = subject.css("rect.measure-row-bar") + context 'When there are no scores to show for any measures' do + before :each do + measure_lacking_score = create(:measure) + another_measure_lacking_score = create(:measure) + presenters = [ + VarianceChartRowPresenter.new(measure: measure_lacking_score, score: Score.new(nil)), + VarianceChartRowPresenter.new(measure: another_measure_lacking_score, score: Score.new(nil)) + ] + + render partial: 'variance_chart', locals: { presenters: presenters} + end - 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 } + it "displays the text 'insufficient data' for an empty dataset" do + expect(rendered).to have_text 'Insufficient data' + end - expect(higher_scoring_measure_index).to be < lower_scoring_measure_index + it "does not display the partial data text: 'The following measures are not displayed due to limited availability of school admin data and/or low survey response rates:' " do + expect(rendered).not_to have_text 'The following measures are not displayed due to limited availability of school admin data and/or low survey response rates:' + end end end