diff --git a/app/controllers/analyze_controller.rb b/app/controllers/analyze_controller.rb index 5f979744..ba321deb 100644 --- a/app/controllers/analyze_controller.rb +++ b/app/controllers/analyze_controller.rb @@ -1,12 +1,11 @@ # frozen_string_literal: true class AnalyzeController < SqmApplicationController - def index - assign_categories - assign_subcategories - assign_measures - assign_academic_years - end + before_action :assign_categories, :assign_subcategories, :assign_measures, :assign_academic_years, + :response_rate_timestamp, only: [:index] + def index; end + + private def assign_categories @category ||= Category.find_by_category_id(params[:category]) @@ -21,16 +20,29 @@ class AnalyzeController < SqmApplicationController end def assign_measures - @measures = @subcategory.measures.order(:measure_id).includes(%i[subcategory]) + @measures = @subcategory.measures.order(:measure_id).includes(%i[admin_data_items subcategory]) end def assign_academic_years @available_academic_years = AcademicYear.order(:range).all - @academic_year_params = params[:academic_years].split(',') if params[:academic_years] + year_params = params[:academic_years] + @academic_year_params = year_params.split(',') if year_params @selected_academic_years = [] @academic_year_params ||= [] @academic_year_params.each do |year| @selected_academic_years << AcademicYear.find_by_range(year) end end + + def response_rate_timestamp + @response_rate_timestamp = begin + academic_year = @selected_academic_years.last + academic_year ||= @academic_year + rate = ResponseRate.where(school: @school, + academic_year:).order(updated_at: :DESC).first || Today.new + + rate.updated_at + end + @response_rate_timestamp + end end diff --git a/app/controllers/categories_controller.rb b/app/controllers/categories_controller.rb index bc2c5280..cbea4a46 100644 --- a/app/controllers/categories_controller.rb +++ b/app/controllers/categories_controller.rb @@ -1,10 +1,24 @@ # frozen_string_literal: true class CategoriesController < SqmApplicationController + before_action :response_rate_timestamp, only: [:index] helper GaugeHelper + def show @categories = Category.sorted.map { |category| CategoryPresenter.new(category:) } @category = CategoryPresenter.new(category: Category.find_by_slug(params[:id])) end + + private + + def response_rate_timestamp + @response_rate_timestamp = begin + rate = ResponseRate.where(school: @school, + academic_year: @academic_year).order(updated_at: :DESC).first || Today.new + + rate.updated_at + end + @response_rate_timestamp + end end diff --git a/app/controllers/overview_controller.rb b/app/controllers/overview_controller.rb index 0a185d09..ade173ae 100644 --- a/app/controllers/overview_controller.rb +++ b/app/controllers/overview_controller.rb @@ -2,6 +2,7 @@ class OverviewController < SqmApplicationController before_action :check_empty_dataset, only: [:index] + before_action :response_rate_timestamp, only: [:index] helper VarianceHelper def index @@ -31,4 +32,14 @@ class OverviewController < SqmApplicationController def subcategories @subcategories ||= Subcategory.all end + + def response_rate_timestamp + @response_rate_timestamp = begin + rate = ResponseRate.where(school: @school, + academic_year: @academic_year).order(updated_at: :DESC).first || Today.new + + rate.updated_at + end + @response_rate_timestamp + end end diff --git a/app/controllers/sqm_application_controller.rb b/app/controllers/sqm_application_controller.rb index 160756cd..17e1d030 100644 --- a/app/controllers/sqm_application_controller.rb +++ b/app/controllers/sqm_application_controller.rb @@ -3,6 +3,7 @@ class SqmApplicationController < ApplicationController protect_from_forgery with: :exception, prepend: true before_action :set_schools_and_districts + before_action :response_rate_timestamp helper HeaderHelper private diff --git a/app/helpers/analyze_helper.rb b/app/helpers/analyze_helper.rb index dada79a1..be6df60f 100644 --- a/app/helpers/analyze_helper.rb +++ b/app/helpers/analyze_helper.rb @@ -62,7 +62,8 @@ module AnalyzeHelper end def analyze_category_link(district:, school:, academic_year:, category:) - "/districts/#{district.slug}/schools/#{school.slug}/analyze?year=#{academic_year.range}&academic_years=#{academic_year.range}&category=#{category.category_id}" + year = academic_year.range + "/districts/#{district.slug}/schools/#{school.slug}/analyze?year=#{year}&academic_years=#{year}&category=#{category.category_id}" end def analyze_subcategory_link(district:, school:, academic_year:, category:, subcategory:) diff --git a/app/helpers/gauge_helper.rb b/app/helpers/gauge_helper.rb index 0244d95d..b5968850 100644 --- a/app/helpers/gauge_helper.rb +++ b/app/helpers/gauge_helper.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + Point = Struct.new(:x, :y) Rect = Struct.new(:x, :y, :width, :height) @@ -14,15 +16,29 @@ module GaugeHelper 1 end + def effective_radius + outer_radius + stroke_width + end + + def diameter + 2 * effective_radius + end + + def width + diameter + end + + def height + outer_radius + 2 * stroke_width + key_benchmark_indicator_gutter + end + def key_benchmark_indicator_gutter 10 end def viewbox - x = arc_center.x - (outer_radius + stroke_width) - y = arc_center.y - (outer_radius + stroke_width) - key_benchmark_indicator_gutter - width = 2 * (outer_radius + stroke_width) - height = outer_radius + 2 * stroke_width + key_benchmark_indicator_gutter + x = arc_center.x - effective_radius + y = arc_center.y - effective_radius - key_benchmark_indicator_gutter Rect.new(x, y, width, height) end @@ -47,8 +63,9 @@ module GaugeHelper end def arc_end_line_destination(radius:, percentage:) - x = arc_center.x + radius * Math.cos(angle_for(percentage:)) - y = arc_center.y + radius * Math.sin(angle_for(percentage:)) + angle = angle_for(percentage:) + x = arc_center.x + radius * Math.cos(angle) + y = arc_center.y + radius * Math.sin(angle) Point.new(x, y) end diff --git a/app/helpers/header_helper.rb b/app/helpers/header_helper.rb index dcf5dfc5..b0a45fcd 100644 --- a/app/helpers/header_helper.rb +++ b/app/helpers/header_helper.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module HeaderHelper def link_to_overview(district:, school:, academic_year:) "/districts/#{district.slug}/schools/#{school.slug}/overview?year=#{academic_year.range}" @@ -8,7 +10,8 @@ module HeaderHelper end def link_to_analyze(district:, school:, academic_year:) - "/districts/#{district.slug}/schools/#{school.slug}/analyze?year=#{academic_year.range}&category=1&academic_years=#{academic_year.range}" + year = academic_year.range + "/districts/#{district.slug}/schools/#{school.slug}/analyze?year=#{year}&category=1&academic_years=#{year}" end def district_url_for(district:, academic_year:) @@ -42,8 +45,10 @@ module HeaderHelper end def latest_year(school) - latest_response_rate = ResponseRate.where(school:).where('meets_student_threshold = ? or meets_teacher_threshold = ?', true, - true).joins('inner join academic_years a on response_rates.academic_year_id=a.id').order('a.range DESC').first + latest_response_rate = ResponseRate.where(school:) + .where('meets_student_threshold = ? or meets_teacher_threshold = ?', true, true) + .joins('inner join academic_years a on response_rates.academic_year_id=a.id') + .order('a.range DESC').first academic_year = latest_response_rate.academic_year if latest_response_rate.present? academic_year || AcademicYear.order('range DESC').first diff --git a/app/helpers/schedules_helper.rb b/app/helpers/schedules_helper.rb index 50b8593b..3dbbc2ed 100644 --- a/app/helpers/schedules_helper.rb +++ b/app/helpers/schedules_helper.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module SchedulesHelper def options_for_frequency_hours [ diff --git a/app/models/measure.rb b/app/models/measure.rb index e436926c..5339c578 100644 --- a/app/models/measure.rb +++ b/app/models/measure.rb @@ -51,19 +51,17 @@ class Measure < ActiveRecord::Base @includes_admin_data_items ||= admin_data_items.any? end - def sources - @sources ||= begin - sources = [] - sources << :admin_data if includes_admin_data_items? - sources << :student_surveys if includes_student_survey_items? - sources << :teacher_surveys if includes_teacher_survey_items? - sources - end - end + # def sources + # @sources ||= begin + # sources = [] + # sources << Source.new(name: :admin_data, collection: admin_data_items) if includes_admin_data_items? + # sources << Source.new(name: :student_surveys, collection: student_survey_items) if includes_student_survey_items? + # sources << Source.new(name: :teacher_surveys, collection: teacher_survey_items) if includes_teacher_survey_items? + # sources + # end + # end def score(school:, academic_year:) - # average = SurveyItemResponse.where(school:, academic_year:).first - # Score.new(average, false, false, false) @score ||= Hash.new do |memo, (school, academic_year)| next Score::NIL_SCORE if incalculable_score(school:, academic_year:) @@ -149,9 +147,9 @@ class Measure < ActiveRecord::Base def collect_survey_item_average(survey_items:, school:, academic_year:) @collect_survey_item_average ||= Hash.new do |memo, (survey_items, school, academic_year)| averages = survey_items.map do |survey_item| - grouped_responses(school:, academic_year:)[survey_item] || 0 + grouped_responses(school:, academic_year:)[survey_item] end.remove_blanks - memo[[survey_items, school, academic_year]] = averages.any? ? averages.average : 0 + memo[[survey_items, school, academic_year]] = averages.average || 0 end @collect_survey_item_average[[survey_items, school, academic_year]] end @@ -210,8 +208,7 @@ class Measure < ActiveRecord::Base def no_teacher_responses_exist?(school:, academic_year:) @no_teacher_responses_exist ||= Hash.new do |memo, (school, academic_year)| memo[[school, academic_year]] = teacher_survey_items.all? do |survey_item| - survey_item.survey_item_responses.where(school:, - academic_year:).none? + survey_item.survey_item_responses.where(school:, academic_year:).none? end end @no_teacher_responses_exist[[school, academic_year]] @@ -219,9 +216,8 @@ class Measure < ActiveRecord::Base def incalculable_score(school:, academic_year:) @incalculable_score ||= Hash.new do |memo, (school, academic_year)| - meets_student_threshold = sufficient_student_data?(school:, academic_year:) - meets_teacher_threshold = sufficient_teacher_data?(school:, academic_year:) - lacks_sufficient_survey_data = !meets_student_threshold && !meets_teacher_threshold + lacks_sufficient_survey_data = !sufficient_student_data?(school:, academic_year:) && + !sufficient_teacher_data?(school:, academic_year:) memo[[school, academic_year]] = lacks_sufficient_survey_data && !includes_admin_data_items? end @@ -247,8 +243,8 @@ class Measure < ActiveRecord::Base def student_average(school:, academic_year:) @student_average ||= Hash.new do |memo, (school, academic_year)| - memo[[school, academic_year]] = collect_survey_item_average(survey_items: student_survey_items_by_survey_type(school:, academic_year:), school:, - academic_year:) + survey_items = student_survey_items_by_survey_type(school:, academic_year:) + memo[[school, academic_year]] = collect_survey_item_average(survey_items:, school:, academic_year:) end @student_average[[school, academic_year]] end diff --git a/app/models/response_rate_calculator.rb b/app/models/response_rate_calculator.rb index 8941e9dd..3159ebdf 100644 --- a/app/models/response_rate_calculator.rb +++ b/app/models/response_rate_calculator.rb @@ -12,16 +12,13 @@ module ResponseRateCalculator end def rate - return 100 if Respondent.where(school: @school, academic_year: @academic_year).count.zero? + return 100 if population_data_unavailable? return 0 unless survey_item_count.positive? - average_responses_per_survey_item = response_count / survey_item_count.to_f - return 0 unless total_possible_responses.positive? - response_rate = (average_responses_per_survey_item / total_possible_responses.to_f * 100).round - cap_at_one_hundred(response_rate) + cap_at_one_hundred(raw_response_rate) end def meets_student_threshold? @@ -37,4 +34,20 @@ module ResponseRateCalculator def cap_at_one_hundred(response_rate) response_rate > 100 ? 100 : response_rate end + + def survey + Survey.find_by(school:, academic_year:) + end + + def raw_response_rate + (average_responses_per_survey_item / total_possible_responses.to_f * 100).round + end + + def average_responses_per_survey_item + response_count / survey_item_count.to_f + end + + def population_data_unavailable? + Respondent.where(school: @school, academic_year: @academic_year).count.zero? + end end diff --git a/app/models/student_response_rate_calculator.rb b/app/models/student_response_rate_calculator.rb index 727d4226..29625586 100644 --- a/app/models/student_response_rate_calculator.rb +++ b/app/models/student_response_rate_calculator.rb @@ -7,8 +7,6 @@ class StudentResponseRateCalculator def survey_item_count @survey_item_count ||= begin - survey = Survey.find_by(school:, academic_year:) - survey_items = SurveyItem.includes(%i[scale measure]).student_survey_items.where("scale.measure": @subcategory.measures) survey_items = survey_items.where(on_short_form: true) if survey.form == 'short' @@ -22,7 +20,6 @@ class StudentResponseRateCalculator def response_count @response_count ||= @subcategory.measures.map do |measure| measure.student_survey_items.map do |survey_item| - survey = Survey.find_by(school:, academic_year:) next 0 if survey.form == 'short' && survey_item.on_short_form == false survey_item.survey_item_responses.where(school:, diff --git a/app/models/subcategory.rb b/app/models/subcategory.rb index 2dd70c8d..ae4767db 100644 --- a/app/models/subcategory.rb +++ b/app/models/subcategory.rb @@ -18,11 +18,7 @@ class Subcategory < ActiveRecord::Base memo[[school, academic_year]] = ResponseRate.find_by(subcategory: self, school:, academic_year:) end - if @response_rate[[school, academic_year]].nil? - @response_rate[[school, academic_year]] = create_response_rate(school:, academic_year:) - end - - @response_rate[[school, academic_year]] + @response_rate[[school, academic_year]] || create_response_rate(school:, academic_year:) end private diff --git a/app/models/today.rb b/app/models/today.rb new file mode 100644 index 00000000..b078772c --- /dev/null +++ b/app/models/today.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +class Today + def updated_at + Date.today + end +end diff --git a/app/presenters/analyze_bar_presenter.rb b/app/presenters/analyze_bar_presenter.rb index 6376a1f3..12086bb2 100644 --- a/app/presenters/analyze_bar_presenter.rb +++ b/app/presenters/analyze_bar_presenter.rb @@ -29,20 +29,7 @@ class AnalyzeBarPresenter end def bar_height_percentage - bar_height = case zone.type - when :ideal - (percentage * zone_height_percentage + zone_height_percentage) * 100 - when :approval - (percentage * zone_height_percentage) * 100 - when :growth - ((1 - percentage) * zone_height_percentage) * 100 - when :watch - ((1 - percentage) * zone_height_percentage + zone_height_percentage) * 100 - when :warning - ((1 - percentage) * zone_height_percentage + zone_height_percentage + zone_height_percentage) * 100 - else - 0.0 - end + bar_height = send("#{zone.type}_bar_height_percentage") || 0 enforce_minimum_height(bar_height:) end @@ -73,4 +60,24 @@ class AnalyzeBarPresenter def enforce_minimum_height(bar_height:) bar_height < MINIMUM_BAR_HEIGHT ? MINIMUM_BAR_HEIGHT : bar_height end + + def ideal_bar_height_percentage + (percentage * zone_height_percentage + zone_height_percentage) * 100 + end + + def approval_bar_height_percentage + (percentage * zone_height_percentage) * 100 + end + + def growth_bar_height_percentage + ((1 - percentage) * zone_height_percentage) * 100 + end + + def watch_bar_height_percentage + ((1 - percentage) * zone_height_percentage + zone_height_percentage) * 100 + end + + def warning_bar_height_percentage + ((1 - percentage) * zone_height_percentage + zone_height_percentage + zone_height_percentage) * 100 + end end diff --git a/app/presenters/variance_chart_row_presenter.rb b/app/presenters/variance_chart_row_presenter.rb index e49cab90..251caa5a 100644 --- a/app/presenters/variance_chart_row_presenter.rb +++ b/app/presenters/variance_chart_row_presenter.rb @@ -72,20 +72,31 @@ class VarianceChartRowPresenter WARNING_ZONE_WIDTH_PERCENTAGE = 0.2 def bar_width_percentage - case zone.type - when :ideal - percentage * IDEAL_ZONE_WIDTH_PERCENTAGE + APPROVAL_ZONE_WIDTH_PERCENTAGE - when :approval - percentage * APPROVAL_ZONE_WIDTH_PERCENTAGE - when :growth - (1 - percentage) * GROWTH_ZONE_WIDTH_PERCENTAGE - when :watch - (1 - percentage) * WATCH_ZONE_WIDTH_PERCENTAGE + GROWTH_ZONE_WIDTH_PERCENTAGE - when :warning - (1 - percentage) * WARNING_ZONE_WIDTH_PERCENTAGE + WATCH_ZONE_WIDTH_PERCENTAGE + GROWTH_ZONE_WIDTH_PERCENTAGE - else - 0.0 - end + send("#{zone.type}_bar_width_percentage") + end + + def ideal_bar_width_percentage + percentage * IDEAL_ZONE_WIDTH_PERCENTAGE + APPROVAL_ZONE_WIDTH_PERCENTAGE + end + + def approval_bar_width_percentage + percentage * APPROVAL_ZONE_WIDTH_PERCENTAGE + end + + def growth_bar_width_percentage + (1 - percentage) * GROWTH_ZONE_WIDTH_PERCENTAGE + end + + def watch_bar_width_percentage + (1 - percentage) * WATCH_ZONE_WIDTH_PERCENTAGE + GROWTH_ZONE_WIDTH_PERCENTAGE + end + + def warning_bar_width_percentage + (1 - percentage) * WARNING_ZONE_WIDTH_PERCENTAGE + WATCH_ZONE_WIDTH_PERCENTAGE + GROWTH_ZONE_WIDTH_PERCENTAGE + end + + def insufficient_data_bar_width_percentage + 0 end def percentage diff --git a/app/services/response_rate_loader.rb b/app/services/response_rate_loader.rb index e4d7e554..657f5aea 100644 --- a/app/services/response_rate_loader.rb +++ b/app/services/response_rate_loader.rb @@ -2,28 +2,46 @@ class ResponseRateLoader def self.reset(schools: School.all, academic_years: AcademicYear.all, subcategories: Subcategory.all) - milford = School.find_by_slug 'milford-high-school' - test_year = AcademicYear.find_by_range '2020-21' - subcategories.each do |subcategory| schools.each do |school| - next if ENV['RAILS_ENV'] == 'test' && !(school == milford) + next if rails_env == 'test' && (school != milford) academic_years.each do |academic_year| - next if ENV['RAILS_ENV'] == 'test' && !(academic_year == test_year) - - student = StudentResponseRateCalculator.new(subcategory:, school:, academic_year:) - teacher = TeacherResponseRateCalculator.new(subcategory:, school:, academic_year:) + next if rails_env == 'test' && (academic_year != test_year) - response_rate = ResponseRate.find_or_create_by!(subcategory:, school:, academic_year:) - - response_rate.student_response_rate = student.rate - response_rate.teacher_response_rate = teacher.rate - response_rate.meets_student_threshold = student.meets_student_threshold? - response_rate.meets_teacher_threshold = teacher.meets_teacher_threshold? - response_rate.save + process_response_rate(subcategory:, school:, academic_year:) end end end end + + private + + def self.milford + School.find_by_slug 'milford-high-school' + end + + def self.test_year + AcademicYear.find_by_range '2020-21' + end + + def self.rails_env + @rails_env ||= ENV['RAILS_ENV'] + end + + def self.process_response_rate(subcategory:, school:, academic_year:) + student = StudentResponseRateCalculator.new(subcategory:, school:, academic_year:) + teacher = TeacherResponseRateCalculator.new(subcategory:, school:, academic_year:) + + response_rate = ResponseRate.find_or_create_by!(subcategory:, school:, academic_year:) + + response_rate.update!(student_response_rate: student.rate, teacher_response_rate: teacher.rate, + meets_student_threshold: student.meets_student_threshold?, + meets_teacher_threshold: teacher.meets_teacher_threshold?) + end + + private_class_method :milford + private_class_method :test_year + private_class_method :rails_env + private_class_method :process_response_rate end diff --git a/app/views/analyze/index.html.erb b/app/views/analyze/index.html.erb index 67e345c2..c3556033 100644 --- a/app/views/analyze/index.html.erb +++ b/app/views/analyze/index.html.erb @@ -49,7 +49,7 @@ <% end %> -<% cache [@subcategory, @school, @selected_academic_years] do %> +<% cache [@subcategory, @school, @selected_academic_years, @response_rate_timestamp] do %>
<% @measures.each do |measure|%>
diff --git a/app/views/overview/index.html.erb b/app/views/overview/index.html.erb index 6759acee..077e8a54 100644 --- a/app/views/overview/index.html.erb +++ b/app/views/overview/index.html.erb @@ -65,7 +65,7 @@ <% end %> -<% cache [@school, @academic_year, ResponseRate.where(school: @school, academic_year: @academic_year).order(updated_at: :DESC).first.updated_at] do %> +<% cache [@school, @academic_year, @response_rate_timestamp] do %>

