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