You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
203 lines
6.5 KiB
203 lines
6.5 KiB
require 'rails_helper'
|
|
include AnalyzeHelper
|
|
include Analyze::Graph
|
|
describe 'analyze/index' do
|
|
subject { Nokogiri::HTML(rendered) }
|
|
let(:category) { create(:category) }
|
|
let(:subcategory) { create(:subcategory, category:) }
|
|
let(:school) { create(:school) }
|
|
let(:academic_year) { create(:academic_year) }
|
|
let(:races) do
|
|
DemographicLoader.load_data(filepath: 'spec/fixtures/sample_demographics.csv')
|
|
Race.all
|
|
end
|
|
let(:graph) { StudentsAndTeachers.new }
|
|
let(:graphs) do
|
|
[StudentsAndTeachers.new, StudentsByRace.new(races:)]
|
|
end
|
|
let(:background) { BackgroundPresenter.new(num_of_columns: graph.columns.count) }
|
|
let(:selected_races) { races }
|
|
|
|
let(:support_for_teaching) do
|
|
measure = create(:measure, name: 'Support For Teaching Development & Growth', measure_id: '1A-I', subcategory:)
|
|
scale = create(:scale, measure:)
|
|
create(:student_survey_item,
|
|
scale:,
|
|
watch_low_benchmark: 1.5,
|
|
growth_low_benchmark: 2.5,
|
|
approval_low_benchmark: 3.5,
|
|
ideal_low_benchmark: 4.5)
|
|
measure
|
|
end
|
|
|
|
let(:effective_leadership) do
|
|
measure = create(:measure, name: 'Effective Leadership', measure_id: '1A-II', subcategory:)
|
|
scale = create(:scale, measure:)
|
|
create(:teacher_survey_item,
|
|
scale:,
|
|
watch_low_benchmark: 1.5,
|
|
growth_low_benchmark: 2.5,
|
|
approval_low_benchmark: 3.5,
|
|
ideal_low_benchmark: 4.5)
|
|
measure
|
|
end
|
|
|
|
let(:professional_qualifications) do
|
|
measure = create(:measure, name: 'Professional Qualifications', measure_id: '1A-III', subcategory:)
|
|
scale = create(:scale, measure:)
|
|
create(:admin_data_item,
|
|
scale:,
|
|
watch_low_benchmark: 1.5,
|
|
growth_low_benchmark: 2.5,
|
|
approval_low_benchmark: 3.5,
|
|
ideal_low_benchmark: 4.5)
|
|
measure
|
|
end
|
|
|
|
let(:sources) do
|
|
[Analyze::Source::SurveyData.new(slices:)]
|
|
end
|
|
|
|
let(:slices) do
|
|
students_and_teachers = Analyze::Slice::StudentsAndTeachers.new
|
|
students_by_group = Analyze::Slice::StudentsByGroup.new(races:, grades:)
|
|
[students_and_teachers, students_by_group]
|
|
end
|
|
|
|
let(:slice) do
|
|
slices.first
|
|
end
|
|
|
|
let(:groups) do
|
|
[Analyze::Group::Race.new, Analyze::Group::Grade.new]
|
|
end
|
|
|
|
let(:group) do
|
|
groups.first
|
|
end
|
|
|
|
let(:grades) do
|
|
(1..12).to_a
|
|
end
|
|
|
|
let(:genders) do
|
|
DemographicLoader.load_data(filepath: 'spec/fixtures/sample_demographics.csv')
|
|
Gender.all
|
|
end
|
|
|
|
let(:selected_genders) do
|
|
genders
|
|
end
|
|
|
|
let(:selected_grades) do
|
|
grades
|
|
end
|
|
|
|
before :each do
|
|
assign :races, races
|
|
assign :selected_races, selected_races
|
|
assign :graph, graph
|
|
assign :graphs, graphs
|
|
assign :background, background
|
|
assign :academic_year, academic_year
|
|
assign :available_academic_years, [academic_year]
|
|
assign :selected_academic_years, [academic_year]
|
|
assign :district, create(:district)
|
|
assign :school, school
|
|
assign :category, category
|
|
assign :categories, [category]
|
|
assign :subcategory, subcategory
|
|
assign :subcategories, category.subcategories
|
|
assign :measures, [support_for_teaching, effective_leadership, professional_qualifications]
|
|
assign :sources, sources
|
|
assign :source, sources.first
|
|
assign :groups, groups
|
|
assign :group, group
|
|
assign :slice, slice
|
|
assign :grades, grades
|
|
assign :selected_grades, selected_grades
|
|
assign :genders, genders
|
|
assign :selected_genders, selected_genders
|
|
create(:respondent, school:, academic_year:)
|
|
create(:survey, school:, academic_year:)
|
|
end
|
|
context 'when all the presenters have a nil score' do
|
|
before do
|
|
render
|
|
end
|
|
# let(:grouped_bar_column_presenters) do
|
|
# measure = create(:measure, name: 'Display Me', measure_id: 'display-me')
|
|
# scale = create(:scale, measure:)
|
|
# create(:student_survey_item,
|
|
# scale:,
|
|
# watch_low_benchmark: 1.5,
|
|
# growth_low_benchmark: 2.5,
|
|
# approval_low_benchmark: 3.5,
|
|
# ideal_low_benchmark: 4.5)
|
|
# [
|
|
# GroupedBarColumnPresenter.new(measure:,
|
|
# score: Score.new(average: rand))
|
|
# ]
|
|
# end
|
|
|
|
it 'displays a set of grouped bars for each presenter' do
|
|
displayed_variance_columns = subject.css('.grouped-bar-column')
|
|
expect(displayed_variance_columns.count).to eq 9
|
|
|
|
displayed_variance_rows = subject.css('[data-for-measure-id]')
|
|
expect(displayed_variance_rows.first.attribute('data-for-measure-id').value).to eq '1A-I'
|
|
|
|
displayed_academic_years = subject.css('[data-for-academic-year]')
|
|
expect(displayed_academic_years.count).to eq 0
|
|
|
|
displayed_variance_labels = subject.css('[data-grouped-bar-label]')
|
|
expect(displayed_variance_labels.count).to eq 18
|
|
expect(displayed_variance_labels.first.inner_text).to include 'All'
|
|
expect(displayed_variance_labels[1].inner_text).to include 'Students'
|
|
expect(displayed_variance_labels.last.inner_text).to include 'Data'
|
|
end
|
|
|
|
it 'displays all measures for the first subcategory' do
|
|
expect(rendered).to have_text '1A-I'
|
|
expect(rendered).to have_text '1A-II'
|
|
expect(rendered).to have_text '1A-III'
|
|
end
|
|
|
|
it 'displays user interface controls' do
|
|
expect(subject).to have_text 'Focus Area'
|
|
expect(subject).to have_css '#select-category'
|
|
expect(subject).to have_css '#select-subcategory'
|
|
expect(subject).to have_css "##{academic_year.range}"
|
|
end
|
|
|
|
it 'displays disabled checkboxes for years that dont have data' do
|
|
year_checkbox = subject.css("##{academic_year.range}").first
|
|
expect(year_checkbox.name).to eq 'input'
|
|
expect(academic_year.range).to eq '2050-51'
|
|
expect(year_checkbox).to have_attribute 'disabled'
|
|
end
|
|
|
|
it 'displays a radio box selector for each type of data filter' do
|
|
expect(subject).to have_css '#students-and-teachers'
|
|
expect(subject).to have_css '#students-by-group'
|
|
end
|
|
|
|
it 'displays a checkbox for each race designation' do
|
|
race_slugs = %w[american-indian-or-alaskan-native asian-or-pacific-islander black-or-african-american
|
|
hispanic-or-latinx middle-eastern multiracial race-ethnicity-not-listed white-or-caucasian]
|
|
race_slugs.each do |slug|
|
|
expect(subject).to have_css("//input[@type='checkbox'][@id='#{slug}']")
|
|
end
|
|
end
|
|
end
|
|
|
|
context 'when presenters have a displayable score' do
|
|
before do
|
|
render
|
|
end
|
|
|
|
context 'when displaying a student and teacher graph' do
|
|
end
|
|
end
|
|
end
|