# frozen_string_literal: true require "cases/helper" require "active_record/test_databases" class TestDatabasesTest < ActiveRecord::TestCase unless in_memory_db? def test_databases_are_created previous_env, ENV["RAILS_ENV"] = ENV["RAILS_ENV"], "arunit" prev_configs, ActiveRecord::Base.configurations = ActiveRecord::Base.configurations, { "arunit" => { "primary" => { "adapter" => "sqlite3", "database" => "db/primary.sqlite3" } } } base_db_config = ActiveRecord::Base.configurations.configs_for(env_name: "arunit", spec_name: "primary") expected_database = "#{base_db_config.database}-2" ActiveRecord::Tasks::DatabaseTasks.stub(:reconstruct_from_schema, ->(db_config, _, _) { assert_equal expected_database, db_config.database }) do ActiveRecord::TestDatabases.create_and_load_schema(2, env_name: "arunit") end ensure ActiveRecord::Base.configurations = prev_configs ActiveRecord::Base.establish_connection(:arunit) ENV["RAILS_ENV"] = previous_env end def test_create_databases_after_fork previous_env, ENV["RAILS_ENV"] = ENV["RAILS_ENV"], "arunit" prev_configs, ActiveRecord::Base.configurations = ActiveRecord::Base.configurations, { "arunit" => { "primary" => { "adapter" => "sqlite3", "database" => "db/primary.sqlite3" } } } idx = 42 base_db_config = ActiveRecord::Base.configurations.configs_for(env_name: "arunit", spec_name: "primary") expected_database = "#{base_db_config.database}-#{idx}" ActiveRecord::Tasks::DatabaseTasks.stub(:reconstruct_from_schema, ->(db_config, _, _) { assert_equal expected_database, db_config.database }) do ActiveSupport::Testing::Parallelization.after_fork_hooks.each { |cb| cb.call(idx) } end # Updates the databse configuration assert_equal expected_database, ActiveRecord::Base.configurations.configs_for(env_name: "arunit", spec_name: "primary").database ensure ActiveRecord::Base.configurations = prev_configs ActiveRecord::Base.establish_connection(:arunit) ENV["RAILS_ENV"] = previous_env end end end