From c6ee265574b0db7e98f2982e01a1701e288f5ea5 Mon Sep 17 00:00:00 2001 From: abcampo-iry <261805581+abcampo-iry@users.noreply.github.com> Date: Fri, 13 Mar 2026 14:34:50 +0100 Subject: [PATCH 1/2] Enduring seeding test - After seeing the flakiness, I've endured a bit the test to ensure is idempotent and we can run without flakyness --- lib/tasks/test_seeds.rake | 39 ++++++++++++++++++------------------- spec/lib/test_seeds_spec.rb | 14 +++++++++++++ 2 files changed, 33 insertions(+), 20 deletions(-) diff --git a/lib/tasks/test_seeds.rake b/lib/tasks/test_seeds.rake index 1ea9cac9b..104b598cb 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 683ade159..43a992369 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 From 4734a7449b2520783e03d4fa0ba8ae43efbe9ee5 Mon Sep 17 00:00:00 2001 From: abcampo-iry <261805581+abcampo-iry@users.noreply.github.com> Date: Fri, 13 Mar 2026 14:44:40 +0100 Subject: [PATCH 2/2] comment from copilot to raise error faster --- spec/lib/test_seeds_spec.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/spec/lib/test_seeds_spec.rb b/spec/lib/test_seeds_spec.rb index 43a992369..a71a5d170 100644 --- a/spec/lib/test_seeds_spec.rb +++ b/spec/lib/test_seeds_spec.rb @@ -85,9 +85,9 @@ 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: }) + 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