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

pull/1/head
Alex Basson 4 years ago
parent 07b7561b55
commit 161db3bf3e

@ -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

@ -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

@ -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

@ -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

Loading…
Cancel
Save