From da2e27e863ccbccc115988adad9c81ec2d9bbed5 Mon Sep 17 00:00:00 2001 From: rebuilt Date: Tue, 5 Jul 2022 13:16:07 -0700 Subject: [PATCH] Add test for case where student response rate does not meet threshold --- spec/models/response_rate_calculator_spec.rb | 45 ++++++++++++++++---- 1 file changed, 36 insertions(+), 9 deletions(-) diff --git a/spec/models/response_rate_calculator_spec.rb b/spec/models/response_rate_calculator_spec.rb index ed7cc1bd..6c2a9cf8 100644 --- a/spec/models/response_rate_calculator_spec.rb +++ b/spec/models/response_rate_calculator_spec.rb @@ -18,18 +18,15 @@ describe ResponseRateCalculator, type: :model do let(:insufficient_student_survey_item_1) { create(:student_survey_item, scale: sufficient_scale_1) } let(:sufficient_student_survey_item_2) { create(:student_survey_item, scale: sufficient_scale_2) } - before :each do - create_list(:survey_item_response, SurveyItemResponse::TEACHER_RESPONSE_THRESHOLD, survey_item: sufficient_teacher_survey_item, - academic_year:, school:, likert_score: 1) - create_list(:survey_item_response, SurveyItemResponse::STUDENT_RESPONSE_THRESHOLD, survey_item: sufficient_student_survey_item_1, - academic_year:, school:, likert_score: 4) - create_list(:survey_item_response, SurveyItemResponse::STUDENT_RESPONSE_THRESHOLD, survey_item: sufficient_student_survey_item_2, - academic_year:, school:, likert_score: 4) - end - context 'when a students take a regular survey' do context 'when the average number of student responses per question in a subcategory is equal to the student response threshold' do before :each do + create_list(:survey_item_response, SurveyItemResponse::TEACHER_RESPONSE_THRESHOLD, survey_item: sufficient_teacher_survey_item, + academic_year:, school:, likert_score: 1) + create_list(:survey_item_response, SurveyItemResponse::STUDENT_RESPONSE_THRESHOLD, survey_item: sufficient_student_survey_item_1, + academic_year:, school:, likert_score: 4) + create_list(:survey_item_response, SurveyItemResponse::STUDENT_RESPONSE_THRESHOLD, survey_item: sufficient_student_survey_item_2, + academic_year:, school:, likert_score: 4) respondent survey end @@ -39,10 +36,34 @@ describe ResponseRateCalculator, type: :model do academic_year:).rate).to eq 25 end end + + context 'when the average number of student responses per question is below the student threshold' do + before :each do + create_list(:survey_item_response, 1, survey_item: sufficient_student_survey_item_1, + academic_year:, school:, likert_score: 4) + create_list(:survey_item_response, 1, survey_item: sufficient_student_survey_item_2, + academic_year:, school:, likert_score: 4) + respondent + survey + end + + it 'reports insufficient student responses' do + expect(StudentResponseRateCalculator.new(subcategory:, school:, + academic_year:).rate).to eq 13 + expect(StudentResponseRateCalculator.new(subcategory:, school:, + academic_year:).meets_student_threshold?).to eq false + end + end end context 'when students take the short form survey' do before :each do + create_list(:survey_item_response, SurveyItemResponse::TEACHER_RESPONSE_THRESHOLD, survey_item: sufficient_teacher_survey_item, + academic_year:, school:, likert_score: 1) + create_list(:survey_item_response, SurveyItemResponse::STUDENT_RESPONSE_THRESHOLD, survey_item: sufficient_student_survey_item_1, + academic_year:, school:, likert_score: 4) + create_list(:survey_item_response, SurveyItemResponse::STUDENT_RESPONSE_THRESHOLD, survey_item: sufficient_student_survey_item_2, + academic_year:, school:, likert_score: 4) respondent short_form_survey end @@ -93,6 +114,12 @@ describe ResponseRateCalculator, type: :model do context 'when there is an imbalance in the response rate of the student items' do context 'and one of the student items has no associated survey item responses' do before do + create_list(:survey_item_response, SurveyItemResponse::TEACHER_RESPONSE_THRESHOLD, survey_item: sufficient_teacher_survey_item, + academic_year:, school:, likert_score: 1) + create_list(:survey_item_response, SurveyItemResponse::STUDENT_RESPONSE_THRESHOLD, survey_item: sufficient_student_survey_item_1, + academic_year:, school:, likert_score: 4) + create_list(:survey_item_response, SurveyItemResponse::STUDENT_RESPONSE_THRESHOLD, survey_item: sufficient_student_survey_item_2, + academic_year:, school:, likert_score: 4) create(:respondent, school:, academic_year:) create(:survey, school:, academic_year:) insufficient_student_survey_item_1