Scrape enrollment and staffing information. Seed enrollment and staffing information. Update DatabaseCleaner so it cleans up leftover information in the database. Remove old admin csvs from codebase.

This commit is contained in:
rebuilt 2023-03-05 16:15:35 -08:00
parent 20d4f966e7
commit 06f9d2f0e9
27 changed files with 48177 additions and 4843 deletions

File diff suppressed because it is too large Load diff

11067
spec/fixtures/sample_staffing_data.csv vendored Normal file

File diff suppressed because it is too large Load diff

View file

@ -27,7 +27,21 @@ Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }
# If you are not using ActiveRecord, you can remove this line.
ActiveRecord::Migration.maintain_test_schema!
require 'database_cleaner/active_record'
RSpec.configure do |config|
config.before(:suite) do
DatabaseCleaner.strategy = :transaction
DatabaseCleaner.clean_with(:truncation)
end
config.before(:each) do
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
end
# Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
config.fixture_path = "#{::Rails.root}/spec/fixtures"
@ -55,4 +69,22 @@ RSpec.configure do |config|
config.filter_rails_from_backtrace!
# arbitrary gems may also be filtered via:
# config.filter_gems_from_backtrace("gem name")
# config.before(:each) do
# DatabaseCleaner.strategy = :deletion
# end
# config.append_after(:each) do
# DatabaseCleaner.clean
# end
config.before(:suite) do
DatabaseCleaner.strategy = :transaction
DatabaseCleaner.clean_with(:truncation)
end
config.before(:each) do
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
end
end

View file

@ -1,26 +1,26 @@
require 'rails_helper'
describe EnrollmentLoader do
let(:path_to_admin_data) { Rails.root.join('spec', 'fixtures', 'sample_enrollment_data.csv') }
let(:ay_2022_23) { AcademicYear.find_by_range '2022-23' }
let(:attleboro) { School.find_by_dese_id 160_505 }
let(:winchester) { School.find_by_dese_id 3_440_505 }
let(:beachmont) { School.find_by_dese_id 2_480_013 }
let(:path_to_enrollment_data) { Rails.root.join('spec', 'fixtures', 'sample_enrollment_data.csv') }
let(:ay_2022_23) { create(:academic_year, range: '2022-23') }
let(:attleboro) { School.find_or_create_by(name: 'Attleboro', dese_id: 160_505) }
let(:beachmont) { School.find_or_create_by(name: 'Beachmont', dese_id: 2_480_013) }
let(:winchester) { School.find_or_create_by(name: 'Winchester', dese_id: 3_440_505) }
before :each do
Rails.application.load_seed
ay_2022_23
attleboro
beachmont
winchester
EnrollmentLoader.load_data filepath: path_to_enrollment_data
end
after :each do
DatabaseCleaner.clean
end
describe 'self.load_data' do
before :each do
EnrollmentLoader.load_data filepath: path_to_admin_data
end
context 'self.load_data' do
it 'loads the correct enrollment numbers' do
respondents = Respondent.where(school: attleboro, academic_year: ay_2022_23)
academic_year = ay_2022_23
expect(Respondent.find_by(school: attleboro, academic_year:).nine).to eq 506
@ -34,22 +34,4 @@ describe EnrollmentLoader do
expect(Respondent.find_by(school: winchester, academic_year:).twelve).to eq 352
end
end
# describe 'output to console' do
# it 'outputs a messsage saying a value has been rejected' do
# output = capture_stdout { EnrollmentLoader.load_data filepath: path_to_admin_data }.gsub("\n", '')
# expect(output).to eq 'Invalid score: 0.0 for school: Attleboro High School admin data item a-reso-i1 Invalid score: 100.0 for school: Winchester High School admin data item a-sust-i3 '
# end
# end
end
# def capture_stdout
# original_stdout = $stdout
# $stdout = fake = StringIO.new
# begin
# yield
# ensure
# $stdout = original_stdout
# end
# fake.string
# end

View file