School Quality Framework Indicators

diff --git a/config/initializers/array_monkey_patches.rb b/config/initializers/array_monkey_patches.rb index 6eeda8ef..6c6d5b81 100644 --- a/config/initializers/array_monkey_patches.rb +++ b/config/initializers/array_monkey_patches.rb @@ -1,10 +1,12 @@ +# frozen_string_literal: true + module ArrayMonkeyPatches def average sum.to_f / size end def remove_blanks - reject { |item| item == 0 || item.to_f.nan? } + reject { |item| item.nil? || item.to_f.nan? || item.zero? } end end diff --git a/spec/models/measure_spec.rb b/spec/models/measure_spec.rb index daa9f8c2..51d1cdfb 100644 --- a/spec/models/measure_spec.rb +++ b/spec/models/measure_spec.rb @@ -7,7 +7,7 @@ RSpec.describe Measure, type: :model do let(:student_scale) { create(:student_scale, measure:) } let(:admin_scale) { create(:admin_scale, measure:) } let(:school) { create(:school) } - let(:short_form_school){ create(:school)} + let(:short_form_school) { create(:school) } let(:academic_year) { create(:academic_year) } let(:admin_watch_low_benchmark) { 2.0 } @@ -29,7 +29,7 @@ RSpec.describe Measure, type: :model do create(:respondent, school:, academic_year:) create(:survey, school:, academic_year:) create(:respondent, school: short_form_school, academic_year:) - create(:survey, school: short_form_school, academic_year:, form: "short") + create(:survey, school: short_form_school, academic_year:, form: 'short') end describe 'benchmarks' do @@ -45,9 +45,9 @@ RSpec.describe Measure, type: :model do expect(measure.watch_low_benchmark).to be 2.0 end - it 'returns the source as an admin_data_item' do - expect(measure.sources).to eq [:admin_data] - end + # it 'returns the source as an admin_data_item' do + # expect(measure.sources).to eq [Source.new(name: :admin_data, collection: measure.admin_data_items)] + # end end context 'when a measure includes only student survey items' do @@ -64,9 +64,9 @@ RSpec.describe Measure, type: :model do it 'returns a warning low benchmark equal to the student survey item warning low benchmark ' do expect(measure.warning_low_benchmark).to eq 1 end - it 'returns the source as student_surveys' do - expect(measure.sources).to eq [:student_surveys] - end + # it 'returns the source as student_surveys' do + # expect(measure.sources).to eq [Source.new(name: :student_surveys, collection: measure.student_survey_items)] + # end end context 'when a measure includes only teacher survey items' do @@ -83,9 +83,9 @@ RSpec.describe Measure, type: :model do it 'returns a warning low benchmark equal to the teacher survey item warning low benchmark ' do expect(measure.warning_low_benchmark).to eq 1 end - it 'returns the source as teacher_surveys' do - expect(measure.sources).to eq [:teacher_surveys] - end + # it 'returns the source as teacher_surveys' do + # expect(measure.sources).to eq [Source.new(name: :teacher_surveys, collection: measure.teacher_survey_items)] + # end end context 'when a measure includes admin data and student survey items' do @@ -107,9 +107,10 @@ RSpec.describe Measure, type: :model do # (2*3 + 1.5)/4 expect(measure.watch_low_benchmark).to be 1.875 end - it 'returns the source as admin and student survey items' do - expect(measure.sources).to eq %i[admin_data student_surveys] - end + # it 'returns the source as admin and student survey items' do + # expect(measure.sources).to eq [Source.new(name: :admin_data, collection: measure.admin_data_items), + # Source.new(name: :student_surveys, collection: measure.student_survey_items)] + # end end context 'when a measure includes admin data and teacher survey items' do @@ -131,9 +132,10 @@ RSpec.describe Measure, type: :model do # (2*3 + 1.2)/4 expect(measure.watch_low_benchmark).to be 1.8 end - it 'returns the source as admin and teacher survey items' do - expect(measure.sources).to eq %i[admin_data teacher_surveys] - end + # it 'returns the source as admin and teacher survey items' do + # expect(measure.sources).to eq [Source.new(name: :admin_data, collection: measure.admin_data_items), + # Source.new(name: :teacher_surveys, collection: measure.teacher_survey_items)] + # end end context 'when a measure includes student and teacher survey items' do @@ -155,9 +157,10 @@ RSpec.describe Measure, type: :model do # (1.2+ 1.5)/2 expect(measure.watch_low_benchmark).to be 1.35 end - it 'returns the source as student and teacher survey items' do - expect(measure.sources).to eq %i[student_surveys teacher_surveys] - end + # it 'returns the source as student and teacher survey items' do + # expect(measure.sources).to eq [Source.new(name: :student_surveys, collection: measure.student_survey_items), + # Source.new(name: :teacher_surveys, collection: measure.teacher_survey_items)] + # end end context 'when a measure includes admin data and student and teacher survey items' do @@ -191,9 +194,11 @@ RSpec.describe Measure, type: :model do expect(measure.ideal_low_benchmark).to be_within(0.001).of 4.74 end - it 'returns the source as admin student and teacher survey items' do - expect(measure.sources).to eq %i[admin_data student_surveys teacher_surveys] - end + # it 'returns the source as admin student and teacher survey items' do + # expect(measure.sources).to eq [Source.new(name: :admin_data, collection: measure.admin_data_items), + # Source.new(name: :student_surveys, collection: measure.student_survey_items), + # Source.new(name: :teacher_surveys, collection: measure.teacher_survey_items)] + # end end end @@ -365,7 +370,7 @@ RSpec.describe Measure, type: :model do end end - context "and the school is a short form school" do + context 'and the school is a short form school' do before :each do create_list(:survey_item_response, SurveyItemResponse::STUDENT_RESPONSE_THRESHOLD, survey_item: student_survey_item_1, academic_year:, school: short_form_school, likert_score: 1) diff --git a/spec/system/journey_spec.rb b/spec/system/journey_spec.rb index afa757c9..4d509d1b 100644 --- a/spec/system/journey_spec.rb +++ b/spec/system/journey_spec.rb @@ -6,6 +6,7 @@ describe 'District Admin', js: true do let(:different_district) { District.find_by_slug 'wareham' } let(:school) { School.find_by_slug 'winchester-high-school' } let(:school_in_same_district) { School.find_by_slug 'muraco-elementary-school' } + let(:first_school_in_wareham) { School.find_by_slug 'john-william-decas-elementary-school' } let(:category) { Category.find_by_name('Teachers & Leadership') } let(:different_category) { Category.find_by_name('School Culture') } @@ -28,6 +29,16 @@ describe 'District Admin', js: true do let(:ay_2021_22) { AcademicYear.find_by_range '2021-22' } let(:ay_2019_20) { AcademicYear.find_by_range '2019-20' } + let(:response_rates) do + [ay_2021_22, ay_2019_20].each do |academic_year| + [school, school_in_same_district, first_school_in_wareham].each do |school| + [subcategory, different_subcategory].each do |subcategory| + ResponseRate.create!(subcategory:, school:, academic_year:, student_response_rate: 100, teacher_response_rate: 100, + meets_student_threshold: true, meets_teacher_threshold: true) + end + end + end + end # let(:username) { 'winchester' } # let(:password) { 'winchester!' } @@ -47,6 +58,7 @@ describe 'District Admin', js: true do Rails.application.load_seed respondents + response_rates survey_item_responses = [] survey_items_for_measure_1A_i.each do |survey_item| @@ -87,6 +99,10 @@ describe 'District Admin', js: true do SurveyItemResponse.import survey_item_responses end + after :each do + DatabaseCleaner.clean + end + it 'navigates through the site' do # page.driver.basic_authorize(username, password)