From 48e601c7a106fcefe83d445f4d77499e3f8321af Mon Sep 17 00:00:00 2001 From: Sean Doyle Date: Sun, 24 Jan 2021 12:48:26 -0500 Subject: [PATCH] Move ActiveStorage fixture hooks to on_load In a test environment, rely on the loading of `:active_support_test_case`. Introduce the `:active_record_fixture_set` hook for the Active Storage engine to listen for during the load process in a development environment (like when running `db:fixtures:load`). Since this commit moves the task-aware path resolution out of the block that provided local variables, it recreates part of the fixture directory path resolution logic. --- activerecord/lib/active_record/fixtures.rb | 2 ++ .../lib/active_record/railties/databases.rake | 4 ---- activestorage/lib/active_storage/engine.rb | 14 ++++++++++++++ railties/lib/rails/test_help.rb | 4 ---- 4 files changed, 16 insertions(+), 8 deletions(-) diff --git a/activerecord/lib/active_record/fixtures.rb b/activerecord/lib/active_record/fixtures.rb index bba8584683ca3..bcbda0e188fac 100644 --- a/activerecord/lib/active_record/fixtures.rb +++ b/activerecord/lib/active_record/fixtures.rb @@ -782,3 +782,5 @@ def find end end end + +ActiveSupport.run_load_hooks :active_record_fixture_set, ActiveRecord::FixtureSet diff --git a/activerecord/lib/active_record/railties/databases.rake b/activerecord/lib/active_record/railties/databases.rake index 5620fe887e3b5..65c2570d59121 100644 --- a/activerecord/lib/active_record/railties/databases.rake +++ b/activerecord/lib/active_record/railties/databases.rake @@ -388,10 +388,6 @@ db_namespace = namespace :db do Dir["#{fixtures_dir}/**/*.yml"].map { |f| f[(fixtures_dir.size + 1)..-5] } end - if defined? ActiveStorage::FixtureSet - ActiveStorage::FixtureSet.file_fixture_path = File.join fixtures_dir, "files" - end - ActiveRecord::FixtureSet.create_fixtures(fixtures_dir, fixture_files) end diff --git a/activestorage/lib/active_storage/engine.rb b/activestorage/lib/active_storage/engine.rb index e2413c4538e6e..f3fd536300806 100644 --- a/activestorage/lib/active_storage/engine.rb +++ b/activestorage/lib/active_storage/engine.rb @@ -143,5 +143,19 @@ class Engine < Rails::Engine # :nodoc: ActiveRecord::Reflection.singleton_class.prepend(Reflection::ReflectionExtension) end end + + initializer "active_storage.fixture_set" do + ActiveSupport.on_load(:active_record_fixture_set) do + ActiveStorage::FixtureSet.file_fixture_path ||= Rails.root.join(*[ + ENV.fetch("FIXTURES_PATH") { File.join("test", "fixtures") }, + ENV["FIXTURES_DIR"], + "files" + ].compact_blank) + end + + ActiveSupport.on_load(:active_support_test_case) do + ActiveStorage::FixtureSet.file_fixture_path = ActiveSupport::TestCase.file_fixture_path + end + end end end diff --git a/railties/lib/rails/test_help.rb b/railties/lib/rails/test_help.rb index 98a68b7c1a0d7..4e3ec184bec27 100644 --- a/railties/lib/rails/test_help.rb +++ b/railties/lib/rails/test_help.rb @@ -31,10 +31,6 @@ ActiveSupport.on_load(:action_dispatch_integration_test) do self.fixture_path = ActiveSupport::TestCase.fixture_path end - - ActiveSupport.on_load(:active_storage_record) do - ActiveStorage::FixtureSet.file_fixture_path = ActiveSupport::TestCase.file_fixture_path - end end # :enddoc: