From 3dafd9fc4535e62296d8470219c0de84ec1ea037 Mon Sep 17 00:00:00 2001 From: Chris Zetter <253059100+zetter-rpf@users.noreply.github.com> Date: Thu, 3 Sep 2026 14:52:42 +0100 Subject: [PATCH 1/3] Don't assign all students to all classes This makes it harder to test join codes, as we want to have a student that isn't in a class. Only assign students to the teachers class, not the creators class. --- lib/tasks/test_seeds.rake | 3 +-- spec/lib/test_seeds_spec.rb | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/lib/tasks/test_seeds.rake b/lib/tasks/test_seeds.rake index e667caee5..6bd80f23e 100644 --- a/lib/tasks/test_seeds.rake +++ b/lib/tasks/test_seeds.rake @@ -76,8 +76,7 @@ namespace :test_seeds do [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) - + assign_students(school_class, school) if user_id == teacher_id create_lessons(user_id, school, school_class) end Rails.logger.info 'Done...' diff --git a/spec/lib/test_seeds_spec.rb b/spec/lib/test_seeds_spec.rb index 7f9f84594..e5228a642 100644 --- a/spec/lib/test_seeds_spec.rb +++ b/spec/lib/test_seeds_spec.rb @@ -223,8 +223,7 @@ end it 'assigns students' do - school_id = School.find_by(creator_id:).id - school_class_id = SchoolClass.find_by(school_id:).id + school_class_id = SchoolClass.joins(:teachers).find_by!(school_id:, teachers: { teacher_id: }).id expect(Role.student.where(user_id: student_1, school_id:)).to exist expect(ClassStudent.where(student_id: student_1, school_class_id:)).to exist expect(Role.student.where(user_id: student_2, school_id:)).to exist From 309331d14781f66bfac28549012acff0422817bd Mon Sep 17 00:00:00 2001 From: Chris Zetter <253059100+zetter-rpf@users.noreply.github.com> Date: Thu, 3 Sep 2026 14:56:13 +0100 Subject: [PATCH 2/3] Assign known join codes to classes This will make it easier to test join codes in the e2e tests --- lib/tasks/seeds_helper.rb | 3 ++- lib/tasks/test_seeds.rake | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/tasks/seeds_helper.rb b/lib/tasks/seeds_helper.rb index c13ec74b0..cfcbdfcfe 100644 --- a/lib/tasks/seeds_helper.rb +++ b/lib/tasks/seeds_helper.rb @@ -64,7 +64,7 @@ def verify_school(school) # rubocop:enable Rails/SkipsModelValidations end - def create_school_class(teacher_id, school, name = Faker::Educator.course_name, description = Faker::Hacker.phrases.sample) + def create_school_class(teacher_id, school, name = Faker::Educator.course_name, description = Faker::Hacker.phrases.sample, join_code = nil) SchoolClass.joins(:teachers) .where(teachers: { teacher_id: }, school:) .first_or_create! do |school_class| @@ -73,6 +73,7 @@ def create_school_class(teacher_id, school, name = Faker::Educator.course_name, school_class.description = description school_class.school = school school_class.teachers = [ClassTeacher.new(teacher_id:)] + school_class.join_code = join_code end end diff --git a/lib/tasks/test_seeds.rake b/lib/tasks/test_seeds.rake index 6bd80f23e..a5709e0ef 100644 --- a/lib/tasks/test_seeds.rake +++ b/lib/tasks/test_seeds.rake @@ -73,9 +73,10 @@ namespace :test_seeds do assign_a_teacher(teacher_unassigned_id, school) # for each of the owner and teacher, create a class and assign students - [creator_id, teacher_id].each do |user_id| + [creator_id, teacher_id].each_with_index do |user_id, index| 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") + code = "C000-C#{index.to_s.rjust(3, '0')}" + school_class = create_school_class(user_id, school, "#{teacher_name}'s Class", "A class for #{teacher_name}'s students", code) assign_students(school_class, school) if user_id == teacher_id create_lessons(user_id, school, school_class) end From b9cfe84c7278c71f4e550707a31113b40e9bed31 Mon Sep 17 00:00:00 2001 From: Chris Zetter <253059100+zetter-rpf@users.noreply.github.com> Date: Fri, 4 Sep 2026 11:20:14 +0100 Subject: [PATCH 3/3] Refactor seeds It was hard to see at a glance the data the classes were being set up with. Extract the data to keep it separate from the control flow. --- lib/tasks/test_seeds.rake | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/lib/tasks/test_seeds.rake b/lib/tasks/test_seeds.rake index a5709e0ef..230be4925 100644 --- a/lib/tasks/test_seeds.rake +++ b/lib/tasks/test_seeds.rake @@ -2,6 +2,8 @@ require_relative 'seeds_helper' +SchoolClassData = Data.define(:owner, :name, :description, :code, :assign_students) + namespace :test_seeds do include SeedsHelper @@ -48,6 +50,25 @@ namespace :test_seeds do end end + def school_class_data + [ + SchoolClassData.new( + owner: ENV.fetch('SEEDING_CREATOR_ID', TEST_USERS[:jane_doe]), + name: "Jane Doe's Class", + description: "A class for Jane Doe's students", + code: 'C000-C000', + assign_students: false + ), + SchoolClassData.new( + owner: ENV.fetch('SEEDING_CREATOR_ID', TEST_USERS[:john_doe]), + name: "John Doe's Class", + description: "A class for John Doe's students", + code: 'C000-C001', + assign_students: true + ) + ] + end + desc 'Create a school with lessons and students' task create: :environment do if School.exists?(id: TEST_SCHOOL) @@ -72,13 +93,10 @@ namespace :test_seeds do assign_a_teacher(teacher_id, school) assign_a_teacher(teacher_unassigned_id, school) - # for each of the owner and teacher, create a class and assign students - [creator_id, teacher_id].each_with_index do |user_id, index| - teacher_name = user_id == creator_id ? 'Jane Doe' : 'John Doe' - code = "C000-C#{index.to_s.rjust(3, '0')}" - school_class = create_school_class(user_id, school, "#{teacher_name}'s Class", "A class for #{teacher_name}'s students", code) - assign_students(school_class, school) if user_id == teacher_id - create_lessons(user_id, school, school_class) + school_class_data.each do |school_class| + created_school_class = create_school_class(school_class.owner, school, school_class.name, school_class.description, school_class.code) + assign_students(created_school_class, school) if school_class.assign_students + create_lessons(school_class.owner, school, created_school_class) end Rails.logger.info 'Done...' end