mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
9da8fef162
In #42794 we added the ability to hide some configurations for database tasks. This is useful if you want your application to connect to a database but if it's a separate service not run any tasks against it. After adding this functionality I realized that the `configs_for` argument no longer makes sense. `include_replicas` would include all of them but ones with `database_tasks: false` aren't necessarily replicas. This change deprecates `include_replicas` in favor of `include_hidden` which will display all configurations. When not passed, this will continue to return all writing connections that we want to perform tasks on.
169 lines
5.6 KiB
Ruby
169 lines
5.6 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require "cases/helper"
|
|
|
|
class DatabaseConfigurationsTest < ActiveRecord::TestCase
|
|
unless in_memory_db?
|
|
def test_empty_returns_true_when_db_configs_are_empty
|
|
old_config = ActiveRecord::Base.configurations
|
|
config = {}
|
|
|
|
ActiveRecord::Base.configurations = config
|
|
|
|
assert_predicate ActiveRecord::Base.configurations, :empty?
|
|
assert_predicate ActiveRecord::Base.configurations, :blank?
|
|
ensure
|
|
ActiveRecord::Base.configurations = old_config
|
|
ActiveRecord::Base.establish_connection :arunit
|
|
end
|
|
end
|
|
|
|
def test_configs_for_getter_with_env_name
|
|
configs = ActiveRecord::Base.configurations.configs_for(env_name: "arunit")
|
|
|
|
assert_equal 1, configs.size
|
|
assert_equal ["arunit"], configs.map(&:env_name)
|
|
end
|
|
|
|
def test_configs_for_getter_with_name
|
|
previous_env, ENV["RAILS_ENV"] = ENV["RAILS_ENV"], "arunit2"
|
|
|
|
config = ActiveRecord::Base.configurations.configs_for(name: "primary")
|
|
|
|
assert_equal "arunit2", config.env_name
|
|
assert_equal "primary", config.name
|
|
ensure
|
|
ENV["RAILS_ENV"] = previous_env
|
|
end
|
|
|
|
def test_configs_for_getter_with_env_and_name
|
|
config = ActiveRecord::Base.configurations.configs_for(env_name: "arunit", name: "primary")
|
|
|
|
assert_equal "arunit", config.env_name
|
|
assert_equal "primary", config.name
|
|
end
|
|
|
|
def test_default_hash_returns_config_hash_from_default_env
|
|
original_rails_env = ENV["RAILS_ENV"]
|
|
ENV["RAILS_ENV"] = "arunit"
|
|
|
|
assert_deprecated do
|
|
assert_equal ActiveRecord::Base.configurations.configs_for(env_name: "arunit", name: "primary").configuration_hash, ActiveRecord::Base.configurations.default_hash
|
|
end
|
|
ensure
|
|
ENV["RAILS_ENV"] = original_rails_env
|
|
end
|
|
|
|
def test_find_db_config_returns_first_config_for_env
|
|
config = ActiveRecord::DatabaseConfigurations.new({
|
|
"test" => {
|
|
"config_1" => {
|
|
"database" => "db"
|
|
},
|
|
"config_2" => {
|
|
"database" => "db"
|
|
},
|
|
"config_3" => {
|
|
"database" => "db"
|
|
},
|
|
}
|
|
})
|
|
|
|
assert_equal "config_1", config.find_db_config("test").name
|
|
end
|
|
|
|
def test_find_db_config_returns_a_db_config_object_for_the_given_env
|
|
config = ActiveRecord::Base.configurations.find_db_config("arunit2")
|
|
|
|
assert_equal "arunit2", config.env_name
|
|
assert_equal "primary", config.name
|
|
end
|
|
|
|
def test_find_db_config_prioritize_db_config_object_for_the_current_env
|
|
config = ActiveRecord::DatabaseConfigurations.new({
|
|
"primary" => {
|
|
"adapter" => "randomadapter"
|
|
},
|
|
ActiveRecord::ConnectionHandling::DEFAULT_ENV.call => {
|
|
"primary" => {
|
|
"adapter" => "sqlite3",
|
|
"database" => ":memory:"
|
|
}
|
|
}
|
|
}).find_db_config("primary")
|
|
|
|
assert_equal "primary", config.name
|
|
assert_equal ActiveRecord::ConnectionHandling::DEFAULT_ENV.call, config.env_name
|
|
assert_equal ":memory:", config.database
|
|
end
|
|
|
|
def test_to_h_turns_db_config_object_back_into_a_hash_and_is_deprecated
|
|
configs = ActiveRecord::Base.configurations
|
|
assert_equal "ActiveRecord::DatabaseConfigurations", configs.class.name
|
|
assert_deprecated do
|
|
assert_equal "Hash", configs.to_h.class.name
|
|
assert_equal ["arunit", "arunit2", "arunit_without_prepared_statements"], ActiveRecord::Base.configurations.to_h.keys.sort
|
|
end
|
|
end
|
|
end
|
|
|
|
class LegacyDatabaseConfigurationsTest < ActiveRecord::TestCase
|
|
def test_can_turn_configurations_into_a_hash_and_is_deprecated
|
|
assert_deprecated do
|
|
assert ActiveRecord::Base.configurations.to_h.is_a?(Hash), "expected to be a hash but was not."
|
|
assert_equal ["arunit", "arunit2", "arunit_without_prepared_statements"].sort, ActiveRecord::Base.configurations.to_h.keys.sort
|
|
end
|
|
end
|
|
|
|
def test_deprecated_config_method
|
|
db_config = ActiveRecord::Base.configurations.configs_for(env_name: "arunit", name: "primary")
|
|
|
|
assert_equal db_config.configuration_hash.stringify_keys, assert_deprecated { db_config.config }
|
|
end
|
|
|
|
def test_unsupported_method_raises
|
|
assert_raises NoMethodError do
|
|
ActiveRecord::Base.configurations.fetch(:foo)
|
|
end
|
|
end
|
|
|
|
def test_spec_name_in_configs_for_is_deprecated
|
|
assert_deprecated do
|
|
db_config = ActiveRecord::Base.configurations.configs_for(env_name: "arunit", spec_name: "primary")
|
|
|
|
assert_equal "primary", db_config.name
|
|
end
|
|
end
|
|
|
|
def test_spec_name_getter_is_deprecated
|
|
db_config = ActiveRecord::Base.configurations.configs_for(env_name: "arunit", name: "primary")
|
|
|
|
assert_deprecated do
|
|
assert_equal "primary", db_config.spec_name
|
|
end
|
|
end
|
|
|
|
def test_hidden_returns_replicas
|
|
config = {
|
|
"default_env" => {
|
|
"readonly" => { "adapter" => "sqlite3", "database" => "test/db/readonly.sqlite3", "replica" => true },
|
|
"hidden" => { "adapter" => "sqlite3", "database" => "test/db/hidden.sqlite3", "database_tasks" => false },
|
|
"default" => { "adapter" => "sqlite3", "database" => "test/db/primary.sqlite3" }
|
|
}
|
|
}
|
|
prev_configs, ActiveRecord::Base.configurations = ActiveRecord::Base.configurations, config
|
|
|
|
assert_equal 1, ActiveRecord::Base.configurations.configs_for(env_name: "default_env").count
|
|
assert_equal 3, ActiveRecord::Base.configurations.configs_for(env_name: "default_env", include_hidden: true).count
|
|
ensure
|
|
ActiveRecord::Base.configurations = prev_configs
|
|
end
|
|
|
|
def test_include_replicas_is_deprecated
|
|
assert_deprecated do
|
|
db_config = ActiveRecord::Base.configurations.configs_for(env_name: "arunit", name: "primary", include_replicas: true)
|
|
|
|
assert_equal "primary", db_config.name
|
|
end
|
|
end
|
|
end
|