mirror of
https://github.com/edcommonwealth/sqm-dashboards.git
synced 2026-03-09 15:38:21 -07:00
Add Overall Response Rate
This commit is contained in:
parent
435bc4a5be
commit
a71ebbc4e4
19 changed files with 585 additions and 244 deletions
160
spec/presenters/response_rate_presenter_spec.rb
Normal file
160
spec/presenters/response_rate_presenter_spec.rb
Normal file
|
|
@ -0,0 +1,160 @@
|
|||
require 'rails_helper'
|
||||
|
||||
describe ResponseRatePresenter do
|
||||
let(:academic_year) { create(:academic_year, range: '2022-23') }
|
||||
let(:school) { create(:school, name: 'A school') }
|
||||
let(:respondents) { create(:respondent, school:, academic_year:, total_students: 40, total_teachers: 40) }
|
||||
let(:wrong_school) { create(:school, name: 'Wrong school') }
|
||||
let(:wrong_academic_year) { create(:academic_year) }
|
||||
let(:wrong_respondents) do
|
||||
create(:respondent, school: wrong_school, academic_year: wrong_academic_year, total_students: 40,
|
||||
total_teachers: 40)
|
||||
end
|
||||
|
||||
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)
|
||||
end
|
||||
let(:newest_student_survey_response) do
|
||||
create(:survey_item_response, school:, academic_year:, survey_item: student_survey_item)
|
||||
end
|
||||
let(:oldest_teacher_survey_response) do
|
||||
create(:survey_item_response, school:, academic_year:, survey_item: teacher_survey_item)
|
||||
end
|
||||
let(:newest_teacher_survey_response) do
|
||||
create(:survey_item_response, school:, academic_year:, survey_item: teacher_survey_item)
|
||||
end
|
||||
|
||||
let(:wrong_student_survey_response) do
|
||||
create(:survey_item_response, school: wrong_school, academic_year: wrong_academic_year,
|
||||
survey_item: student_survey_item)
|
||||
end
|
||||
let(:wrong_teacher_survey_response) do
|
||||
create(:survey_item_response, school: wrong_school, academic_year: wrong_academic_year,
|
||||
survey_item: teacher_survey_item)
|
||||
end
|
||||
|
||||
context '.date' do
|
||||
context 'when focus is student' do
|
||||
before :each do
|
||||
oldest_student_survey_response
|
||||
newest_student_survey_response
|
||||
wrong_student_survey_response
|
||||
wrong_teacher_survey_response
|
||||
end
|
||||
|
||||
it 'ignores all teacher items and only gets the modified date of the last student item' do
|
||||
rdate = ResponseRatePresenter.new(focus: :student, academic_year:, school:).date
|
||||
expect(rdate).to eq(newest_student_survey_response.updated_at)
|
||||
end
|
||||
end
|
||||
context 'when focus is teacher' do
|
||||
before :each do
|
||||
oldest_teacher_survey_response
|
||||
newest_teacher_survey_response
|
||||
wrong_student_survey_response
|
||||
wrong_teacher_survey_response
|
||||
end
|
||||
|
||||
it 'ignores all student responses and only gets the modified date of the last teacher item' do
|
||||
rdate = ResponseRatePresenter.new(focus: :teacher, academic_year:, school:).date
|
||||
expect(rdate).to eq(newest_teacher_survey_response.updated_at)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context '.percentage' do
|
||||
before :each do
|
||||
respondents
|
||||
wrong_respondents
|
||||
end
|
||||
context 'when no survey responses are found for a school' do
|
||||
it 'returns a response rate of 0' do
|
||||
rdate = ResponseRatePresenter.new(focus: :teacher, academic_year:, school:).percentage
|
||||
expect(rdate).to eq(0)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when there all possible teacher respondents answered questions' do
|
||||
before :each do
|
||||
create_list(:survey_item_response, 40, school:, academic_year:,
|
||||
survey_item: teacher_survey_item)
|
||||
end
|
||||
|
||||
it 'returns a response rate of 100' do
|
||||
rdate = ResponseRatePresenter.new(focus: :teacher, academic_year:, school:).percentage
|
||||
expect(rdate).to eq(100)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when more teachers responded than staff the school' do
|
||||
before :each do
|
||||
create_list(:survey_item_response, 80, school:, academic_year:,
|
||||
survey_item: teacher_survey_item)
|
||||
end
|
||||
|
||||
it 'returns a response rate of 100' do
|
||||
rdate = ResponseRatePresenter.new(focus: :teacher, academic_year:, school:).percentage
|
||||
expect(rdate).to eq(100)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when three quarters of the teachers responded to the survey' do
|
||||
before :each do
|
||||
create_list(:survey_item_response, 30, school:, academic_year:,
|
||||
survey_item: teacher_survey_item)
|
||||
end
|
||||
|
||||
it 'returns a response rate of 75' do
|
||||
rdate = ResponseRatePresenter.new(focus: :teacher, academic_year:, school:).percentage
|
||||
expect(rdate).to eq(75)
|
||||
end
|
||||
end
|
||||
context 'when one quarter of the teachers responded to the survey' do
|
||||
before :each do
|
||||
create_list(:survey_item_response, 10, school:, academic_year:,
|
||||
survey_item: teacher_survey_item)
|
||||
end
|
||||
|
||||
it 'returns a response rate of 25' do
|
||||
rdate = ResponseRatePresenter.new(focus: :teacher, academic_year:, school:).percentage
|
||||
expect(rdate).to eq(25)
|
||||
end
|
||||
end
|
||||
context 'When the percentage is not a round number' do
|
||||
before :each do
|
||||
create_list(:survey_item_response, 9, school:, academic_year:,
|
||||
survey_item: teacher_survey_item)
|
||||
end
|
||||
|
||||
it 'its rounded to the nearest integer' do
|
||||
rdate = ResponseRatePresenter.new(focus: :teacher, academic_year:, school:).percentage
|
||||
expect(rdate).to eq(23)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when there all possible student respondents answered questions' do
|
||||
before :each do
|
||||
create_list(:survey_item_response, 40, school:, academic_year:,
|
||||
survey_item: student_survey_item)
|
||||
end
|
||||
|
||||
it 'returns a response rate of 100' do
|
||||
rdate = ResponseRatePresenter.new(focus: :student, academic_year:, school:).percentage
|
||||
expect(rdate).to eq(100)
|
||||
end
|
||||
end
|
||||
context 'when half of all students responded' do
|
||||
before :each do
|
||||
create_list(:survey_item_response, 20, school:, academic_year:,
|
||||
survey_item: student_survey_item)
|
||||
end
|
||||
|
||||
it 'returns a response rate of 50' do
|
||||
rdate = ResponseRatePresenter.new(focus: :student, academic_year:, school:).percentage
|
||||
expect(rdate).to eq(50)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue