diff --git a/lib/tasks/test_seeds.rake b/lib/tasks/test_seeds.rake index 1ea9cac9..104b598c 100644 --- a/lib/tasks/test_seeds.rake +++ b/lib/tasks/test_seeds.rake @@ -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 diff --git a/spec/lib/test_seeds_spec.rb b/spec/lib/test_seeds_spec.rb index 683ade15..a71a5d17 100644 --- a/spec/lib/test_seeds_spec.rb +++ b/spec/lib/test_seeds_spec.rb @@ -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