Remove surveys table from codebase since it's no longer needed after changing logic surrounding response rates and score calculations
parent
001d3083c8
commit
09963c3323
@ -0,0 +1,11 @@
|
|||||||
|
class DropSurveysTable < ActiveRecord::Migration[7.0]
|
||||||
|
def change
|
||||||
|
drop_table :surveys do |t|
|
||||||
|
t.integer :form
|
||||||
|
t.references :academic_year, null: false, foreign_key: true
|
||||||
|
t.references :school, null: false, foreign_key: true
|
||||||
|
|
||||||
|
t.timestamps
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,76 +0,0 @@
|
|||||||
require 'rails_helper'
|
|
||||||
|
|
||||||
RSpec.describe Report::Pillar, type: :model do
|
|
||||||
let(:school) { create(:school, name: 'Abraham Lincoln Elementary School') }
|
|
||||||
let(:subcategory) { create(:subcategory, subcategory_id: '1A') }
|
|
||||||
let(:measure_1) { create(:measure, measure_id: '1A-iii', subcategory:) }
|
|
||||||
let(:measure_2) { create(:measure, measure_id: '1B-ii', subcategory:) }
|
|
||||||
let(:scale_1) { create(:scale, measure: measure_1) }
|
|
||||||
let(:scale_2) { create(:scale, measure: measure_2) }
|
|
||||||
let(:survey_item_1) { create(:student_survey_item, scale: scale_1) }
|
|
||||||
let(:survey_item_2) do
|
|
||||||
create(:student_survey_item, scale: scale_2, ideal_low_benchmark: 5)
|
|
||||||
end
|
|
||||||
let(:measures) do
|
|
||||||
subcategory.measures
|
|
||||||
end
|
|
||||||
let(:academic_year_1) { create(:academic_year, range: '2017-2018') }
|
|
||||||
let(:academic_year_2) { create(:academic_year, range: '2018-2019') }
|
|
||||||
let(:academic_years) { [academic_year_1, academic_year_2] }
|
|
||||||
|
|
||||||
before :each do
|
|
||||||
create(:respondent, school:, academic_year: academic_year_1)
|
|
||||||
create(:survey, school:, academic_year: academic_year_1)
|
|
||||||
measures
|
|
||||||
end
|
|
||||||
|
|
||||||
context '.pillar' do
|
|
||||||
it 'returns the GPS pillar' do
|
|
||||||
pillar = Report::Pillar.new(school:, measures:, indicator: 'Teaching Environment',
|
|
||||||
period: 'Current', academic_year: academic_year_1)
|
|
||||||
expect(pillar.pillar).to eq('Operational Efficiency')
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context '.school' do
|
|
||||||
it 'returns the name of the school' do
|
|
||||||
pillar = Report::Pillar.new(school:, measures:, indicator: 'The Teaching Environment', period: 'Current',
|
|
||||||
academic_year: academic_year_1)
|
|
||||||
expect(pillar.school_name).to eq('Abraham Lincoln Elementary School')
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context '.score' do
|
|
||||||
before do
|
|
||||||
create_list(:survey_item_response, SurveyItemResponse::STUDENT_RESPONSE_THRESHOLD, survey_item: survey_item_1, school:, academic_year: academic_year_1,
|
|
||||||
likert_score: 3)
|
|
||||||
create_list(:survey_item_response, SurveyItemResponse::STUDENT_RESPONSE_THRESHOLD, survey_item: survey_item_1, school:, academic_year: academic_year_1,
|
|
||||||
likert_score: 5)
|
|
||||||
end
|
|
||||||
it 'returns the average score for all the measures in the pillar' do
|
|
||||||
pillar = Report::Pillar.new(school:, measures:, indicator: 'The Teaching Environment', period: 'Current',
|
|
||||||
academic_year: academic_year_1)
|
|
||||||
expect(pillar.score).to eq 4
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context '.zone' do
|
|
||||||
before do
|
|
||||||
create_list(:survey_item_response, SurveyItemResponse::STUDENT_RESPONSE_THRESHOLD, survey_item: survey_item_1, school:, academic_year: academic_year_1,
|
|
||||||
likert_score: 4)
|
|
||||||
create_list(:survey_item_response, SurveyItemResponse::STUDENT_RESPONSE_THRESHOLD, survey_item: survey_item_1, school:, academic_year: academic_year_1,
|
|
||||||
likert_score: 5)
|
|
||||||
create_list(:survey_item_response, SurveyItemResponse::STUDENT_RESPONSE_THRESHOLD, survey_item: survey_item_2, school:, academic_year: academic_year_1,
|
|
||||||
likert_score: 4)
|
|
||||||
create_list(:survey_item_response, SurveyItemResponse::STUDENT_RESPONSE_THRESHOLD, survey_item: survey_item_2, school:, academic_year: academic_year_1,
|
|
||||||
likert_score: 5)
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'returns the zone for the average score for all the measures in the pillar' do
|
|
||||||
pillar = Report::Pillar.new(school:, measures:, indicator: 'The Teaching Environment', period: 'Current',
|
|
||||||
academic_year: academic_year_1)
|
|
||||||
expect(pillar.score).to eq 4.5
|
|
||||||
expect(pillar.zone).to eq 'Approval'
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@ -1,140 +0,0 @@
|
|||||||
require 'rails_helper'
|
|
||||||
|
|
||||||
describe ResponseRateLoader do
|
|
||||||
let(:school) { School.find_by_slug 'milford-high-school' }
|
|
||||||
let(:academic_year) { AcademicYear.find_by_range '2020-21' }
|
|
||||||
let(:respondents) do
|
|
||||||
respondents = Respondent.where(school:, academic_year:).first
|
|
||||||
respondents.total_students = 10
|
|
||||||
respondents.total_teachers = 10
|
|
||||||
respondents.save
|
|
||||||
end
|
|
||||||
|
|
||||||
let(:short_form_survey) do
|
|
||||||
survey = Survey.find_by(school:, academic_year:)
|
|
||||||
survey.form = :short
|
|
||||||
survey.save
|
|
||||||
survey
|
|
||||||
end
|
|
||||||
|
|
||||||
let(:subcategory) { Subcategory.find_by_subcategory_id '5D' }
|
|
||||||
|
|
||||||
let(:s_acst_q1) { SurveyItem.find_by_survey_item_id 's-acst-q1' }
|
|
||||||
let(:s_acst_q2) { SurveyItem.find_by_survey_item_id 's-acst-q2' } # short form
|
|
||||||
let(:s_acst_q3) { SurveyItem.find_by_survey_item_id 's-acst-q3' }
|
|
||||||
let(:s_poaf_q1) { SurveyItem.find_by_survey_item_id 's-poaf-q1' }
|
|
||||||
let(:s_poaf_q2) { SurveyItem.find_by_survey_item_id 's-poaf-q2' }
|
|
||||||
let(:s_poaf_q3) { SurveyItem.find_by_survey_item_id 's-poaf-q3' } # short form
|
|
||||||
let(:s_poaf_q4) { SurveyItem.find_by_survey_item_id 's-poaf-q4' }
|
|
||||||
let(:t_phya_q2) { SurveyItem.find_by_survey_item_id 't-phya-q2' }
|
|
||||||
let(:t_phya_q3) { SurveyItem.find_by_survey_item_id 't-phya-q3' }
|
|
||||||
|
|
||||||
let(:s_acst) { Scale.find_by_scale_id 's-acst' }
|
|
||||||
let(:s_poaf) { Scale.find_by_scale_id 's-poaf' }
|
|
||||||
let(:t_phya) { Scale.find_by_scale_id 't-phya' }
|
|
||||||
|
|
||||||
let(:response_rate) { ResponseRate.find_by(subcategory:, school:, academic_year:) }
|
|
||||||
|
|
||||||
before :each do
|
|
||||||
Rails.application.load_seed
|
|
||||||
respondents
|
|
||||||
end
|
|
||||||
|
|
||||||
after :each do
|
|
||||||
DatabaseCleaner.clean
|
|
||||||
end
|
|
||||||
|
|
||||||
describe 'self.reset' do
|
|
||||||
context 'When resetting response rates' do
|
|
||||||
context 'and half the students responded to each question' do
|
|
||||||
before :each do
|
|
||||||
create_list(:survey_item_response, 5, survey_item: s_acst_q1, likert_score: 3, school:, academic_year:)
|
|
||||||
create_list(:survey_item_response, 5, survey_item: s_acst_q2, likert_score: 3, school:, academic_year:)
|
|
||||||
create_list(:survey_item_response, 5, survey_item: s_acst_q3, likert_score: 3, school:, academic_year:)
|
|
||||||
create_list(:survey_item_response, 5, survey_item: s_poaf_q1, likert_score: 3, school:, academic_year:)
|
|
||||||
create_list(:survey_item_response, 5, survey_item: s_poaf_q2, likert_score: 3, school:, academic_year:)
|
|
||||||
create_list(:survey_item_response, 5, survey_item: s_poaf_q3, likert_score: 3, school:, academic_year:)
|
|
||||||
create_list(:survey_item_response, 5, survey_item: s_poaf_q4, likert_score: 3, school:, academic_year:)
|
|
||||||
create_list(:survey_item_response, 5, survey_item: t_phya_q2, likert_score: 3, school:, academic_year:)
|
|
||||||
create_list(:survey_item_response, 5, survey_item: t_phya_q3, likert_score: 3, school:, academic_year:)
|
|
||||||
|
|
||||||
ResponseRateLoader.reset(schools: [school], academic_years: [academic_year])
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'populates the database with response rates' do
|
|
||||||
expect(s_acst_q1.survey_item_id).to eq 's-acst-q1'
|
|
||||||
expect(subcategory.subcategory_id).to eq '5D'
|
|
||||||
expect(subcategory.name).to eq 'Health'
|
|
||||||
expect(s_acst.score(school:, academic_year:)).to eq 3
|
|
||||||
expect(s_poaf.score(school:, academic_year:)).to eq 3
|
|
||||||
expect(t_phya.score(school:, academic_year:)).to eq 3
|
|
||||||
expect(response_rate.student_response_rate).to eq 50
|
|
||||||
expect(response_rate.teacher_response_rate).to eq 50
|
|
||||||
expect(response_rate.meets_student_threshold).to be true
|
|
||||||
expect(response_rate.meets_teacher_threshold).to be true
|
|
||||||
end
|
|
||||||
context 'when running the loader a second time' do
|
|
||||||
it 'is idempotent' do
|
|
||||||
response_count = ResponseRate.count
|
|
||||||
ResponseRateLoader.reset(schools: [school], academic_years: [academic_year])
|
|
||||||
second_count = ResponseRate.count
|
|
||||||
|
|
||||||
expect(response_count).to eq second_count
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'and only the first question for each scale was asked; e.g. like on a short form' do
|
|
||||||
before :each do
|
|
||||||
create_list(:survey_item_response, 5, survey_item: s_acst_q1, likert_score: 3, school:, academic_year:)
|
|
||||||
create_list(:survey_item_response, 5, survey_item: s_poaf_q1, likert_score: 3, school:, academic_year:)
|
|
||||||
create_list(:survey_item_response, 5, survey_item: t_phya_q2, likert_score: 3, school:, academic_year:)
|
|
||||||
|
|
||||||
ResponseRateLoader.reset(schools: [school], academic_years: [academic_year])
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'only takes into account the first question and ignores the other questions in the scale' do
|
|
||||||
expect(response_rate.student_response_rate).to eq 50
|
|
||||||
expect(response_rate.teacher_response_rate).to eq 50
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'and no respondent entry exists for the school and year' do
|
|
||||||
before do
|
|
||||||
Respondent.destroy_all
|
|
||||||
create_list(:survey_item_response, 5, survey_item: s_acst_q1, likert_score: 3, school:, academic_year:)
|
|
||||||
create_list(:survey_item_response, 5, survey_item: s_poaf_q1, likert_score: 3, school:, academic_year:)
|
|
||||||
create_list(:survey_item_response, 5, survey_item: t_phya_q2, likert_score: 3, school:, academic_year:)
|
|
||||||
|
|
||||||
ResponseRateLoader.reset(schools: [school], academic_years: [academic_year])
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'since no score can be calculated, it returns a default of 100' do
|
|
||||||
expect(response_rate.student_response_rate).to eq 100
|
|
||||||
expect(response_rate.teacher_response_rate).to eq 100
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'and the school took the short form student survey' do
|
|
||||||
before :each do
|
|
||||||
create_list(:survey_item_response, 1, survey_item: s_acst_q1, likert_score: 3, school:, academic_year:)
|
|
||||||
create_list(:survey_item_response, 6, survey_item: s_acst_q2, likert_score: 3, school:, academic_year:) # short form
|
|
||||||
create_list(:survey_item_response, 1, survey_item: s_acst_q3, likert_score: 3, school:, academic_year:)
|
|
||||||
create_list(:survey_item_response, 1, survey_item: s_poaf_q1, likert_score: 3, school:, academic_year:)
|
|
||||||
create_list(:survey_item_response, 1, survey_item: s_poaf_q2, likert_score: 3, school:, academic_year:)
|
|
||||||
create_list(:survey_item_response, 6, survey_item: s_poaf_q3, likert_score: 3, school:, academic_year:) # short form
|
|
||||||
create_list(:survey_item_response, 1, survey_item: s_poaf_q4, likert_score: 3, school:, academic_year:)
|
|
||||||
create_list(:survey_item_response, 1, survey_item: t_phya_q2, likert_score: 3, school:, academic_year:)
|
|
||||||
create_list(:survey_item_response, 1, survey_item: t_phya_q3, likert_score: 3, school:, academic_year:)
|
|
||||||
short_form_survey
|
|
||||||
|
|
||||||
ResponseRateLoader.reset(schools: [school], academic_years: [academic_year])
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'only counts responses from survey items on the short form' do
|
|
||||||
expect(response_rate.student_response_rate).to eq 60
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
Loading…
Reference in new issue