@ -4,7 +4,7 @@ describe ResponseRateLoader do
let(:school) { School.find_by_slug 'milford-high-school' }
let(:academic_year) { AcademicYear.find_by_range '2020-21' }
let(:respondent) do
respondent = create(:respondent, school:, academic_year:)
respondent = Respondent.find_or_initialize_by(school:, academic_year:)
respondent.total_students = 10
respondent.total_teachers = 10
respondent.save
@ -35,19 +35,19 @@ describe ResponseRateLoader do
let(:response_rate) { ResponseRate.find_by(subcategory:, school:, academic_year:) }
before :each do
before do
Rails.application.load_seed
respondent
end
after :each do
after 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
before 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:)
@ -85,7 +85,7 @@ describe ResponseRateLoader do
end
context 'and only the first question for each scale was asked; e.g. like on a short form' do
before :each do
before 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:)
@ -116,7 +116,7 @@ describe ResponseRateLoader do
end
context 'and the school took the short form student survey' do
before :each do
before 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:)

View file

@ -0,0 +1,50 @@
require 'rails_helper'
describe StaffingLoader do
let(:path_to_staffing_data) { Rails.root.join('spec', 'fixtures', 'sample_staffing_data.csv') }
let(:ay_2022_23) { create(:academic_year, range: '2022-23') }
let(:ay_2021_22) { create(:academic_year, range: '2021-22') }
let(:attleboro) { School.find_or_create_by(name: 'Attleboro', dese_id: 160_505) }
let(:beachmont) { School.find_or_create_by(name: 'Beachmont', dese_id: 2_480_013) }
let(:winchester) { School.find_or_create_by(name: 'Winchester', dese_id: 3_440_505) }
before :each do
School.destroy_all
ay_2022_23
ay_2021_22
attleboro
beachmont
winchester
StaffingLoader.load_data filepath: path_to_staffing_data
StaffingLoader.clone_previous_year_data
end
after :each do
DatabaseCleaner.clean
end
context 'self.load_data' do
it 'loads the correct staffing numbers' do
academic_year = ay_2021_22
expect(Respondent.find_by(school: attleboro, academic_year:).total_teachers).to eq 197.5
expect(Respondent.find_by(school: beachmont, academic_year:).total_teachers).to eq 56.4
expect(Respondent.find_by(school: winchester, academic_year:).total_teachers).to eq 149.8
end
context 'when the staffing data is missing a school' do
after :each do
DatabaseCleaner.clean
end
it 'fills in empty staffing numbers with the previous years data' do
academic_year = ay_2022_23
expect(Respondent.find_by(school: attleboro, academic_year:).total_teachers).to eq 197.5
expect(Respondent.find_by(school: beachmont, academic_year:).total_teachers).to eq 56.4
expect(Respondent.find_by(school: winchester, academic_year:).total_teachers).to eq 149.8
end
end
end
end

View file

@ -27,6 +27,10 @@ describe SurveyResponsesDataLoader do
Rails.application.load_seed
end
after :each do
DatabaseCleaner.clean
end
describe 'self.load_data' do
context 'loading teacher survey responses' do
before :each do

View file

@ -43,18 +43,18 @@ describe 'District Admin', js: true do
# let(:username) { 'winchester' }
# let(:password) { 'winchester!' }
let(:respondents) do
respondent = create(:respondent, school:, academic_year: ay_2021_22)
respondent = Respondent.find_or_initialize_by(school:, academic_year: ay_2021_22)
respondent.total_students = 8
respondent.total_teachers = 8
respondent.save
respondent = create(:respondent, school:, academic_year: ay_2019_20)
respondent = Respondent.find_or_initialize_by(school:, academic_year: ay_2019_20)
respondent.total_students = 8
respondent.total_teachers = 8
respondent.save
end
before :each do
before do
Rails.application.load_seed
respondents
@ -99,7 +99,7 @@ describe 'District Admin', js: true do
SurveyItemResponse.import survey_item_responses
end
after :each do
after do
DatabaseCleaner.clean
end