Load student respondent information from enrollment loader

pull/1/head
rebuilt 3 years ago
parent 79f7915edf
commit ae6d7151b3

@ -64,38 +64,6 @@ class Seeder
end
end
def seed_respondents(csv_file)
schools = []
CSV.parse(File.read(csv_file), headers: true) do |row|
dese_id = row['DESE School ID'].strip.to_i
district_name = row['District'].strip
next if rules.any? do |rule|
rule.new(row:).skip_row?
end
district = District.find_or_create_by! name: district_name
school = School.find_by(dese_id:, district:)
schools << school
academic_years = AcademicYear.all
academic_years.each do |academic_year|
total_students = row["Total Students for Response Rate (#{academic_year.range})"]
total_teachers = row["Total Teachers for Response Rate (#{academic_year.range})"]
total_students = remove_commas(total_students)
total_teachers = remove_commas(total_teachers)
respondent = Respondent.find_or_initialize_by(school:, academic_year:)
respondent.total_students = total_students
respondent.total_teachers = total_teachers
respondent.academic_year = academic_year
respondent.save
end
end
Respondent.where.not(school: schools).destroy_all
end
def seed_sqm_framework(csv_file)
admin_data_item_ids = []
CSV.parse(File.read(csv_file), headers: true) do |row|

@ -4,13 +4,18 @@ require 'csv'
class EnrollmentLoader
def self.load_data(filepath:)
schools = []
CSV.parse(File.read(filepath), headers: true) do |row|
row = EnrollmentRowValues.new(row:)
next unless row.school.present? && row.academic_year.present?
schools << row.school
create_enrollment_entry(row:)
end
# Respondent.where.not(school: schools).destroy_all
end
private

@ -5,7 +5,7 @@ seeder = Seeder.new
seeder.seed_academic_years '2016-17', '2017-18', '2018-19', '2019-20', '2020-21', '2021-22', '2022-23'
seeder.seed_districts_and_schools Rails.root.join('data', 'master_list_of_schools_and_districts.csv')
seeder.seed_surveys Rails.root.join('data', 'master_list_of_schools_and_districts.csv')
seeder.seed_respondents Rails.root.join('data', 'master_list_of_schools_and_districts.csv')
# seeder.seed_respondents Rails.root.join('data', 'master_list_of_schools_and_districts.csv')
seeder.seed_sqm_framework Rails.root.join('data', 'sqm_framework.csv')
seeder.seed_demographics Rails.root.join('data', 'demographics.csv')

@ -27,7 +27,6 @@ namespace :data do
seeder.seed_academic_years '2016-17', '2017-18', '2018-19', '2019-20', '2020-21', '2021-22', '2022-23'
seeder.seed_districts_and_schools Rails.root.join('data', 'master_list_of_schools_and_districts.csv')
seeder.seed_surveys Rails.root.join('data', 'master_list_of_schools_and_districts.csv')
seeder.seed_respondents Rails.root.join('data', 'master_list_of_schools_and_districts.csv')
seeder.seed_sqm_framework Rails.root.join('data', 'sqm_framework.csv')
seeder.seed_demographics Rails.root.join('data', 'demographics.csv')

@ -5,8 +5,12 @@ describe Seeder do
let(:seeder) { Seeder.new }
let(:lowell_seeder) { Seeder.new rules: [Rule::SeedOnlyLowell] }
after :each do
DatabaseCleaner.clean
end
context 'academic years' do
before { AcademicYear.delete_all }
# before { AcademicYear.delete_all }
it 'seeds new academic years' do
expect do
@ -53,7 +57,6 @@ describe Seeder do
create(:school, name: 'John Oldest Academy', dese_id: 12_345, district: existing_district)
end
let!(:removed_survey_item_response) { create(:survey_item_response, school: removed_school) }
let!(:removed_respondent) { create(:respondent, school: removed_school) }
let!(:removed_survey) { create(:survey, school: removed_school) }
let!(:existing_school) do
create(:school, name: 'Sam Adams Elementary School', dese_id: 350_302, slug: 'some-slug-for-sam-adams',
@ -96,7 +99,6 @@ describe Seeder do
expect(School.where(id: removed_school)).not_to exist
expect(SurveyItemResponse.where(id: removed_survey_item_response)).not_to exist
expect(Respondent.where(id: removed_respondent)).not_to exist
expect(Survey.where(id: removed_survey)).not_to exist
end
end
@ -113,48 +115,48 @@ describe Seeder do
end
end
context 'respondents' do
before :each do
create(:academic_year, range: '2020-21')
seeder.seed_districts_and_schools sample_districts_and_schools_csv
end
it 'seeds the total number of respondents for a school' do
expect do
seeder.seed_respondents sample_districts_and_schools_csv
end.to change { Respondent.count }.by(School.count)
end
it 'seeds idempotently' do
expect do
seeder.seed_respondents sample_districts_and_schools_csv
end.to change { Respondent.count }.by(School.count)
expect(Respondent.all.count).to eq School.count
expect do
seeder.seed_respondents sample_districts_and_schools_csv
end.to change { Respondent.count }.by(0)
end
it 'seeds new respondents for every year in the database' do
expect do
seeder.seed_respondents sample_districts_and_schools_csv
end.to change { Respondent.count }.by School.count
expect do
create(:academic_year, range: '2019-20')
seeder.seed_respondents sample_districts_and_schools_csv
end.to change { Respondent.count }.by School.count
end
it 'seeds the total number of students and teachers even if the original number includes commas' do
seeder.seed_respondents sample_districts_and_schools_csv
school = School.find_by_name('Attleboro High School')
academic_year = AcademicYear.find_by_range('2020-21')
school_with_over_one_thousand_student_respondents = Respondent.where(school:, academic_year:).first
expect(school_with_over_one_thousand_student_respondents.total_students).to eq 1792
end
end
# context 'respondents' do
# before :each do
# create(:academic_year, range: '2020-21')
# seeder.seed_districts_and_schools sample_districts_and_schools_csv
# end
# it 'seeds the total number of respondents for a school' do
# expect do
# seeder.seed_respondents sample_districts_and_schools_csv
# end.to change { Respondent.count }.by(School.count)
# end
# it 'seeds idempotently' do
# expect do
# seeder.seed_respondents sample_districts_and_schools_csv
# end.to change { Respondent.count }.by(School.count)
# expect(Respondent.all.count).to eq School.count
# expect do
# seeder.seed_respondents sample_districts_and_schools_csv
# end.to change { Respondent.count }.by(0)
# end
# it 'seeds new respondents for every year in the database' do
# expect do
# seeder.seed_respondents sample_districts_and_schools_csv
# end.to change { Respondent.count }.by School.count
# expect do
# create(:academic_year, range: '2019-20')
# seeder.seed_respondents sample_districts_and_schools_csv
# end.to change { Respondent.count }.by School.count
# end
# it 'seeds the total number of students and teachers even if the original number includes commas' do
# seeder.seed_respondents sample_districts_and_schools_csv
# school = School.find_by_name('Attleboro High School')
# academic_year = AcademicYear.find_by_range('2020-21')
# school_with_over_one_thousand_student_respondents = Respondent.where(school:, academic_year:).first
# expect(school_with_over_one_thousand_student_respondents.total_students).to eq 1792
# end
# end
context 'surveys' do
before :each do

Loading…
Cancel
Save