From 1265a164b90e81455c08a0a9a25140c06b473e12 Mon Sep 17 00:00:00 2001 From: rebuilt Date: Wed, 26 Jul 2023 09:38:45 -0700 Subject: [PATCH] feat: add popover to analyze graphs that displays the n-size of the different columns. Make sure to only calculate a score for a race if there are more than 10 respondents to a question. --- .rubocop.yml | 2 +- app/presenters/analyze/graph/all_data.rb | 4 +- .../analyze/graph/column/all_admin.rb | 10 +++-- .../analyze/graph/column/all_student.rb | 6 ++- .../analyze/graph/column/all_survey_data.rb | 6 ++- .../analyze/graph/column/all_teacher.rb | 13 +++++- .../graph/column/gender_column/female.rb | 5 ++- .../column/gender_column/gender_count.rb | 18 +++++++++ .../graph/column/gender_column/male.rb | 5 ++- .../graph/column/gender_column/non_binary.rb | 5 ++- .../graph/column/gender_column/unknown.rb | 5 ++- .../analyze/graph/column/grade/eight.rb | 6 +-- .../analyze/graph/column/grade/eleven.rb | 6 +-- .../analyze/graph/column/grade/five.rb | 5 ++- .../analyze/graph/column/grade/four.rb | 5 ++- .../analyze/graph/column/grade/grade_count.rb | 18 +++++++++ .../analyze/graph/column/grade/nine.rb | 7 ++-- .../analyze/graph/column/grade/one.rb | 5 ++- .../analyze/graph/column/grade/seven.rb | 5 ++- .../analyze/graph/column/grade/six.rb | 5 ++- .../analyze/graph/column/grade/ten.rb | 7 ++-- .../analyze/graph/column/grade/three.rb | 5 ++- .../analyze/graph/column/grade/twelve.rb | 7 ++-- .../analyze/graph/column/grade/two.rb | 5 ++- .../analyze/graph/column/grade/zero.rb | 33 +++++++++++++++ .../column/grouped_bar_column_presenter.rb | 40 +++++++++++++++++-- .../column/income_column/disadvantaged.rb | 29 ++++++++++++++ .../column/income_column/income_count.rb | 18 +++++++++ .../column/income_column/not_disadvantaged.rb | 29 ++++++++++++++ .../graph/column/income_column/unknown.rb | 29 ++++++++++++++ .../column/race_column/american_indian.rb | 3 +- .../analyze/graph/column/race_column/asian.rb | 3 +- .../analyze/graph/column/race_column/black.rb | 3 +- .../graph/column/race_column/hispanic.rb | 3 +- .../column/race_column/middle_eastern.rb | 3 +- .../graph/column/race_column/multiracial.rb | 3 +- .../graph/column/race_column/race_count.rb | 20 ++++++++++ .../graph/column/race_column/unknown.rb | 3 +- .../analyze/graph/column/race_column/white.rb | 3 +- app/services/race_score_loader.rb | 6 +-- .../analyze/_grouped_bar_column.html.erb | 24 ++++++++--- cypress/e2e/analyze.cy.js | 15 +++++++ 42 files changed, 362 insertions(+), 70 deletions(-) create mode 100644 app/presenters/analyze/graph/column/gender_column/gender_count.rb create mode 100644 app/presenters/analyze/graph/column/grade/grade_count.rb create mode 100644 app/presenters/analyze/graph/column/grade/zero.rb create mode 100644 app/presenters/analyze/graph/column/income_column/disadvantaged.rb create mode 100644 app/presenters/analyze/graph/column/income_column/income_count.rb create mode 100644 app/presenters/analyze/graph/column/income_column/not_disadvantaged.rb create mode 100644 app/presenters/analyze/graph/column/income_column/unknown.rb create mode 100644 app/presenters/analyze/graph/column/race_column/race_count.rb create mode 100644 cypress/e2e/analyze.cy.js diff --git a/.rubocop.yml b/.rubocop.yml index 49357fb1..61850707 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -12,4 +12,4 @@ Style/Documentation: Enabled: false Style/StringLiterals: - EnforcedStyle: single_quotes + EnforcedStyle: double_quotes diff --git a/app/presenters/analyze/graph/all_data.rb b/app/presenters/analyze/graph/all_data.rb index 04266a1a..3d6e738d 100644 --- a/app/presenters/analyze/graph/all_data.rb +++ b/app/presenters/analyze/graph/all_data.rb @@ -5,11 +5,11 @@ module Analyze class AllData include Analyze::Graph::Column def to_s - 'All Data' + "All Data" end def slug - 'all-data' + "all-data" end def columns diff --git a/app/presenters/analyze/graph/column/all_admin.rb b/app/presenters/analyze/graph/column/all_admin.rb index 7cdb59be..57fe7799 100644 --- a/app/presenters/analyze/graph/column/all_admin.rb +++ b/app/presenters/analyze/graph/column/all_admin.rb @@ -5,11 +5,11 @@ module Analyze module Column class AllAdmin < GroupedBarColumnPresenter def label - 'All Admin' + "All Admin" end def basis - 'admin data' + "admin data" end def show_irrelevancy_message? @@ -23,12 +23,16 @@ module Analyze end def insufficiency_message - ['data not', 'available'] + ["data not", "available"] end def score(year_index) measure.admin_score(school:, academic_year: academic_years[year_index]) end + + def type + :admin + end end end end diff --git a/app/presenters/analyze/graph/column/all_student.rb b/app/presenters/analyze/graph/column/all_student.rb index 811563c3..ed133d34 100644 --- a/app/presenters/analyze/graph/column/all_student.rb +++ b/app/presenters/analyze/graph/column/all_student.rb @@ -5,7 +5,7 @@ module Analyze module Column class AllStudent < GroupedBarColumnPresenter def label - 'All Students' + "All Students" end def show_irrelevancy_message? @@ -23,6 +23,10 @@ module Analyze def score(year_index) measure.student_score(school:, academic_year: academic_years[year_index]) end + + def type + :student + end end end end diff --git a/app/presenters/analyze/graph/column/all_survey_data.rb b/app/presenters/analyze/graph/column/all_survey_data.rb index b0cf9036..1e4d5e2c 100644 --- a/app/presenters/analyze/graph/column/all_survey_data.rb +++ b/app/presenters/analyze/graph/column/all_survey_data.rb @@ -5,7 +5,7 @@ module Analyze module Column class AllSurveyData < GroupedBarColumnPresenter def label - 'Survey Data' + "Survey Data" end def show_irrelevancy_message? @@ -24,6 +24,10 @@ module Analyze combined_score(school:, academic_year: academic_years[year_index]) end + def type + :all_survey_data + end + private def combined_score(school:, academic_year:) diff --git a/app/presenters/analyze/graph/column/all_teacher.rb b/app/presenters/analyze/graph/column/all_teacher.rb index 533ff29c..14dfbf82 100644 --- a/app/presenters/analyze/graph/column/all_teacher.rb +++ b/app/presenters/analyze/graph/column/all_teacher.rb @@ -5,11 +5,11 @@ module Analyze module Column class AllTeacher < GroupedBarColumnPresenter def label - 'All Teachers' + "All Teachers" end def basis - 'teacher surveys' + "teacher surveys" end def show_irrelevancy_message? @@ -27,6 +27,15 @@ module Analyze def score(year_index) measure.teacher_score(school:, academic_year: academic_years[year_index]) end + + def type + :teacher + end + + def n_size(year_index) + SurveyItemResponse.where(survey_item: measure.teacher_survey_items, school:, + academic_year: academic_years[year_index]).count + end end end end diff --git a/app/presenters/analyze/graph/column/gender_column/female.rb b/app/presenters/analyze/graph/column/gender_column/female.rb index a4ea0af6..e55691bf 100644 --- a/app/presenters/analyze/graph/column/gender_column/female.rb +++ b/app/presenters/analyze/graph/column/gender_column/female.rb @@ -6,12 +6,13 @@ module Analyze module GenderColumn class Female < GroupedBarColumnPresenter include Analyze::Graph::Column::GenderColumn::ScoreForGender + include Analyze::Graph::Column::GenderColumn::GenderCount def label - 'Female' + "Female" end def basis - 'student' + "student" end def show_irrelevancy_message? diff --git a/app/presenters/analyze/graph/column/gender_column/gender_count.rb b/app/presenters/analyze/graph/column/gender_column/gender_count.rb new file mode 100644 index 00000000..97460248 --- /dev/null +++ b/app/presenters/analyze/graph/column/gender_column/gender_count.rb @@ -0,0 +1,18 @@ +module Analyze + module Graph + module Column + module GenderColumn + module GenderCount + def type + :student + end + + def n_size(year_index) + SurveyItemResponse.where(gender:, survey_item: measure.student_survey_items, school:, grade: grades(year_index), + academic_year: academic_years[year_index]).select(:response_id).distinct.count + end + end + end + end + end +end diff --git a/app/presenters/analyze/graph/column/gender_column/male.rb b/app/presenters/analyze/graph/column/gender_column/male.rb index f8403e6c..7158d2d8 100644 --- a/app/presenters/analyze/graph/column/gender_column/male.rb +++ b/app/presenters/analyze/graph/column/gender_column/male.rb @@ -6,12 +6,13 @@ module Analyze module GenderColumn class Male < GroupedBarColumnPresenter include Analyze::Graph::Column::GenderColumn::ScoreForGender + include Analyze::Graph::Column::GenderColumn::GenderCount def label - 'Male' + "Male" end def basis - 'student' + "student" end def show_irrelevancy_message? diff --git a/app/presenters/analyze/graph/column/gender_column/non_binary.rb b/app/presenters/analyze/graph/column/gender_column/non_binary.rb index 61778768..c9e4cda0 100644 --- a/app/presenters/analyze/graph/column/gender_column/non_binary.rb +++ b/app/presenters/analyze/graph/column/gender_column/non_binary.rb @@ -6,12 +6,13 @@ module Analyze module GenderColumn class NonBinary < GroupedBarColumnPresenter include Analyze::Graph::Column::GenderColumn::ScoreForGender + include Analyze::Graph::Column::GenderColumn::GenderCount def label - 'Non-Binary' + "Non-Binary" end def basis - 'student' + "student" end def show_irrelevancy_message? diff --git a/app/presenters/analyze/graph/column/gender_column/unknown.rb b/app/presenters/analyze/graph/column/gender_column/unknown.rb index 325b58a9..f8e119cd 100644 --- a/app/presenters/analyze/graph/column/gender_column/unknown.rb +++ b/app/presenters/analyze/graph/column/gender_column/unknown.rb @@ -6,12 +6,13 @@ module Analyze module GenderColumn class Unknown < GroupedBarColumnPresenter include Analyze::Graph::Column::GenderColumn::ScoreForGender + include Analyze::Graph::Column::GenderColumn::GenderCount def label - 'Unknown' + "Unknown" end def basis - 'student' + "student" end def show_irrelevancy_message? diff --git a/app/presenters/analyze/graph/column/grade/eight.rb b/app/presenters/analyze/graph/column/grade/eight.rb index 530fada1..ca31d21d 100644 --- a/app/presenters/analyze/graph/column/grade/eight.rb +++ b/app/presenters/analyze/graph/column/grade/eight.rb @@ -6,12 +6,13 @@ module Analyze module Grade class Eight < GroupedBarColumnPresenter include Analyze::Graph::Column::Grade::ScoreForGrade + include Analyze::Graph::Column::Grade::GradeCount def label - 'Grade 8' + "Grade 8" end def basis - 'student' + "student" end def show_irrelevancy_message? @@ -30,4 +31,3 @@ module Analyze end end end - diff --git a/app/presenters/analyze/graph/column/grade/eleven.rb b/app/presenters/analyze/graph/column/grade/eleven.rb index 45dd257b..5a6a2e41 100644 --- a/app/presenters/analyze/graph/column/grade/eleven.rb +++ b/app/presenters/analyze/graph/column/grade/eleven.rb @@ -6,12 +6,13 @@ module Analyze module Grade class Eleven < GroupedBarColumnPresenter include Analyze::Graph::Column::Grade::ScoreForGrade + include Analyze::Graph::Column::Grade::GradeCount def label - 'Grade 11' + "Grade 11" end def basis - 'student' + "student" end def show_irrelevancy_message? @@ -30,4 +31,3 @@ module Analyze end end end - diff --git a/app/presenters/analyze/graph/column/grade/five.rb b/app/presenters/analyze/graph/column/grade/five.rb index b6f2f5e3..5eb75d15 100644 --- a/app/presenters/analyze/graph/column/grade/five.rb +++ b/app/presenters/analyze/graph/column/grade/five.rb @@ -6,12 +6,13 @@ module Analyze module Grade class Five < GroupedBarColumnPresenter include Analyze::Graph::Column::Grade::ScoreForGrade + include Analyze::Graph::Column::Grade::GradeCount def label - 'Grade 5' + "Grade 5" end def basis - 'student' + "student" end def show_irrelevancy_message? diff --git a/app/presenters/analyze/graph/column/grade/four.rb b/app/presenters/analyze/graph/column/grade/four.rb index ce1be6b3..6477ec4e 100644 --- a/app/presenters/analyze/graph/column/grade/four.rb +++ b/app/presenters/analyze/graph/column/grade/four.rb @@ -6,12 +6,13 @@ module Analyze module Grade class Four < GroupedBarColumnPresenter include Analyze::Graph::Column::Grade::ScoreForGrade + include Analyze::Graph::Column::Grade::GradeCount def label - 'Grade 4' + "Grade 4" end def basis - 'student' + "student" end def show_irrelevancy_message? diff --git a/app/presenters/analyze/graph/column/grade/grade_count.rb b/app/presenters/analyze/graph/column/grade/grade_count.rb new file mode 100644 index 00000000..42ed3a23 --- /dev/null +++ b/app/presenters/analyze/graph/column/grade/grade_count.rb @@ -0,0 +1,18 @@ +module Analyze + module Graph + module Column + module Grade + module GradeCount + def type + :student + end + + def n_size(year_index) + SurveyItemResponse.where(grade:, survey_item: measure.student_survey_items, school:, + academic_year: academic_years[year_index]).select(:response_id).distinct.count + end + end + end + end + end +end diff --git a/app/presenters/analyze/graph/column/grade/nine.rb b/app/presenters/analyze/graph/column/grade/nine.rb index 9a3f91d8..ebdff840 100644 --- a/app/presenters/analyze/graph/column/grade/nine.rb +++ b/app/presenters/analyze/graph/column/grade/nine.rb @@ -6,12 +6,13 @@ module Analyze module Grade class Nine < GroupedBarColumnPresenter include Analyze::Graph::Column::Grade::ScoreForGrade + include Analyze::Graph::Column::Grade::GradeCount def label - 'Grade 9' + "Grade 9" end def basis - 'student' + "student" end def show_irrelevancy_message? @@ -30,5 +31,3 @@ module Analyze end end end - - diff --git a/app/presenters/analyze/graph/column/grade/one.rb b/app/presenters/analyze/graph/column/grade/one.rb index 3e6d1367..a2163a1d 100644 --- a/app/presenters/analyze/graph/column/grade/one.rb +++ b/app/presenters/analyze/graph/column/grade/one.rb @@ -6,12 +6,13 @@ module Analyze module Grade class One < GroupedBarColumnPresenter include Analyze::Graph::Column::Grade::ScoreForGrade + include Analyze::Graph::Column::Grade::GradeCount def label - 'Grade 1' + "Grade 1" end def basis - 'student' + "student" end def show_irrelevancy_message? diff --git a/app/presenters/analyze/graph/column/grade/seven.rb b/app/presenters/analyze/graph/column/grade/seven.rb index ae82b562..729c6301 100644 --- a/app/presenters/analyze/graph/column/grade/seven.rb +++ b/app/presenters/analyze/graph/column/grade/seven.rb @@ -6,12 +6,13 @@ module Analyze module Grade class Seven < GroupedBarColumnPresenter include Analyze::Graph::Column::Grade::ScoreForGrade + include Analyze::Graph::Column::Grade::GradeCount def label - 'Grade 7' + "Grade 7" end def basis - 'student' + "student" end def show_irrelevancy_message? diff --git a/app/presenters/analyze/graph/column/grade/six.rb b/app/presenters/analyze/graph/column/grade/six.rb index d6aadba9..b30d8fd0 100644 --- a/app/presenters/analyze/graph/column/grade/six.rb +++ b/app/presenters/analyze/graph/column/grade/six.rb @@ -6,12 +6,13 @@ module Analyze module Grade class Six < GroupedBarColumnPresenter include Analyze::Graph::Column::Grade::ScoreForGrade + include Analyze::Graph::Column::Grade::GradeCount def label - 'Grade 6' + "Grade 6" end def basis - 'student' + "student" end def show_irrelevancy_message? diff --git a/app/presenters/analyze/graph/column/grade/ten.rb b/app/presenters/analyze/graph/column/grade/ten.rb index 9224881b..86e94930 100644 --- a/app/presenters/analyze/graph/column/grade/ten.rb +++ b/app/presenters/analyze/graph/column/grade/ten.rb @@ -6,12 +6,13 @@ module Analyze module Grade class Ten < GroupedBarColumnPresenter include Analyze::Graph::Column::Grade::ScoreForGrade + include Analyze::Graph::Column::Grade::GradeCount def label - 'Grade 10' + "Grade 10" end def basis - 'student' + "student" end def show_irrelevancy_message? @@ -30,5 +31,3 @@ module Analyze end end end - - diff --git a/app/presenters/analyze/graph/column/grade/three.rb b/app/presenters/analyze/graph/column/grade/three.rb index 570664da..c5ce994f 100644 --- a/app/presenters/analyze/graph/column/grade/three.rb +++ b/app/presenters/analyze/graph/column/grade/three.rb @@ -6,12 +6,13 @@ module Analyze module Grade class Three < GroupedBarColumnPresenter include Analyze::Graph::Column::Grade::ScoreForGrade + include Analyze::Graph::Column::Grade::GradeCount def label - 'Grade 3' + "Grade 3" end def basis - 'student' + "student" end def show_irrelevancy_message? diff --git a/app/presenters/analyze/graph/column/grade/twelve.rb b/app/presenters/analyze/graph/column/grade/twelve.rb index 52ec06e9..6d1defc3 100644 --- a/app/presenters/analyze/graph/column/grade/twelve.rb +++ b/app/presenters/analyze/graph/column/grade/twelve.rb @@ -6,12 +6,13 @@ module Analyze module Grade class Twelve < GroupedBarColumnPresenter include Analyze::Graph::Column::Grade::ScoreForGrade + include Analyze::Graph::Column::Grade::GradeCount def label - 'Grade 12' + "Grade 12" end def basis - 'student' + "student" end def show_irrelevancy_message? @@ -30,5 +31,3 @@ module Analyze end end end - - diff --git a/app/presenters/analyze/graph/column/grade/two.rb b/app/presenters/analyze/graph/column/grade/two.rb index c2541d6b..9bb80df3 100644 --- a/app/presenters/analyze/graph/column/grade/two.rb +++ b/app/presenters/analyze/graph/column/grade/two.rb @@ -8,12 +8,13 @@ module Analyze attr_reader :sufficient_responses include Analyze::Graph::Column::Grade::ScoreForGrade + include Analyze::Graph::Column::Grade::GradeCount def label - 'Grade 2' + "Grade 2" end def basis - 'student' + "student" end def show_irrelevancy_message? diff --git a/app/presenters/analyze/graph/column/grade/zero.rb b/app/presenters/analyze/graph/column/grade/zero.rb new file mode 100644 index 00000000..64e213ae --- /dev/null +++ b/app/presenters/analyze/graph/column/grade/zero.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +module Analyze + module Graph + module Column + module Grade + class Zero < GroupedBarColumnPresenter + include Analyze::Graph::Column::Grade::ScoreForGrade + include Analyze::Graph::Column::Grade::GradeCount + def label + "Kindergarten" + end + + def basis + "student" + end + + def show_irrelevancy_message? + false + end + + def show_insufficient_data_message? + false + end + + def grade + 0 + end + end + end + end + end +end diff --git a/app/presenters/analyze/graph/column/grouped_bar_column_presenter.rb b/app/presenters/analyze/graph/column/grouped_bar_column_presenter.rb index c06fe18f..9e826c88 100644 --- a/app/presenters/analyze/graph/column/grouped_bar_column_presenter.rb +++ b/app/presenters/analyze/graph/column/grouped_bar_column_presenter.rb @@ -35,11 +35,11 @@ module Analyze end def label - 'All Data' + "All Data" end def basis - '' + "" end def show_irrelevancy_message? @@ -106,11 +106,43 @@ module Analyze end def basis - 'student surveys' + "student surveys" + end + + def type + :all_data + end + + def show_popover? + %i[student teacher].include? type + end + + def n_size(year_index) + SurveyItemResponse.where(survey_item: measure.student_survey_items, school:, grade: grades(year_index), + academic_year: academic_years[year_index]).select(:response_id).distinct.count + end + + def popover_content(year_index) + "#{n_size(year_index)} #{type.to_s.capitalize}s" end def insufficiency_message - ['survey response', 'rate below 25%'] + ["survey response", "rate below 25%"] + end + + def sufficient_data?(year_index) + case basis + when "student" + score(year_index).meets_student_threshold + when "teacher" + score(year_index).meets_teacher_threshold + else + true + end + end + + def grades(year_index) + Respondent.find_by(school:, academic_year: academic_years[year_index]).counts_by_grade.keys end private diff --git a/app/presenters/analyze/graph/column/income_column/disadvantaged.rb b/app/presenters/analyze/graph/column/income_column/disadvantaged.rb new file mode 100644 index 00000000..c6569611 --- /dev/null +++ b/app/presenters/analyze/graph/column/income_column/disadvantaged.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +module Analyze + module Graph + module Column + module IncomeColumn + class Disadvantaged < GroupedBarColumnPresenter + include Analyze::Graph::Column::IncomeColumn::ScoreForIncome + include Analyze::Graph::Column::IncomeColumn::IncomeCount + def label + "Economically Disadvantaged" + end + + def show_irrelevancy_message? + false + end + + def show_insufficient_data_message? + false + end + + def income + Income.find_by_designation "Economically Disadvantaged - Y" + end + end + end + end + end +end diff --git a/app/presenters/analyze/graph/column/income_column/income_count.rb b/app/presenters/analyze/graph/column/income_column/income_count.rb new file mode 100644 index 00000000..642f7308 --- /dev/null +++ b/app/presenters/analyze/graph/column/income_column/income_count.rb @@ -0,0 +1,18 @@ +module Analyze + module Graph + module Column + module IncomeColumn + module IncomeCount + def type + :student + end + + def n_size(year_index) + SurveyItemResponse.where(income:, survey_item: measure.student_survey_items, school:, grade: grades(year_index), + academic_year: academic_years[year_index]).select(:response_id).distinct.count + end + end + end + end + end +end diff --git a/app/presenters/analyze/graph/column/income_column/not_disadvantaged.rb b/app/presenters/analyze/graph/column/income_column/not_disadvantaged.rb new file mode 100644 index 00000000..e48c653f --- /dev/null +++ b/app/presenters/analyze/graph/column/income_column/not_disadvantaged.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +module Analyze + module Graph + module Column + module IncomeColumn + class NotDisadvantaged < GroupedBarColumnPresenter + include Analyze::Graph::Column::IncomeColumn::ScoreForIncome + include Analyze::Graph::Column::IncomeColumn::IncomeCount + def label + "Not Disadvantaged" + end + + def show_irrelevancy_message? + false + end + + def show_insufficient_data_message? + false + end + + def income + Income.find_by_designation "Economically Disadvantaged - N" + end + end + end + end + end +end diff --git a/app/presenters/analyze/graph/column/income_column/unknown.rb b/app/presenters/analyze/graph/column/income_column/unknown.rb new file mode 100644 index 00000000..eee7c8be --- /dev/null +++ b/app/presenters/analyze/graph/column/income_column/unknown.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +module Analyze + module Graph + module Column + module IncomeColumn + class Unknown < GroupedBarColumnPresenter + include Analyze::Graph::Column::IncomeColumn::ScoreForIncome + include Analyze::Graph::Column::IncomeColumn::IncomeCount + def label + "Unknown" + end + + def show_irrelevancy_message? + false + end + + def show_insufficient_data_message? + false + end + + def income + Income.find_by_designation "Unknown" + end + end + end + end + end +end diff --git a/app/presenters/analyze/graph/column/race_column/american_indian.rb b/app/presenters/analyze/graph/column/race_column/american_indian.rb index 7c0a70c2..25e46da6 100644 --- a/app/presenters/analyze/graph/column/race_column/american_indian.rb +++ b/app/presenters/analyze/graph/column/race_column/american_indian.rb @@ -6,8 +6,9 @@ module Analyze module RaceColumn class AmericanIndian < GroupedBarColumnPresenter include Analyze::Graph::Column::ScoreForRace + include Analyze::Graph::Column::RaceColumn::RaceCount def label - 'American Indian' + "American Indian" end def show_irrelevancy_message? diff --git a/app/presenters/analyze/graph/column/race_column/asian.rb b/app/presenters/analyze/graph/column/race_column/asian.rb index dc289d27..c60b012e 100644 --- a/app/presenters/analyze/graph/column/race_column/asian.rb +++ b/app/presenters/analyze/graph/column/race_column/asian.rb @@ -6,8 +6,9 @@ module Analyze module RaceColumn class Asian < GroupedBarColumnPresenter include Analyze::Graph::Column::ScoreForRace + include Analyze::Graph::Column::RaceColumn::RaceCount def label - 'Asian' + "Asian" end def show_irrelevancy_message? diff --git a/app/presenters/analyze/graph/column/race_column/black.rb b/app/presenters/analyze/graph/column/race_column/black.rb index 4b707586..6433068e 100644 --- a/app/presenters/analyze/graph/column/race_column/black.rb +++ b/app/presenters/analyze/graph/column/race_column/black.rb @@ -6,8 +6,9 @@ module Analyze module RaceColumn class Black < GroupedBarColumnPresenter include Analyze::Graph::Column::ScoreForRace + include Analyze::Graph::Column::RaceColumn::RaceCount def label - 'Black' + "Black" end def show_irrelevancy_message? diff --git a/app/presenters/analyze/graph/column/race_column/hispanic.rb b/app/presenters/analyze/graph/column/race_column/hispanic.rb index a4fb233f..1a902d90 100644 --- a/app/presenters/analyze/graph/column/race_column/hispanic.rb +++ b/app/presenters/analyze/graph/column/race_column/hispanic.rb @@ -6,8 +6,9 @@ module Analyze module RaceColumn class Hispanic < GroupedBarColumnPresenter include Analyze::Graph::Column::ScoreForRace + include Analyze::Graph::Column::RaceColumn::RaceCount def label - 'Hispanic' + "Hispanic" end def show_irrelevancy_message? diff --git a/app/presenters/analyze/graph/column/race_column/middle_eastern.rb b/app/presenters/analyze/graph/column/race_column/middle_eastern.rb index 54cfc08b..80e5089e 100644 --- a/app/presenters/analyze/graph/column/race_column/middle_eastern.rb +++ b/app/presenters/analyze/graph/column/race_column/middle_eastern.rb @@ -6,9 +6,10 @@ module Analyze module RaceColumn class MiddleEastern < GroupedBarColumnPresenter include Analyze::Graph::Column::ScoreForRace + include Analyze::Graph::Column::RaceColumn::RaceCount def label - 'Middle Eastern' + "Middle Eastern" end def show_irrelevancy_message? diff --git a/app/presenters/analyze/graph/column/race_column/multiracial.rb b/app/presenters/analyze/graph/column/race_column/multiracial.rb index f33f7641..85b359fb 100644 --- a/app/presenters/analyze/graph/column/race_column/multiracial.rb +++ b/app/presenters/analyze/graph/column/race_column/multiracial.rb @@ -6,8 +6,9 @@ module Analyze module RaceColumn class Multiracial < GroupedBarColumnPresenter include Analyze::Graph::Column::ScoreForRace + include Analyze::Graph::Column::RaceColumn::RaceCount def label - 'Multiracial' + "Multiracial" end def show_irrelevancy_message? diff --git a/app/presenters/analyze/graph/column/race_column/race_count.rb b/app/presenters/analyze/graph/column/race_column/race_count.rb new file mode 100644 index 00000000..b46d3de1 --- /dev/null +++ b/app/presenters/analyze/graph/column/race_column/race_count.rb @@ -0,0 +1,20 @@ +module Analyze + module Graph + module Column + module RaceColumn + module RaceCount + def type + :student + end + + def n_size(year_index) + SurveyItemResponse.joins("JOIN student_races on survey_item_responses.student_id = student_races.student_id JOIN students on students.id = student_races.student_id").where( + school:, academic_year: academic_years[year_index], + survey_item: measure.student_survey_items + ).where("student_races.race_id": race.id).select(:response_id).distinct.count + end + end + end + end + end +end diff --git a/app/presenters/analyze/graph/column/race_column/unknown.rb b/app/presenters/analyze/graph/column/race_column/unknown.rb index 26df95c2..25e130c0 100644 --- a/app/presenters/analyze/graph/column/race_column/unknown.rb +++ b/app/presenters/analyze/graph/column/race_column/unknown.rb @@ -6,8 +6,9 @@ module Analyze module RaceColumn class Unknown < GroupedBarColumnPresenter include Analyze::Graph::Column::ScoreForRace + include Analyze::Graph::Column::RaceColumn::RaceCount def label - 'Not Listed' + "Not Listed" end def show_irrelevancy_message? diff --git a/app/presenters/analyze/graph/column/race_column/white.rb b/app/presenters/analyze/graph/column/race_column/white.rb index 143d5287..3dbf3695 100644 --- a/app/presenters/analyze/graph/column/race_column/white.rb +++ b/app/presenters/analyze/graph/column/race_column/white.rb @@ -6,8 +6,9 @@ module Analyze module RaceColumn class White < GroupedBarColumnPresenter include Analyze::Graph::Column::ScoreForRace + include Analyze::Graph::Column::RaceColumn::RaceCount def label - 'White' + "White" end def show_irrelevancy_message? diff --git a/app/services/race_score_loader.rb b/app/services/race_score_loader.rb index a6a102ad..99977608 100644 --- a/app/services/race_score_loader.rb +++ b/app/services/race_score_loader.rb @@ -60,9 +60,9 @@ class RaceScoreLoader def self.grouped_responses(school:, academic_year:, survey_items:, race:) @grouped_responses ||= Hash.new do |memo, (school, academic_year, survey_items, race)| memo[[school, academic_year, survey_items, race]] = - SurveyItemResponse.joins('JOIN student_races on survey_item_responses.student_id = student_races.student_id JOIN students on students.id = student_races.student_id').where( + SurveyItemResponse.joins("JOIN student_races on survey_item_responses.student_id = student_races.student_id JOIN students on students.id = student_races.student_id").where( school:, academic_year: - ).where("student_races.race_id": race.id).group(:survey_item_id).average(:likert_score) + ).where("student_races.race_id": race.id).group(:survey_item_id).having("count(*) >= 10").average(:likert_score) end @grouped_responses[[school, academic_year, survey_items, race]] @@ -88,7 +88,7 @@ class RaceScoreLoader def self.sufficient_responses(school:, academic_year:, race:) @sufficient_responses ||= Hash.new do |memo, (school, academic_year, race)| - number_of_students_for_a_racial_group = SurveyItemResponse.joins('JOIN student_races on survey_item_responses.student_id = student_races.student_id JOIN students on students.id = student_races.student_id').where( + number_of_students_for_a_racial_group = SurveyItemResponse.joins("JOIN student_races on survey_item_responses.student_id = student_races.student_id JOIN students on students.id = student_races.student_id").where( school:, academic_year: ).where("student_races.race_id": race.id).distinct.pluck(:student_id).count memo[[school, academic_year, race]] = number_of_students_for_a_racial_group >= 10 diff --git a/app/views/analyze/_grouped_bar_column.html.erb b/app/views/analyze/_grouped_bar_column.html.erb index cbf722fe..2f7fa614 100644 --- a/app/views/analyze/_grouped_bar_column.html.erb +++ b/app/views/analyze/_grouped_bar_column.html.erb @@ -1,12 +1,26 @@ <% score_label_y = [5, 10, 15, 5, 10, 15 ] %> <% column.bars.each_with_index do |bar, index| %> - + <% if column.sufficient_data?(index) %> + + data-bs-toggle="popover" + data-bs-placement="right" + data-bs-content="<%= column.popover_content(index) %>" + <% end %> + data-for-academic-year="<%= bar.academic_year.range %>" + x="<%= bar.x_position %>%" + y="<%= bar.y_offset %>%" + width="<%= column.bar_width %>%" + height="<%= bar.bar_height_percentage %>%" + fill="<%= bar.color %>" /> + + <% if ENV["SCORES"].present? && ENV["SCORES"].upcase == "SHOW" %> + + <%= bar.average %> + + <% end %> - <% if ENV["SCORES"].present? && ENV["SCORES"].upcase == "SHOW" %> - - <%= bar.average %> - <% end %> <% end %> diff --git a/cypress/e2e/analyze.cy.js b/cypress/e2e/analyze.cy.js new file mode 100644 index 00000000..6c2800bd --- /dev/null +++ b/cypress/e2e/analyze.cy.js @@ -0,0 +1,15 @@ +describe('navigates the analyze page', () => { + it('it displays counts of students and teacher in the hovers', () => { + + login("/districts/lee-public-schools/schools/lee-elementary-school/analyze?year=2022-23&academic_years=2022-23", "bGVlOmxlZSE=") + }) +}) + +function login(path, credentials) { + cy.visit(path, { + headers: { + authorization: `Basic ${credentials}` + }, + failOnStatusCode: false + }) +}