Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 19 additions & 20 deletions lib/tasks/test_seeds.rake
Original file line number Diff line number Diff line change
Expand Up @@ -44,32 +44,31 @@ namespace :test_seeds do

desc 'Create a school with lessons and students'
task create: :environment do
if School.find_by(code: TEST_SCHOOL)
if School.exists?(id: TEST_SCHOOL)
puts "Test school (#{TEST_SCHOOL}) already exists, run the destroy_seed_data task to start over)."
return
end

ActiveRecord::Base.transaction do
Rails.logger.info 'Attempting to seed data...'
creator_id = ENV.fetch('SEEDING_CREATOR_ID', TEST_USERS[:jane_doe])
teacher_id = ENV.fetch('SEEDING_TEACHER_ID', TEST_USERS[:john_doe])
else
ActiveRecord::Base.transaction do
Rails.logger.info 'Attempting to seed data...'
creator_id = ENV.fetch('SEEDING_CREATOR_ID', TEST_USERS[:jane_doe])
teacher_id = ENV.fetch('SEEDING_TEACHER_ID', TEST_USERS[:john_doe])

school = create_school(creator_id, TEST_SCHOOL)
verify_school(school)
assign_a_teacher(teacher_id, school)
school = create_school(creator_id, TEST_SCHOOL)
verify_school(school)
assign_a_teacher(teacher_id, school)

# for each of the owner and teacher, create a class and assign students
[creator_id, teacher_id].each do |user_id|
teacher_name = user_id == creator_id ? 'Jane Doe' : 'John Doe'
school_class = create_school_class(user_id, school, "#{teacher_name}'s Class", "A class for #{teacher_name}'s students")
assign_students(school_class, school)
# for each of the owner and teacher, create a class and assign students
[creator_id, teacher_id].each do |user_id|
teacher_name = user_id == creator_id ? 'Jane Doe' : 'John Doe'
school_class = create_school_class(user_id, school, "#{teacher_name}'s Class", "A class for #{teacher_name}'s students")
assign_students(school_class, school)

lessons = create_lessons(user_id, school, school_class)
lessons.each do |lesson|
create_project(user_id, school, lesson, 'print("Hello World!")')
lessons = create_lessons(user_id, school, school_class)
lessons.each do |lesson|
create_project(user_id, school, lesson, 'print("Hello World!")')
end
end
Rails.logger.info 'Done...'
end
Rails.logger.info 'Done...'
end
end
end
Expand Down
14 changes: 14 additions & 0 deletions spec/lib/test_seeds_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,20 @@
expect(ClassTeacher.where(teacher_id:).length).to eq(1)
end

it 'is idempotent' do
school = School.find_by!(creator_id:)
owner_class = SchoolClass.joins(:teachers).find_by!(school_id: school.id, teachers: { teacher_id: creator_id })
teacher_class = SchoolClass.joins(:teachers).find_by!(school_id: school.id, teachers: { teacher_id: })

expect do
task.reenable
task.invoke
end.not_to change { [SchoolClass.where(school_id: school.id).count, Lesson.where(school_id: school.id).count, Project.where(school_id: school.id).count] }

expect(owner_class.reload.lessons.count).to eq(2)
expect(teacher_class.reload.lessons.count).to eq(2)
end

it 'assigns students' do
school_id = School.find_by(creator_id:).id
school_class_id = SchoolClass.find_by(school_id:).id
Expand Down
Loading