mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Exercise connected_to
and connects_to
methods
Since both methods are public API I think it makes sense to add these tests in order to prevent any regression in the behavior of those methods after the 6.0 release. Exercise `connected_to` - Ensure that the method raises with both `database` and `role` arguments - Ensure that the method raises without `database` and `role` Exercise `connects_to` - Ensure that the method returns an array of established connections(as mentioned in the docs of the method) Related to #34052
This commit is contained in:
parent
f9ba12bd53
commit
cf01da283e
2 changed files with 36 additions and 1 deletions
|
@ -107,7 +107,7 @@ module ActiveRecord
|
||||||
# end
|
# end
|
||||||
def connected_to(database: nil, role: nil, &blk)
|
def connected_to(database: nil, role: nil, &blk)
|
||||||
if database && role
|
if database && role
|
||||||
raise ArgumentError, "connected_to can only accept a database or role argument, but not both arguments."
|
raise ArgumentError, "connected_to can only accept a `database` or a `role` argument, but not both arguments."
|
||||||
elsif database
|
elsif database
|
||||||
if database.is_a?(Hash)
|
if database.is_a?(Hash)
|
||||||
role, database = database.first
|
role, database = database.first
|
||||||
|
|
|
@ -153,6 +153,20 @@ module ActiveRecord
|
||||||
ENV["RAILS_ENV"] = previous_env
|
ENV["RAILS_ENV"] = previous_env
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_switching_connections_with_database_and_role_raises
|
||||||
|
error = assert_raises(ArgumentError) do
|
||||||
|
ActiveRecord::Base.connected_to(database: :readonly, role: :writing) { }
|
||||||
|
end
|
||||||
|
assert_equal "connected_to can only accept a `database` or a `role` argument, but not both arguments.", error.message
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_switching_connections_without_database_and_role_raises
|
||||||
|
error = assert_raises(ArgumentError) do
|
||||||
|
ActiveRecord::Base.connected_to { }
|
||||||
|
end
|
||||||
|
assert_equal "must provide a `database` or a `role`.", error.message
|
||||||
|
end
|
||||||
|
|
||||||
def test_switching_connections_with_database_symbol
|
def test_switching_connections_with_database_symbol
|
||||||
previous_env, ENV["RAILS_ENV"] = ENV["RAILS_ENV"], "default_env"
|
previous_env, ENV["RAILS_ENV"] = ENV["RAILS_ENV"], "default_env"
|
||||||
|
|
||||||
|
@ -207,6 +221,27 @@ module ActiveRecord
|
||||||
ActiveRecord::Base.configurations = @prev_configs
|
ActiveRecord::Base.configurations = @prev_configs
|
||||||
ActiveRecord::Base.establish_connection(:arunit)
|
ActiveRecord::Base.establish_connection(:arunit)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_connects_to_returns_array_of_established_connections
|
||||||
|
config = {
|
||||||
|
"development" => { "adapter" => "sqlite3", "database" => "db/primary.sqlite3" },
|
||||||
|
"development_readonly" => { "adapter" => "sqlite3", "database" => "db/readonly.sqlite3" }
|
||||||
|
}
|
||||||
|
@prev_configs, ActiveRecord::Base.configurations = ActiveRecord::Base.configurations, config
|
||||||
|
|
||||||
|
result = ActiveRecord::Base.connects_to database: { writing: :development, reading: :development_readonly }
|
||||||
|
|
||||||
|
assert_equal(
|
||||||
|
[
|
||||||
|
ActiveRecord::Base.connection_handlers[:writing].retrieve_connection_pool("primary"),
|
||||||
|
ActiveRecord::Base.connection_handlers[:reading].retrieve_connection_pool("primary")
|
||||||
|
],
|
||||||
|
result
|
||||||
|
)
|
||||||
|
ensure
|
||||||
|
ActiveRecord::Base.configurations = @prev_configs
|
||||||
|
ActiveRecord::Base.establish_connection(:arunit)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_connection_pools
|
def test_connection_pools
|
||||||
|
|
Loading…
Reference in a new issue