Display in the variance graph only those measures that have sufficient data

This commit is contained in:
Alex Basson 2021-10-22 09:18:32 -04:00
parent 07b7561b55
commit 161db3bf3e
4 changed files with 40 additions and 15 deletions

View file

@ -46,4 +46,8 @@ module VarianceHelper
def measures_with_insufficient_data(presenters:)
presenters.filter { |presenter| presenter.score == nil }
end
def measures_with_sufficient_data(presenters:)
presenters.filter { |presenter| presenter.score != nil }
end
end

View file

@ -1,9 +1,9 @@
<% unless measures_with_insufficient_data(presenters: presenters).empty? %>
<p>Note: The following measures are not displayed due to limited availability of school admin data and/or low survey response rates: <%= measures_with_insufficient_data(presenters: presenters).map(&:measure_name).join('; ') %>.</p>
<% end %>
<svg width="100%" height=<%= graph_height(presenters.size) %> xmlns="http://www.w3.org/2000/svg">
<% displayed_presenters = measures_with_sufficient_data(presenters: presenters) %>
<svg width="100%" height=<%= graph_height(displayed_presenters.size) %> xmlns="http://www.w3.org/2000/svg">
<filter id="inset-shadow" x="-50%" y="-50%" width="200%" height="200%">
<feComponentTransfer in=SourceAlpha>
@ -25,7 +25,7 @@
x="<%= label_width_percentage %>%"
y="0"
width="<%= graph_width_percentage %>%"
height=<%= graph_background_height(number_of_rows: presenters.size) %>
height=<%= graph_background_height(number_of_rows: displayed_presenters.size) %>
filter="url(#inset-shadow)"
>
<g id="zone-headings">
@ -60,7 +60,7 @@
<g id="measure-rows">
<svg id="measure-row-labels" x="0" y=<%= heading_gutter %>>
<%= presenters.each_with_index do |presenter, index| %>
<%= displayed_presenters.each_with_index do |presenter, index| %>
<text
class="font-cabin"
x="<%= label_width_percentage %>%"
@ -68,6 +68,7 @@
y="<%= index * measure_row_height + measure_row_height / 2 %>"
text-anchor="end"
dominant-baseline="middle"
data-variance-row-label
>
<%= presenter.measure_name %>
</text>
@ -80,13 +81,14 @@
y="<%= heading_gutter %>"
width="<%= graph_width_percentage %>%"
>
<%= presenters.each_with_index do |presenter, index| %>
<%= displayed_presenters.each_with_index do |presenter, index| %>
<rect
class="measure-row-bar <%= presenter.bar_color %>"
x="<%= presenter.x_offset %>"
y="<%= index * measure_row_height + (measure_row_height - measure_row_bar_height) / 2 %>"
width="<%= presenter.bar_width %>"
height=<%= measure_row_bar_height %> data-for-measure-id="<%= presenter.measure_id %>"
height=<%= measure_row_bar_height %>
data-for-measure-id="<%= presenter.measure_id %>"
stroke="none"
/>
<% end %>
@ -98,7 +100,7 @@
x="<%= label_width_percentage %>%"
y="0"
width="<%= graph_width_percentage %>%"
height="<%= graph_background_height(number_of_rows: presenters.size) %>"
height="<%= graph_background_height(number_of_rows: displayed_presenters.size) %>"
>
<g transform="translate(0, <%= heading_gutter %>)">
<rect
@ -122,7 +124,7 @@
<text
class="graph-footer"
x="60%"
y="<%= graph_background_height(number_of_rows: presenters.size) + (footer_gutter / 2) %>"
y="<%= graph_background_height(number_of_rows: displayed_presenters.size) + (footer_gutter / 2) %>"
text-anchor="middle"
>
Benchmark

View file

@ -227,9 +227,7 @@ def district_admin_sees_dashboard_content
district_admin_sees_student_physical_safety
district_admin_sees_problem_solving_emphasis
expect(page).to have_css("[data-for-measure-id='3A-i'][width='0.0%']")
page.assert_selector('.measure-row-bar', count: Measure.count)
page.assert_selector('.measure-row-bar', count: 5)
district_admin_sees_measures_in_correct_order
end

View file

@ -1,6 +1,7 @@
require 'rails_helper'
describe 'dashboard/index.html.erb' do
subject { Nokogiri::HTML(rendered) }
let(:support_for_teaching) { create(:measure, name: 'Support For Teaching Development & Growth') }
let(:effective_leadership) { create(:measure, name: 'Effective Leadership') }
@ -13,11 +14,11 @@ describe 'dashboard/index.html.erb' do
render
end
context 'when there are measures for which, in the given academic year, the school has insufficient responses' do
context 'when some presenters have a nil score' do
let(:measure_graph_row_presenters) {
[
MeasureGraphRowPresenter.new(measure: support_for_teaching, score: nil),
MeasureGraphRowPresenter.new(measure: create(:measure), score: rand),
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)
]
@ -26,17 +27,37 @@ describe 'dashboard/index.html.erb' do
it 'displays a note detailing which measures have insufficient responses for the given school & academic year' do
expect(rendered).to match /Note: The following measures are not displayed due to limited availability of school admin data and\/or low survey response rates: Support For Teaching Development &amp; Growth; Effective Leadership; Professional Qualifications./
end
it 'displays a variance row and label only those presenters for which the score is not nil' do
displayed_variance_rows = subject.css('[data-for-measure-id]')
expect(displayed_variance_rows.count).to eq 1
expect(displayed_variance_rows.first.attribute('data-for-measure-id').value).to eq 'should-be-displayed'
displayed_variance_labels = subject.css('[data-variance-row-label]')
expect(displayed_variance_labels.count).to eq 1
expect(displayed_variance_labels.first.inner_text).to include 'Should Be Displayed'
end
end
context 'when there are no measures for which, in the given academic year, the school has insufficient responses' do
context 'when all the presenters have a non-nil score' do
let(:measure_graph_row_presenters) {
[
MeasureGraphRowPresenter.new(measure: create(:measure), score: rand)
MeasureGraphRowPresenter.new(measure: create(:measure, name: 'Display Me', measure_id: 'display-me'), score: rand)
]
}
it 'does not display a note detailing which measures have insufficient responses for the given school & academic year' do
expect(rendered).not_to match /Note: The following measures are not displayed due to limited availability of school admin data and\/or low survey response rates/
end
it 'displays a variance row for each presenter' do
displayed_variance_rows = subject.css('[data-for-measure-id]')
expect(displayed_variance_rows.count).to eq 1
expect(displayed_variance_rows.first.attribute('data-for-measure-id').value).to eq 'display-me'
displayed_variance_labels = subject.css('[data-variance-row-label]')
expect(displayed_variance_labels.count).to eq 1
expect(displayed_variance_labels.first.inner_text).to include 'Display Me'
end
end
end