Cap teacher response rate at 100 percent

pull/1/head
rebuilt 4 years ago
parent 2655a36bfc
commit 3ae0d02462

@ -6,27 +6,32 @@ class ResponseRate
end end
def student def student
return 0 unless student_survey_item_count.positive? rate(survey_item_count: student_survey_item_count, response_count: student_response_count,
total_possible_responses: total_possible_student_responses)
end
average_responses_per_survey_item = student_response_count / student_survey_item_count def teacher
response_rate = rate(survey_item_count: teacher_survey_item_count, response_count: teacher_response_count,
total_possible_responses: total_possible_teacher_responses)
cap_at_100(response_rate)
end
return 0 unless total_possible_student_responses.positive? private
(average_responses_per_survey_item / total_possible_student_responses * 100).round def cap_at_100(response_rate)
response_rate > 100 ? 100 : response_rate
end end
def teacher def rate(survey_item_count:, response_count:, total_possible_responses:)
return 0 unless teacher_survey_item_count.positive? return 0 unless survey_item_count.positive?
average_responses_per_survey_item = teacher_response_count / teacher_survey_item_count average_responses_per_survey_item = response_count / survey_item_count
return 0 unless total_possible_teacher_responses.positive? return 0 unless total_possible_responses.positive?
(average_responses_per_survey_item / total_possible_teacher_responses * 100).round (average_responses_per_survey_item / total_possible_responses * 100).round
end end
private
def total_possible_student_responses def total_possible_student_responses
@total_possible_student_responses ||= total_possible_responses do |responses| @total_possible_student_responses ||= total_possible_responses do |responses|
responses.total_students responses.total_students
@ -48,12 +53,12 @@ class ResponseRate
def student_response_count def student_response_count
@student_response_count ||= SurveyItemResponse.student_responses_for_measures(@subcategory.measures, @school, @student_response_count ||= SurveyItemResponse.student_responses_for_measures(@subcategory.measures, @school,
@academic_year).count.to_f @academic_year).count.to_f
end end
def teacher_response_count def teacher_response_count
@teacher_response_count ||= SurveyItemResponse.teacher_responses_for_measures(@subcategory.measures, @school, @teacher_response_count ||= SurveyItemResponse.teacher_responses_for_measures(@subcategory.measures, @school,
@academic_year).count.to_f @academic_year).count.to_f
end end
def student_survey_item_count def student_survey_item_count

@ -67,21 +67,33 @@ describe ResponseRate, type: :model do
survey_item: insufficient_student_survey_item, academic_year: ay, school: school, likert_score: 1) survey_item: insufficient_student_survey_item, academic_year: ay, school: school, likert_score: 1)
end end
context 'when the average number of teacher responses per question in a subcategory is equal to the teacher response threshold' do context 'when the average number of teacher responses per question in a subcategory is equal to the total possible responses' do
it 'returns 100 percent' do it 'returns 100 percent' do
expect(ResponseRate.new(subcategory: subcategory, school: school, expect(ResponseRate.new(subcategory: subcategory, school: school,
academic_year: ay).teacher).to eq 100 academic_year: ay).teacher).to eq 100
end end
end end
context 'when the average number of teacher responses is 77.9, the response rate averages up to 78 percent' do context 'when the average number of teacher responses is 77.9, the response rate averages up to 78 percent' do
before do before do
create_list(:survey_item_response, 2, survey_item: sufficient_teacher_survey_item_3, create_list(:survey_item_response, 2, survey_item: sufficient_teacher_survey_item_3,
academic_year: ay, school: school, likert_score: 1) academic_year: ay, school: school, likert_score: 1)
end end
it 'returns 10 percent' do it 'returns 10 percent' do
expect(ResponseRate.new(subcategory: subcategory, school: school, expect(ResponseRate.new(subcategory: subcategory, school: school,
academic_year: ay).teacher).to eq 78 academic_year: ay).teacher).to eq 78
end end
end end
context 'when the average number of teacher responses is greater than the total possible responses' do
before do
create_list(:survey_item_response, SurveyItemResponse::TEACHER_RESPONSE_THRESHOLD + 1, survey_item: sufficient_teacher_survey_item_3,
academic_year: ay, school: school, likert_score: 1)
end
it 'returns 100 percent' do
expect(ResponseRate.new(subcategory: subcategory, school: school,
academic_year: ay).teacher).to eq 100
end
end
end end
end end

Loading…
Cancel
Save