From 315b398a5af7a799c28c3fd4622e84ee6f0cc709 Mon Sep 17 00:00:00 2001 From: rebuilt Date: Tue, 15 Aug 2023 16:13:47 -0700 Subject: [PATCH] fix: Overall response rate was incorrectly using the updated_at date instead of the recorded date. Also, it was just using the last date for all academic years instead of the last date the survey was taken per academic year. --- app/presenters/response_rate_presenter.rb | 11 +++++-- .../response_rate_presenter_spec.rb | 32 +++++++++++++------ 2 files changed, 30 insertions(+), 13 deletions(-) diff --git a/app/presenters/response_rate_presenter.rb b/app/presenters/response_rate_presenter.rb index 99e9fd55..bcb44a53 100644 --- a/app/presenters/response_rate_presenter.rb +++ b/app/presenters/response_rate_presenter.rb @@ -5,12 +5,17 @@ class ResponseRatePresenter @focus = focus @academic_year = academic_year @school = school - @survey_items = SurveyItem.student_survey_items if focus == :student + if focus == :student + @survey_items = Measure.all.flat_map do |measure| + measure.student_survey_items_with_sufficient_responses(school:, academic_year:) + end + end @survey_items = SurveyItem.teacher_survey_items if focus == :teacher end def date - SurveyItemResponse.where(survey_item: survey_items, school:).order(updated_at: :DESC).first&.updated_at || Date.new + SurveyItemResponse.where(survey_item: survey_items, school:, + academic_year:).order(recorded_date: :DESC).first&.recorded_date || Date.today end def percentage @@ -24,7 +29,7 @@ class ResponseRatePresenter end def hover_message - "Percentages based on #{ actual_count } out of #{ respondents_count.round } #{ focus }s completing at least 25% of the survey." + "Percentages based on #{actual_count} out of #{respondents_count.round} #{focus}s completing at least 25% of the survey." end private diff --git a/spec/presenters/response_rate_presenter_spec.rb b/spec/presenters/response_rate_presenter_spec.rb index 525fa794..ebe3b0d6 100644 --- a/spec/presenters/response_rate_presenter_spec.rb +++ b/spec/presenters/response_rate_presenter_spec.rb @@ -11,28 +11,39 @@ describe ResponseRatePresenter do total_teachers: 40) end + let(:today) { Date.today } + let(:yesterday) { Date.today - 1 } + let(:two_days_ago) { Date.today - 2 } + let(:three_days_ago) { Date.today - 3 } let(:student_survey_item) { create(:student_survey_item) } let(:teacher_survey_item) { create(:teacher_survey_item) } let(:oldest_student_survey_response) do - create(:survey_item_response, school:, academic_year:, survey_item: student_survey_item) + create(:survey_item_response, school:, academic_year:, survey_item: student_survey_item, + recorded_date: three_days_ago) end let(:newest_student_survey_response) do - create(:survey_item_response, school:, academic_year:, survey_item: student_survey_item) + create(:survey_item_response, school:, academic_year:, survey_item: student_survey_item, recorded_date: yesterday) end let(:oldest_teacher_survey_response) do - create(:survey_item_response, school:, academic_year:, survey_item: teacher_survey_item) + create(:survey_item_response, school:, academic_year:, survey_item: teacher_survey_item, + recorded_date: three_days_ago) end let(:newest_teacher_survey_response) do - create(:survey_item_response, school:, academic_year:, survey_item: teacher_survey_item) + create(:survey_item_response, school:, academic_year:, survey_item: teacher_survey_item, recorded_date: yesterday) end let(:wrong_student_survey_response) do create(:survey_item_response, school: wrong_school, academic_year: wrong_academic_year, - survey_item: student_survey_item) + survey_item: student_survey_item, recorded_date: two_days_ago) end let(:wrong_teacher_survey_response) do create(:survey_item_response, school: wrong_school, academic_year: wrong_academic_year, - survey_item: teacher_survey_item) + survey_item: teacher_survey_item, recorded_date: two_days_ago) + end + + let(:filler_survey_item_responses_to_meet_sufficiency) do + create_list(:survey_item_response, 10, school:, academic_year:, + survey_item: student_survey_item, recorded_date: two_days_ago) end context ".date" do @@ -42,11 +53,12 @@ describe ResponseRatePresenter do newest_student_survey_response wrong_student_survey_response wrong_teacher_survey_response + filler_survey_item_responses_to_meet_sufficiency end it "ignores all teacher items and only gets the modified date of the last student item" do - percentage = ResponseRatePresenter.new(focus: :student, academic_year:, school:).date - expect(percentage).to eq(newest_student_survey_response.updated_at) + date = ResponseRatePresenter.new(focus: :student, academic_year:, school:).date + expect(date).to eq(newest_student_survey_response.recorded_date) end end context "when focus is teacher" do @@ -58,8 +70,8 @@ describe ResponseRatePresenter do end it "ignores all student responses and only gets the modified date of the last teacher item" do - percentage = ResponseRatePresenter.new(focus: :teacher, academic_year:, school:).date - expect(percentage).to eq(newest_teacher_survey_response.updated_at) + date = ResponseRatePresenter.new(focus: :teacher, academic_year:, school:).date + expect(date).to eq(newest_teacher_survey_response.recorded_date) end end end