From 4f3d64dbddcdeb6deb13e7218725542d6ce7f626 Mon Sep 17 00:00:00 2001 From: Christophe Bliard Date: Tue, 1 Jul 2025 15:28:18 +0200 Subject: [PATCH] Fix broken `rake db:seed` It was failing with the error "cannot generate demo seed data without setting locale first". When seeding, there is a mechanism in place to ensure the seed data is not accessed before the language has been set. The new mechanism introduced in b0716517e47291de672 to check if all references are available in `applicable?` accesses the seed data before the language has been set for `RootSeeder`, making the `rake db:seed` task fail. The fix is to bypass the `applicable?` check for `RootSeeder` and return `true`. Also it was not detected by our test suite because `#seed_data!` was used instead of `#seed!`. This is now fixed. --- app/seeders/root_seeder.rb | 4 ++++ .../seeders/root_seeder_bim_edition_spec.rb | 14 +++++++------- .../root_seeder_standard_edition_spec.rb | 18 +++++++++--------- 3 files changed, 20 insertions(+), 16 deletions(-) diff --git a/app/seeders/root_seeder.rb b/app/seeders/root_seeder.rb index 96be505ebbc..06eedb438d4 100644 --- a/app/seeders/root_seeder.rb +++ b/app/seeders/root_seeder.rb @@ -40,6 +40,10 @@ class RootSeeder < Seeder load_available_seeders end + def applicable? + true + end + # Returns the demo data in the default language. def seed_data @seed_data ||= begin diff --git a/modules/bim/spec/seeders/root_seeder_bim_edition_spec.rb b/modules/bim/spec/seeders/root_seeder_bim_edition_spec.rb index f5ac02a1464..c0036395704 100644 --- a/modules/bim/spec/seeders/root_seeder_bim_edition_spec.rb +++ b/modules/bim/spec/seeders/root_seeder_bim_edition_spec.rb @@ -120,7 +120,7 @@ RSpec.describe RootSeeder, before_all do with_edition("bim") do - root_seeder.seed_data! + root_seeder.seed! end end @@ -132,7 +132,7 @@ RSpec.describe RootSeeder, before_all do with_locale_env("de") do with_edition("bim") do - described_class.new.seed_data! + described_class.new.seed! end end end @@ -161,7 +161,7 @@ RSpec.describe RootSeeder, Project.destroy_all # destroying all statuses will destroy all workflows by cascade Status.where.not(id: new_status.id).destroy_all - described_class.new.seed_data! + described_class.new.seed! end it "does not create additional data and does not raise any errors" do @@ -183,7 +183,7 @@ RSpec.describe RootSeeder, "tr: #{original_translation}" end - root_seeder.seed_data! + root_seeder.seed! end end @@ -223,7 +223,7 @@ RSpec.describe RootSeeder, before_all do with_locale_env("de", env_var_name: "OPENPROJECT_DEFAULT__LANGUAGE") do with_edition("bim") do - root_seeder.seed_data! + root_seeder.seed! end end end @@ -247,7 +247,7 @@ RSpec.describe RootSeeder, allow(Settings::Definition["default_projects_modules"]) .to receive(:writable?).and_return(false) - root_seeder.seed_data! + root_seeder.seed! end end end @@ -285,7 +285,7 @@ RSpec.describe RootSeeder, with_env("OPENPROJECT_SEED_ADMIN_USER_LOCKED" => "true") do with_edition("bim") do reset(:seed_admin_user_locked) - root_seeder.seed_data! + root_seeder.seed! end end ensure diff --git a/spec/seeders/root_seeder_standard_edition_spec.rb b/spec/seeders/root_seeder_standard_edition_spec.rb index 1271880fe8a..88075fe7859 100644 --- a/spec/seeders/root_seeder_standard_edition_spec.rb +++ b/spec/seeders/root_seeder_standard_edition_spec.rb @@ -161,7 +161,7 @@ RSpec.describe RootSeeder, before_all do with_edition("standard") do - root_seeder.seed_data! + root_seeder.seed! # Run background jobs as those are also triggered by seeding. # But since those background jobs retrigger themselves, don't wrap the seeding inside a block. @@ -176,7 +176,7 @@ RSpec.describe RootSeeder, context "when run a second time in a different language", :settings_reset do before_all do with_locale_env("de") do - described_class.new.seed_data! + described_class.new.seed! end end @@ -206,7 +206,7 @@ RSpec.describe RootSeeder, # Simulate a user having deleted the seeded colors. # Could also be the user changing the hexcode of the colors, making lookup by hexcode fail. Color.where(name: ["Grey", "Blue", "Black"]).delete_all - described_class.new.seed_data! + described_class.new.seed! end end @@ -226,7 +226,7 @@ RSpec.describe RootSeeder, Project.destroy_all # destroying all statuses will destroy all workflows by cascade Status.where.not(id: new_status.id).destroy_all - described_class.new.seed_data! + described_class.new.seed! end it "does not create additional data and does not raise any errors" do @@ -249,7 +249,7 @@ RSpec.describe RootSeeder, AddWorkPackageRoles.new.up with_edition("standard") do - root_seeder.seed_data! + root_seeder.seed! # Run background jobs as those are also triggered by seeding. # But since those background jobs retrigger themselves, don't wrap the seeding inside a block. @@ -270,7 +270,7 @@ RSpec.describe RootSeeder, original_translation = m.call(*args, **kw) "tr: #{original_translation}" end - root_seeder.seed_data! + root_seeder.seed! # Run background jobs as those are also triggered by seeding. # But since those background jobs retrigger themselves, don't wrap the seeding inside a block. @@ -296,7 +296,7 @@ RSpec.describe RootSeeder, before_all do with_locale_env("de", env_var_name:) do with_edition("standard") do - root_seeder.seed_data! + root_seeder.seed! # Run background jobs as those are also triggered by seeding. # But since those background jobs retrigger themselves, don't wrap the seeding inside a block. @@ -330,7 +330,7 @@ RSpec.describe RootSeeder, allow(Settings::Definition["default_projects_modules"]) .to receive(:writable?).and_return(false) - root_seeder.seed_data! + root_seeder.seed! end end @@ -363,7 +363,7 @@ RSpec.describe RootSeeder, with_env("OPENPROJECT_SEED_ADMIN_USER_LOCKED" => "true") do with_edition("standard") do reset(:seed_admin_user_locked) - root_seeder.seed_data! + root_seeder.seed! end end ensure