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
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
def teacher
return 0 unless teacher_survey_item_count.positive?
def rate(survey_item_count:, response_count:, total_possible_responses:)
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
private
def total_possible_student_responses
@total_possible_student_responses ||= total_possible_responses do |responses|
responses.total_students
@ -48,12 +53,12 @@ class ResponseRate
def student_response_count
@student_response_count ||= SurveyItemResponse.student_responses_for_measures(@subcategory.measures, @school,
@academic_year).count.to_f
@academic_year).count.to_f
end
def teacher_response_count
@teacher_response_count ||= SurveyItemResponse.teacher_responses_for_measures(@subcategory.measures, @school,
@academic_year).count.to_f
@academic_year).count.to_f
end
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)
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
expect(ResponseRate.new(subcategory: subcategory, school: school,
academic_year: ay).teacher).to eq 100
end
end
context 'when the average number of teacher responses is 77.9, the response rate averages up to 78 percent' do
before do
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
it 'returns 10 percent' do
expect(ResponseRate.new(subcategory: subcategory, school: school,
academic_year: ay).teacher).to eq 78
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

Loading…
Cancel
Save