aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/test
diff options
context:
space:
mode:
Diffstat (limited to 'activerecord/test')
-rw-r--r--activerecord/test/cases/adapter_test.rb28
-rw-r--r--activerecord/test/cases/autosave_association_test.rb15
-rw-r--r--activerecord/test/cases/base_test.rb8
-rw-r--r--activerecord/test/cases/tasks/database_tasks_test.rb213
-rw-r--r--activerecord/test/cases/tasks/legacy_database_tasks_test.rb591
-rw-r--r--activerecord/test/models/company.rb8
-rw-r--r--activerecord/test/models/contract.rb4
-rw-r--r--activerecord/test/schema/mysql2_specific_schema.rb7
-rw-r--r--activerecord/test/schema/sqlite_specific_schema.rb11
9 files changed, 197 insertions, 688 deletions
diff --git a/activerecord/test/cases/adapter_test.rb b/activerecord/test/cases/adapter_test.rb
index 67734d24d7..1c461a0459 100644
--- a/activerecord/test/cases/adapter_test.rb
+++ b/activerecord/test/cases/adapter_test.rb
@@ -300,6 +300,34 @@ module ActiveRecord
def test_supports_multi_insert_is_deprecated
assert_deprecated { @connection.supports_multi_insert? }
end
+
+ def test_column_name_length_is_deprecated
+ assert_deprecated { @connection.column_name_length }
+ end
+
+ def test_table_name_length_is_deprecated
+ assert_deprecated { @connection.table_name_length }
+ end
+
+ def test_columns_per_table_is_deprecated
+ assert_deprecated { @connection.columns_per_table }
+ end
+
+ def test_indexes_per_table_is_deprecated
+ assert_deprecated { @connection.indexes_per_table }
+ end
+
+ def test_columns_per_multicolumn_index_is_deprecated
+ assert_deprecated { @connection.columns_per_multicolumn_index }
+ end
+
+ def test_sql_query_length_is_deprecated
+ assert_deprecated { @connection.sql_query_length }
+ end
+
+ def test_joins_per_query_is_deprecated
+ assert_deprecated { @connection.joins_per_query }
+ end
end
class AdapterForeignKeyTest < ActiveRecord::TestCase
diff --git a/activerecord/test/cases/autosave_association_test.rb b/activerecord/test/cases/autosave_association_test.rb
index ade1f4b44d..fa618735d7 100644
--- a/activerecord/test/cases/autosave_association_test.rb
+++ b/activerecord/test/cases/autosave_association_test.rb
@@ -558,6 +558,13 @@ class TestDefaultAutosaveAssociationOnAHasManyAssociation < ActiveRecord::TestCa
assert_equal no_of_clients + 1, Client.count
end
+ def test_parent_should_save_children_record_with_foreign_key_validation_set_in_before_save_callback
+ company = NewlyContractedCompany.new(name: "test")
+
+ assert company.save
+ assert_not_empty company.reload.new_contracts
+ end
+
def test_parent_should_not_get_saved_with_duplicate_children_records
assert_no_difference "Reply.count" do
assert_no_difference "SillyUniqueReply.count" do
@@ -568,7 +575,13 @@ class TestDefaultAutosaveAssociationOnAHasManyAssociation < ActiveRecord::TestCa
])
assert_not reply.save
- assert_not_empty reply.errors
+ assert_equal ["is invalid"], reply.errors[:silly_unique_replies]
+ assert_empty reply.silly_unique_replies.first.errors
+
+ assert_equal(
+ ["has already been taken"],
+ reply.silly_unique_replies.last.errors[:content]
+ )
end
end
end
diff --git a/activerecord/test/cases/base_test.rb b/activerecord/test/cases/base_test.rb
index d216fe16fa..f6311f9256 100644
--- a/activerecord/test/cases/base_test.rb
+++ b/activerecord/test/cases/base_test.rb
@@ -853,8 +853,7 @@ class BasicsTest < ActiveRecord::TestCase
assert_equal company, Company.find(company.id)
end
- # TODO: extend defaults tests to other databases!
- if current_adapter?(:PostgreSQLAdapter)
+ if current_adapter?(:PostgreSQLAdapter, :Mysql2Adapter, :SQLite3Adapter)
def test_default
with_timezone_config default: :local do
default = Default.new
@@ -866,7 +865,10 @@ class BasicsTest < ActiveRecord::TestCase
# char types
assert_equal "Y", default.char1
assert_equal "a varchar field", default.char2
- assert_equal "a text field", default.char3
+ # Mysql text type can't have default value
+ unless current_adapter?(:Mysql2Adapter)
+ assert_equal "a text field", default.char3
+ end
end
end
end
diff --git a/activerecord/test/cases/tasks/database_tasks_test.rb b/activerecord/test/cases/tasks/database_tasks_test.rb
index a39a7371fe..d674bd562f 100644
--- a/activerecord/test/cases/tasks/database_tasks_test.rb
+++ b/activerecord/test/cases/tasks/database_tasks_test.rb
@@ -156,24 +156,20 @@ module ActiveRecord
class DatabaseTasksCreateAllTest < ActiveRecord::TestCase
def setup
- @old_configurations = ActiveRecord::Base.configurations
@configurations = { "development" => { "database" => "my-db" } }
$stdout, @original_stdout = StringIO.new, $stdout
$stderr, @original_stderr = StringIO.new, $stderr
-
- ActiveRecord::Base.configurations = @configurations
end
def teardown
$stdout, $stderr = @original_stdout, @original_stderr
- ActiveRecord::Base.configurations = @old_configurations
end
def test_ignores_configurations_without_databases
@configurations["development"]["database"] = nil
- ActiveRecord::Base.configurations do
+ with_stubbed_configurations_establish_connection do
assert_not_called(ActiveRecord::Tasks::DatabaseTasks, :create) do
ActiveRecord::Tasks::DatabaseTasks.create_all
end
@@ -183,7 +179,7 @@ module ActiveRecord
def test_ignores_remote_databases
@configurations["development"]["host"] = "my.server.tld"
- ActiveRecord::Base.configurations do
+ with_stubbed_configurations_establish_connection do
assert_not_called(ActiveRecord::Tasks::DatabaseTasks, :create) do
ActiveRecord::Tasks::DatabaseTasks.create_all
end
@@ -193,7 +189,7 @@ module ActiveRecord
def test_warning_for_remote_databases
@configurations["development"]["host"] = "my.server.tld"
- ActiveRecord::Base.configurations do
+ with_stubbed_configurations_establish_connection do
ActiveRecord::Tasks::DatabaseTasks.create_all
assert_match "This task only modifies local databases. my-db is on a remote host.",
@@ -204,7 +200,7 @@ module ActiveRecord
def test_creates_configurations_with_local_ip
@configurations["development"]["host"] = "127.0.0.1"
- ActiveRecord::Base.configurations do
+ with_stubbed_configurations_establish_connection do
assert_called(ActiveRecord::Tasks::DatabaseTasks, :create) do
ActiveRecord::Tasks::DatabaseTasks.create_all
end
@@ -214,7 +210,7 @@ module ActiveRecord
def test_creates_configurations_with_local_host
@configurations["development"]["host"] = "localhost"
- ActiveRecord::Base.configurations do
+ with_stubbed_configurations_establish_connection do
assert_called(ActiveRecord::Tasks::DatabaseTasks, :create) do
ActiveRecord::Tasks::DatabaseTasks.create_all
end
@@ -224,33 +220,39 @@ module ActiveRecord
def test_creates_configurations_with_blank_hosts
@configurations["development"]["host"] = nil
- ActiveRecord::Base.configurations do
+ with_stubbed_configurations_establish_connection do
assert_called(ActiveRecord::Tasks::DatabaseTasks, :create) do
ActiveRecord::Tasks::DatabaseTasks.create_all
end
end
end
+
+ private
+ def with_stubbed_configurations_establish_connection
+ old_configurations = ActiveRecord::Base.configurations
+ ActiveRecord::Base.configurations = @configurations
+
+ # To refrain from connecting to a newly created empty DB in
+ # sqlite3_mem tests
+ ActiveRecord::Base.connection_handler.stub(:establish_connection, nil) do
+ yield
+ end
+ ensure
+ ActiveRecord::Base.configurations = old_configurations
+ end
end
class DatabaseTasksCreateCurrentTest < ActiveRecord::TestCase
def setup
- @old_configurations = ActiveRecord::Base.configurations
-
@configurations = {
"development" => { "database" => "dev-db" },
"test" => { "database" => "test-db" },
- "production" => { "url" => "abstract://prod-db-url" }
+ "production" => { "url" => "abstract://prod-db-host/prod-db" }
}
-
- ActiveRecord::Base.configurations = @configurations
- end
-
- def teardown
- ActiveRecord::Base.configurations = @old_configurations
end
def test_creates_current_environment_database
- ActiveRecord::Base.configurations do
+ with_stubbed_configurations_establish_connection do
assert_called_with(
ActiveRecord::Tasks::DatabaseTasks,
:create,
@@ -264,11 +266,11 @@ module ActiveRecord
end
def test_creates_current_environment_database_with_url
- ActiveRecord::Base.configurations do
+ with_stubbed_configurations_establish_connection do
assert_called_with(
ActiveRecord::Tasks::DatabaseTasks,
:create,
- ["url" => "prod-db-url"],
+ ["adapter" => "abstract", "database" => "prod-db", "host" => "prod-db-host"],
) do
ActiveRecord::Tasks::DatabaseTasks.create_current(
ActiveSupport::StringInquirer.new("production")
@@ -278,7 +280,7 @@ module ActiveRecord
end
def test_creates_test_and_development_databases_when_env_was_not_specified
- ActiveRecord::Base.configurations do
+ with_stubbed_configurations_establish_connection do
assert_called_with(
ActiveRecord::Tasks::DatabaseTasks,
:create,
@@ -298,7 +300,7 @@ module ActiveRecord
old_env = ENV["RAILS_ENV"]
ENV["RAILS_ENV"] = "development"
- ActiveRecord::Base.configurations do
+ with_stubbed_configurations_establish_connection do
assert_called_with(
ActiveRecord::Tasks::DatabaseTasks,
:create,
@@ -325,27 +327,31 @@ module ActiveRecord
end
end
end
+
+ private
+ def with_stubbed_configurations_establish_connection
+ old_configurations = ActiveRecord::Base.configurations
+ ActiveRecord::Base.configurations = @configurations
+
+ ActiveRecord::Base.connection_handler.stub(:establish_connection, nil) do
+ yield
+ end
+ ensure
+ ActiveRecord::Base.configurations = old_configurations
+ end
end
class DatabaseTasksCreateCurrentThreeTierTest < ActiveRecord::TestCase
def setup
- @old_configurations = ActiveRecord::Base.configurations
-
@configurations = {
"development" => { "primary" => { "database" => "dev-db" }, "secondary" => { "database" => "secondary-dev-db" } },
"test" => { "primary" => { "database" => "test-db" }, "secondary" => { "database" => "secondary-test-db" } },
- "production" => { "primary" => { "url" => "abstract://prod-db-url" }, "secondary" => { "url" => "abstract://secondary-prod-db-url" } }
+ "production" => { "primary" => { "url" => "abstract://prod-db-host/prod-db" }, "secondary" => { "url" => "abstract://secondary-prod-db-host/secondary-prod-db" } }
}
-
- ActiveRecord::Base.configurations = @configurations
- end
-
- def teardown
- ActiveRecord::Base.configurations = @old_configurations
end
def test_creates_current_environment_database
- ActiveRecord::Base.configurations do
+ with_stubbed_configurations_establish_connection do
assert_called_with(
ActiveRecord::Tasks::DatabaseTasks,
:create,
@@ -362,13 +368,13 @@ module ActiveRecord
end
def test_creates_current_environment_database_with_url
- ActiveRecord::Base.configurations do
+ with_stubbed_configurations_establish_connection do
assert_called_with(
ActiveRecord::Tasks::DatabaseTasks,
:create,
[
- ["url" => "prod-db-url"],
- ["url" => "secondary-prod-db-url"]
+ ["adapter" => "abstract", "database" => "prod-db", "host" => "prod-db-host"],
+ ["adapter" => "abstract", "database" => "secondary-prod-db", "host" => "secondary-prod-db-host"]
]
) do
ActiveRecord::Tasks::DatabaseTasks.create_current(
@@ -379,7 +385,7 @@ module ActiveRecord
end
def test_creates_test_and_development_databases_when_env_was_not_specified
- ActiveRecord::Base.configurations do
+ with_stubbed_configurations_establish_connection do
assert_called_with(
ActiveRecord::Tasks::DatabaseTasks,
:create,
@@ -401,7 +407,7 @@ module ActiveRecord
old_env = ENV["RAILS_ENV"]
ENV["RAILS_ENV"] = "development"
- ActiveRecord::Base.configurations do
+ with_stubbed_configurations_establish_connection do
assert_called_with(
ActiveRecord::Tasks::DatabaseTasks,
:create,
@@ -434,6 +440,18 @@ module ActiveRecord
end
end
end
+
+ private
+ def with_stubbed_configurations_establish_connection
+ old_configurations = ActiveRecord::Base.configurations
+ ActiveRecord::Base.configurations = @configurations
+
+ ActiveRecord::Base.connection_handler.stub(:establish_connection, nil) do
+ yield
+ end
+ ensure
+ ActiveRecord::Base.configurations = old_configurations
+ end
end
class DatabaseTasksDropTest < ActiveRecord::TestCase
@@ -452,24 +470,20 @@ module ActiveRecord
class DatabaseTasksDropAllTest < ActiveRecord::TestCase
def setup
- @old_configurations = ActiveRecord::Base.configurations
@configurations = { development: { "database" => "my-db" } }
$stdout, @original_stdout = StringIO.new, $stdout
$stderr, @original_stderr = StringIO.new, $stderr
-
- ActiveRecord::Base.configurations = @configurations
end
def teardown
$stdout, $stderr = @original_stdout, @original_stderr
- ActiveRecord::Base.configurations = @old_configurations
end
def test_ignores_configurations_without_databases
@configurations[:development]["database"] = nil
- ActiveRecord::Base.configurations do
+ with_stubbed_configurations do
assert_not_called(ActiveRecord::Tasks::DatabaseTasks, :drop) do
ActiveRecord::Tasks::DatabaseTasks.drop_all
end
@@ -479,7 +493,7 @@ module ActiveRecord
def test_ignores_remote_databases
@configurations[:development]["host"] = "my.server.tld"
- ActiveRecord::Base.configurations do
+ with_stubbed_configurations do
assert_not_called(ActiveRecord::Tasks::DatabaseTasks, :drop) do
ActiveRecord::Tasks::DatabaseTasks.drop_all
end
@@ -489,7 +503,7 @@ module ActiveRecord
def test_warning_for_remote_databases
@configurations[:development]["host"] = "my.server.tld"
- ActiveRecord::Base.configurations do
+ with_stubbed_configurations do
ActiveRecord::Tasks::DatabaseTasks.drop_all
assert_match "This task only modifies local databases. my-db is on a remote host.",
@@ -500,7 +514,7 @@ module ActiveRecord
def test_drops_configurations_with_local_ip
@configurations[:development]["host"] = "127.0.0.1"
- ActiveRecord::Base.configurations do
+ with_stubbed_configurations do
assert_called(ActiveRecord::Tasks::DatabaseTasks, :drop) do
ActiveRecord::Tasks::DatabaseTasks.drop_all
end
@@ -510,7 +524,7 @@ module ActiveRecord
def test_drops_configurations_with_local_host
@configurations[:development]["host"] = "localhost"
- ActiveRecord::Base.configurations do
+ with_stubbed_configurations do
assert_called(ActiveRecord::Tasks::DatabaseTasks, :drop) do
ActiveRecord::Tasks::DatabaseTasks.drop_all
end
@@ -520,32 +534,35 @@ module ActiveRecord
def test_drops_configurations_with_blank_hosts
@configurations[:development]["host"] = nil
- ActiveRecord::Base.configurations do
+ with_stubbed_configurations do
assert_called(ActiveRecord::Tasks::DatabaseTasks, :drop) do
ActiveRecord::Tasks::DatabaseTasks.drop_all
end
end
end
+
+ private
+ def with_stubbed_configurations
+ old_configurations = ActiveRecord::Base.configurations
+ ActiveRecord::Base.configurations = @configurations
+
+ yield
+ ensure
+ ActiveRecord::Base.configurations = old_configurations
+ end
end
class DatabaseTasksDropCurrentTest < ActiveRecord::TestCase
def setup
- @old_configurations = ActiveRecord::Base.configurations
@configurations = {
"development" => { "database" => "dev-db" },
"test" => { "database" => "test-db" },
- "production" => { "url" => "abstract://prod-db-url" }
+ "production" => { "url" => "abstract://prod-db-host/prod-db" }
}
-
- ActiveRecord::Base.configurations = @configurations
- end
-
- def teardown
- ActiveRecord::Base.configurations = @old_configurations
end
def test_drops_current_environment_database
- ActiveRecord::Base.configurations do
+ with_stubbed_configurations do
assert_called_with(ActiveRecord::Tasks::DatabaseTasks, :drop,
["database" => "test-db"]) do
ActiveRecord::Tasks::DatabaseTasks.drop_current(
@@ -556,9 +573,9 @@ module ActiveRecord
end
def test_drops_current_environment_database_with_url
- ActiveRecord::Base.configurations do
+ with_stubbed_configurations do
assert_called_with(ActiveRecord::Tasks::DatabaseTasks, :drop,
- ["url" => "prod-db-url"]) do
+ ["adapter" => "abstract", "database" => "prod-db", "host" => "prod-db-host"]) do
ActiveRecord::Tasks::DatabaseTasks.drop_current(
ActiveSupport::StringInquirer.new("production")
)
@@ -567,7 +584,7 @@ module ActiveRecord
end
def test_drops_test_and_development_databases_when_env_was_not_specified
- ActiveRecord::Base.configurations do
+ with_stubbed_configurations do
assert_called_with(
ActiveRecord::Tasks::DatabaseTasks,
:drop,
@@ -587,7 +604,7 @@ module ActiveRecord
old_env = ENV["RAILS_ENV"]
ENV["RAILS_ENV"] = "development"
- ActiveRecord::Base.configurations do
+ with_stubbed_configurations do
assert_called_with(
ActiveRecord::Tasks::DatabaseTasks,
:drop,
@@ -604,26 +621,29 @@ module ActiveRecord
ensure
ENV["RAILS_ENV"] = old_env
end
+
+ private
+ def with_stubbed_configurations
+ old_configurations = ActiveRecord::Base.configurations
+ ActiveRecord::Base.configurations = @configurations
+
+ yield
+ ensure
+ ActiveRecord::Base.configurations = old_configurations
+ end
end
class DatabaseTasksDropCurrentThreeTierTest < ActiveRecord::TestCase
def setup
- @old_configurations = ActiveRecord::Base.configurations
@configurations = {
"development" => { "primary" => { "database" => "dev-db" }, "secondary" => { "database" => "secondary-dev-db" } },
"test" => { "primary" => { "database" => "test-db" }, "secondary" => { "database" => "secondary-test-db" } },
- "production" => { "primary" => { "url" => "abstract://prod-db-url" }, "secondary" => { "url" => "abstract://secondary-prod-db-url" } }
+ "production" => { "primary" => { "url" => "abstract://prod-db-host/prod-db" }, "secondary" => { "url" => "abstract://secondary-prod-db-host/secondary-prod-db" } }
}
-
- ActiveRecord::Base.configurations = @configurations
- end
-
- def teardown
- ActiveRecord::Base.configurations = @old_configurations
end
def test_drops_current_environment_database
- ActiveRecord::Base.configurations do
+ with_stubbed_configurations do
assert_called_with(
ActiveRecord::Tasks::DatabaseTasks,
:drop,
@@ -640,13 +660,13 @@ module ActiveRecord
end
def test_drops_current_environment_database_with_url
- ActiveRecord::Base.configurations do
+ with_stubbed_configurations do
assert_called_with(
ActiveRecord::Tasks::DatabaseTasks,
:drop,
[
- ["url" => "prod-db-url"],
- ["url" => "secondary-prod-db-url"]
+ ["adapter" => "abstract", "database" => "prod-db", "host" => "prod-db-host"],
+ ["adapter" => "abstract", "database" => "secondary-prod-db", "host" => "secondary-prod-db-host"]
]
) do
ActiveRecord::Tasks::DatabaseTasks.drop_current(
@@ -657,7 +677,7 @@ module ActiveRecord
end
def test_drops_test_and_development_databases_when_env_was_not_specified
- ActiveRecord::Base.configurations do
+ with_stubbed_configurations do
assert_called_with(
ActiveRecord::Tasks::DatabaseTasks,
:drop,
@@ -679,7 +699,7 @@ module ActiveRecord
old_env = ENV["RAILS_ENV"]
ENV["RAILS_ENV"] = "development"
- ActiveRecord::Base.configurations do
+ with_stubbed_configurations do
assert_called_with(
ActiveRecord::Tasks::DatabaseTasks,
:drop,
@@ -698,6 +718,16 @@ module ActiveRecord
ensure
ENV["RAILS_ENV"] = old_env
end
+
+ private
+ def with_stubbed_configurations
+ old_configurations = ActiveRecord::Base.configurations
+ ActiveRecord::Base.configurations = @configurations
+
+ yield
+ ensure
+ ActiveRecord::Base.configurations = old_configurations
+ end
end
if current_adapter?(:SQLite3Adapter) && !in_memory_db?
@@ -860,15 +890,13 @@ module ActiveRecord
ActiveRecord::Base.configurations = configurations
- ActiveRecord::Base.configurations do
- assert_called_with(
- ActiveRecord::Tasks::DatabaseTasks,
- :purge,
- ["database" => "prod-db"]
- ) do
- assert_called_with(ActiveRecord::Base, :establish_connection, [:production]) do
- ActiveRecord::Tasks::DatabaseTasks.purge_current("production")
- end
+ assert_called_with(
+ ActiveRecord::Tasks::DatabaseTasks,
+ :purge,
+ ["database" => "prod-db"]
+ ) do
+ assert_called_with(ActiveRecord::Base, :establish_connection, [:production]) do
+ ActiveRecord::Tasks::DatabaseTasks.purge_current("production")
end
end
ensure
@@ -881,14 +909,13 @@ module ActiveRecord
old_configurations = ActiveRecord::Base.configurations
configurations = { development: { "database" => "my-db" } }
ActiveRecord::Base.configurations = configurations
- ActiveRecord::Base.configurations do
- assert_called_with(
- ActiveRecord::Tasks::DatabaseTasks,
- :purge,
- ["database" => "my-db"]
- ) do
- ActiveRecord::Tasks::DatabaseTasks.purge_all
- end
+
+ assert_called_with(
+ ActiveRecord::Tasks::DatabaseTasks,
+ :purge,
+ ["database" => "my-db"]
+ ) do
+ ActiveRecord::Tasks::DatabaseTasks.purge_all
end
ensure
ActiveRecord::Base.configurations = old_configurations
diff --git a/activerecord/test/cases/tasks/legacy_database_tasks_test.rb b/activerecord/test/cases/tasks/legacy_database_tasks_test.rb
deleted file mode 100644
index ffa55be878..0000000000
--- a/activerecord/test/cases/tasks/legacy_database_tasks_test.rb
+++ /dev/null
@@ -1,591 +0,0 @@
-# frozen_string_literal: true
-
-require "cases/helper"
-require "active_record/tasks/database_tasks"
-
-module ActiveRecord
- class LegacyDatabaseTasksCreateAllTest < ActiveRecord::TestCase
- def setup
- @old_configurations = ActiveRecord::Base.configurations.to_h
-
- @configurations = { "development" => { "database" => "my-db" } }
-
- $stdout, @original_stdout = StringIO.new, $stdout
- $stderr, @original_stderr = StringIO.new, $stderr
-
- ActiveRecord::Base.configurations = @configurations
- end
-
- def teardown
- $stdout, $stderr = @original_stdout, @original_stderr
- ActiveRecord::Base.configurations = @old_configurations
- end
-
- def test_ignores_configurations_without_databases
- @configurations["development"]["database"] = nil
-
- ActiveRecord::Base.configurations.to_h do
- assert_not_called(ActiveRecord::Tasks::DatabaseTasks, :create) do
- ActiveRecord::Tasks::DatabaseTasks.create_all
- end
- end
- end
-
- def test_ignores_remote_databases
- @configurations["development"]["host"] = "my.server.tld"
-
- ActiveRecord::Base.configurations.to_h do
- assert_not_called(ActiveRecord::Tasks::DatabaseTasks, :create) do
- ActiveRecord::Tasks::DatabaseTasks.create_all
- end
- end
- end
-
- def test_warning_for_remote_databases
- @configurations["development"]["host"] = "my.server.tld"
-
- ActiveRecord::Base.configurations.to_h do
- ActiveRecord::Tasks::DatabaseTasks.create_all
-
- assert_match "This task only modifies local databases. my-db is on a remote host.",
- $stderr.string
- end
- end
-
- def test_creates_configurations_with_local_ip
- @configurations["development"]["host"] = "127.0.0.1"
-
- ActiveRecord::Base.configurations.to_h do
- assert_called(ActiveRecord::Tasks::DatabaseTasks, :create) do
- ActiveRecord::Tasks::DatabaseTasks.create_all
- end
- end
- end
-
- def test_creates_configurations_with_local_host
- @configurations["development"]["host"] = "localhost"
-
- ActiveRecord::Base.configurations.to_h do
- assert_called(ActiveRecord::Tasks::DatabaseTasks, :create) do
- ActiveRecord::Tasks::DatabaseTasks.create_all
- end
- end
- end
-
- def test_creates_configurations_with_blank_hosts
- @configurations["development"]["host"] = nil
-
- ActiveRecord::Base.configurations.to_h do
- assert_called(ActiveRecord::Tasks::DatabaseTasks, :create) do
- ActiveRecord::Tasks::DatabaseTasks.create_all
- end
- end
- end
- end
-
- class LegacyDatabaseTasksCreateCurrentTest < ActiveRecord::TestCase
- def setup
- @old_configurations = ActiveRecord::Base.configurations.to_h
-
- @configurations = {
- "development" => { "database" => "dev-db" },
- "test" => { "database" => "test-db" },
- "production" => { "url" => "abstract://prod-db-url" }
- }
-
- ActiveRecord::Base.configurations = @configurations
- end
-
- def teardown
- ActiveRecord::Base.configurations = @old_configurations
- end
-
- def test_creates_current_environment_database
- ActiveRecord::Base.configurations.to_h do
- assert_called_with(
- ActiveRecord::Tasks::DatabaseTasks,
- :create,
- ["database" => "test-db"],
- ) do
- ActiveRecord::Tasks::DatabaseTasks.create_current(
- ActiveSupport::StringInquirer.new("test")
- )
- end
- end
- end
-
- def test_creates_current_environment_database_with_url
- ActiveRecord::Base.configurations.to_h do
- assert_called_with(
- ActiveRecord::Tasks::DatabaseTasks,
- :create,
- ["url" => "prod-db-url"],
- ) do
- ActiveRecord::Tasks::DatabaseTasks.create_current(
- ActiveSupport::StringInquirer.new("production")
- )
- end
- end
- end
-
- def test_creates_test_and_development_databases_when_env_was_not_specified
- ActiveRecord::Base.configurations.to_h do
- assert_called_with(
- ActiveRecord::Tasks::DatabaseTasks,
- :create,
- [
- ["database" => "dev-db"],
- ["database" => "test-db"]
- ],
- ) do
- ActiveRecord::Tasks::DatabaseTasks.create_current(
- ActiveSupport::StringInquirer.new("development")
- )
- end
- end
- end
-
- def test_creates_test_and_development_databases_when_rails_env_is_development
- old_env = ENV["RAILS_ENV"]
- ENV["RAILS_ENV"] = "development"
-
- ActiveRecord::Base.configurations.to_h do
- assert_called_with(
- ActiveRecord::Tasks::DatabaseTasks,
- :create,
- [
- ["database" => "dev-db"],
- ["database" => "test-db"]
- ],
- ) do
- ActiveRecord::Tasks::DatabaseTasks.create_current(
- ActiveSupport::StringInquirer.new("development")
- )
- end
- end
- ensure
- ENV["RAILS_ENV"] = old_env
- end
-
- def test_establishes_connection_for_the_given_environments
- ActiveRecord::Tasks::DatabaseTasks.stub(:create, nil) do
- assert_called_with(ActiveRecord::Base, :establish_connection, [:development]) do
- ActiveRecord::Tasks::DatabaseTasks.create_current(
- ActiveSupport::StringInquirer.new("development")
- )
- end
- end
- end
- end
-
- class LegacyDatabaseTasksCreateCurrentThreeTierTest < ActiveRecord::TestCase
- def setup
- @old_configurations = ActiveRecord::Base.configurations.to_h
-
- @configurations = {
- "development" => { "primary" => { "database" => "dev-db" }, "secondary" => { "database" => "secondary-dev-db" } },
- "test" => { "primary" => { "database" => "test-db" }, "secondary" => { "database" => "secondary-test-db" } },
- "production" => { "primary" => { "url" => "abstract://prod-db-url" }, "secondary" => { "url" => "abstract://secondary-prod-db-url" } }
- }
-
- ActiveRecord::Base.configurations = @configurations
- end
-
- def teardown
- ActiveRecord::Base.configurations = @old_configurations
- end
-
- def test_creates_current_environment_database
- ActiveRecord::Base.configurations.to_h do
- assert_called_with(
- ActiveRecord::Tasks::DatabaseTasks,
- :create,
- [
- ["database" => "test-db"],
- ["database" => "secondary-test-db"]
- ]
- ) do
- ActiveRecord::Tasks::DatabaseTasks.create_current(
- ActiveSupport::StringInquirer.new("test")
- )
- end
- end
- end
-
- def test_creates_current_environment_database_with_url
- ActiveRecord::Base.configurations.to_h do
- assert_called_with(
- ActiveRecord::Tasks::DatabaseTasks,
- :create,
- [
- ["url" => "prod-db-url"],
- ["url" => "secondary-prod-db-url"]
- ]
- ) do
- ActiveRecord::Tasks::DatabaseTasks.create_current(
- ActiveSupport::StringInquirer.new("production")
- )
- end
- end
- end
-
- def test_creates_test_and_development_databases_when_env_was_not_specified
- ActiveRecord::Base.configurations.to_h do
- assert_called_with(
- ActiveRecord::Tasks::DatabaseTasks,
- :create,
- [
- ["database" => "dev-db"],
- ["database" => "secondary-dev-db"],
- ["database" => "test-db"],
- ["database" => "secondary-test-db"]
- ]
- ) do
- ActiveRecord::Tasks::DatabaseTasks.create_current(
- ActiveSupport::StringInquirer.new("development")
- )
- end
- end
- end
-
- def test_creates_test_and_development_databases_when_rails_env_is_development
- old_env = ENV["RAILS_ENV"]
- ENV["RAILS_ENV"] = "development"
-
- ActiveRecord::Base.configurations.to_h do
- assert_called_with(
- ActiveRecord::Tasks::DatabaseTasks,
- :create,
- [
- ["database" => "dev-db"],
- ["database" => "secondary-dev-db"],
- ["database" => "test-db"],
- ["database" => "secondary-test-db"]
- ]
- ) do
- ActiveRecord::Tasks::DatabaseTasks.create_current(
- ActiveSupport::StringInquirer.new("development")
- )
- end
- end
- ensure
- ENV["RAILS_ENV"] = old_env
- end
-
- def test_establishes_connection_for_the_given_environments_config
- ActiveRecord::Tasks::DatabaseTasks.stub(:create, nil) do
- assert_called_with(
- ActiveRecord::Base,
- :establish_connection,
- [:development]
- ) do
- ActiveRecord::Tasks::DatabaseTasks.create_current(
- ActiveSupport::StringInquirer.new("development")
- )
- end
- end
- end
- end
-
- class LegacyDatabaseTasksDropAllTest < ActiveRecord::TestCase
- def setup
- @old_configurations = ActiveRecord::Base.configurations.to_h
-
- @configurations = { development: { "database" => "my-db" } }
-
- $stdout, @original_stdout = StringIO.new, $stdout
- $stderr, @original_stderr = StringIO.new, $stderr
-
- ActiveRecord::Base.configurations = @configurations
- end
-
- def teardown
- $stdout, $stderr = @original_stdout, @original_stderr
- ActiveRecord::Base.configurations = @old_configurations
- end
-
- def test_ignores_configurations_without_databases
- @configurations[:development]["database"] = nil
-
- ActiveRecord::Base.configurations.to_h do
- assert_not_called(ActiveRecord::Tasks::DatabaseTasks, :drop) do
- ActiveRecord::Tasks::DatabaseTasks.drop_all
- end
- end
- end
-
- def test_ignores_remote_databases
- @configurations[:development]["host"] = "my.server.tld"
-
- ActiveRecord::Base.configurations.to_h do
- assert_not_called(ActiveRecord::Tasks::DatabaseTasks, :drop) do
- ActiveRecord::Tasks::DatabaseTasks.drop_all
- end
- end
- end
-
- def test_warning_for_remote_databases
- @configurations[:development]["host"] = "my.server.tld"
-
- ActiveRecord::Base.configurations.to_h do
- ActiveRecord::Tasks::DatabaseTasks.drop_all
-
- assert_match "This task only modifies local databases. my-db is on a remote host.",
- $stderr.string
- end
- end
-
- def test_drops_configurations_with_local_ip
- @configurations[:development]["host"] = "127.0.0.1"
-
- ActiveRecord::Base.configurations.to_h do
- assert_called(ActiveRecord::Tasks::DatabaseTasks, :drop) do
- ActiveRecord::Tasks::DatabaseTasks.drop_all
- end
- end
- end
-
- def test_drops_configurations_with_local_host
- @configurations[:development]["host"] = "localhost"
-
- ActiveRecord::Base.configurations.to_h do
- assert_called(ActiveRecord::Tasks::DatabaseTasks, :drop) do
- ActiveRecord::Tasks::DatabaseTasks.drop_all
- end
- end
- end
-
- def test_drops_configurations_with_blank_hosts
- @configurations[:development]["host"] = nil
-
- ActiveRecord::Base.configurations.to_h do
- assert_called(ActiveRecord::Tasks::DatabaseTasks, :drop) do
- ActiveRecord::Tasks::DatabaseTasks.drop_all
- end
- end
- end
- end
-
- class LegacyDatabaseTasksDropCurrentTest < ActiveRecord::TestCase
- def setup
- @old_configurations = ActiveRecord::Base.configurations.to_h
-
- @configurations = {
- "development" => { "database" => "dev-db" },
- "test" => { "database" => "test-db" },
- "production" => { "url" => "abstract://prod-db-url" }
- }
-
- ActiveRecord::Base.configurations = @configurations
- end
-
- def teardown
- ActiveRecord::Base.configurations = @old_configurations
- end
-
- def test_drops_current_environment_database
- ActiveRecord::Base.configurations.to_h do
- assert_called_with(ActiveRecord::Tasks::DatabaseTasks, :drop,
- ["database" => "test-db"]) do
- ActiveRecord::Tasks::DatabaseTasks.drop_current(
- ActiveSupport::StringInquirer.new("test")
- )
- end
- end
- end
-
- def test_drops_current_environment_database_with_url
- ActiveRecord::Base.configurations.to_h do
- assert_called_with(ActiveRecord::Tasks::DatabaseTasks, :drop,
- ["url" => "prod-db-url"]) do
- ActiveRecord::Tasks::DatabaseTasks.drop_current(
- ActiveSupport::StringInquirer.new("production")
- )
- end
- end
- end
-
- def test_drops_test_and_development_databases_when_env_was_not_specified
- ActiveRecord::Base.configurations.to_h do
- assert_called_with(
- ActiveRecord::Tasks::DatabaseTasks,
- :drop,
- [
- ["database" => "dev-db"],
- ["database" => "test-db"]
- ]
- ) do
- ActiveRecord::Tasks::DatabaseTasks.drop_current(
- ActiveSupport::StringInquirer.new("development")
- )
- end
- end
- end
-
- def test_drops_testand_development_databases_when_rails_env_is_development
- old_env = ENV["RAILS_ENV"]
- ENV["RAILS_ENV"] = "development"
-
- ActiveRecord::Base.configurations.to_h do
- assert_called_with(
- ActiveRecord::Tasks::DatabaseTasks,
- :drop,
- [
- ["database" => "dev-db"],
- ["database" => "test-db"]
- ]
- ) do
- ActiveRecord::Tasks::DatabaseTasks.drop_current(
- ActiveSupport::StringInquirer.new("development")
- )
- end
- end
- ensure
- ENV["RAILS_ENV"] = old_env
- end
- end
-
- class LegacyDatabaseTasksDropCurrentThreeTierTest < ActiveRecord::TestCase
- def setup
- @old_configurations = ActiveRecord::Base.configurations.to_h
-
- @configurations = {
- "development" => { "primary" => { "database" => "dev-db" }, "secondary" => { "database" => "secondary-dev-db" } },
- "test" => { "primary" => { "database" => "test-db" }, "secondary" => { "database" => "secondary-test-db" } },
- "production" => { "primary" => { "url" => "abstract://prod-db-url" }, "secondary" => { "url" => "abstract://secondary-prod-db-url" } }
- }
-
- ActiveRecord::Base.configurations = @configurations
- end
-
- def teardown
- ActiveRecord::Base.configurations = @old_configurations
- end
-
- def test_drops_current_environment_database
- ActiveRecord::Base.configurations.to_h do
- assert_called_with(
- ActiveRecord::Tasks::DatabaseTasks,
- :drop,
- [
- ["database" => "test-db"],
- ["database" => "secondary-test-db"]
- ]
- ) do
- ActiveRecord::Tasks::DatabaseTasks.drop_current(
- ActiveSupport::StringInquirer.new("test")
- )
- end
- end
- end
-
- def test_drops_current_environment_database_with_url
- ActiveRecord::Base.configurations.to_h do
- assert_called_with(
- ActiveRecord::Tasks::DatabaseTasks,
- :drop,
- [
- ["url" => "prod-db-url"],
- ["url" => "secondary-prod-db-url"]
- ]
- ) do
- ActiveRecord::Tasks::DatabaseTasks.drop_current(
- ActiveSupport::StringInquirer.new("production")
- )
- end
- end
- end
-
- def test_drops_test_and_development_databases_when_env_was_not_specified
- ActiveRecord::Base.configurations.to_h do
- assert_called_with(
- ActiveRecord::Tasks::DatabaseTasks,
- :drop,
- [
- ["database" => "dev-db"],
- ["database" => "secondary-dev-db"],
- ["database" => "test-db"],
- ["database" => "secondary-test-db"]
- ]
- ) do
- ActiveRecord::Tasks::DatabaseTasks.drop_current(
- ActiveSupport::StringInquirer.new("development")
- )
- end
- end
- end
-
- def test_drops_testand_development_databases_when_rails_env_is_development
- old_env = ENV["RAILS_ENV"]
- ENV["RAILS_ENV"] = "development"
-
- ActiveRecord::Base.configurations.to_h do
- assert_called_with(
- ActiveRecord::Tasks::DatabaseTasks,
- :drop,
- [
- ["database" => "dev-db"],
- ["database" => "secondary-dev-db"],
- ["database" => "test-db"],
- ["database" => "secondary-test-db"]
- ]
- ) do
- ActiveRecord::Tasks::DatabaseTasks.drop_current(
- ActiveSupport::StringInquirer.new("development")
- )
- end
- end
- ensure
- ENV["RAILS_ENV"] = old_env
- end
- end
-
- class LegacyDatabaseTasksPurgeCurrentTest < ActiveRecord::TestCase
- def test_purges_current_environment_database
- @old_configurations = ActiveRecord::Base.configurations.to_h
-
- configurations = {
- "development" => { "database" => "dev-db" },
- "test" => { "database" => "test-db" },
- "production" => { "database" => "prod-db" }
- }
-
- ActiveRecord::Base.configurations = configurations
-
- ActiveRecord::Base.configurations.to_h do
- assert_called_with(
- ActiveRecord::Tasks::DatabaseTasks,
- :purge,
- ["database" => "prod-db"]
- ) do
- assert_called_with(ActiveRecord::Base, :establish_connection, [:production]) do
- ActiveRecord::Tasks::DatabaseTasks.purge_current("production")
- end
- end
- end
- ensure
- ActiveRecord::Base.configurations = @old_configurations
- end
- end
-
- class LegacyDatabaseTasksPurgeAllTest < ActiveRecord::TestCase
- def test_purge_all_local_configurations
- @old_configurations = ActiveRecord::Base.configurations.to_h
-
- configurations = { development: { "database" => "my-db" } }
- ActiveRecord::Base.configurations = configurations
-
- ActiveRecord::Base.configurations.to_h do
- assert_called_with(
- ActiveRecord::Tasks::DatabaseTasks,
- :purge,
- ["database" => "my-db"]
- ) do
- ActiveRecord::Tasks::DatabaseTasks.purge_all
- end
- end
- ensure
- ActiveRecord::Base.configurations = @old_configurations
- end
- end
-end
diff --git a/activerecord/test/models/company.rb b/activerecord/test/models/company.rb
index d4d5275b78..485b35d58b 100644
--- a/activerecord/test/models/company.rb
+++ b/activerecord/test/models/company.rb
@@ -204,4 +204,12 @@ end
class VerySpecialClient < SpecialClient
end
+class NewlyContractedCompany < Company
+ has_many :new_contracts, foreign_key: "company_id"
+
+ before_save do
+ self.new_contracts << NewContract.new
+ end
+end
+
require "models/account"
diff --git a/activerecord/test/models/contract.rb b/activerecord/test/models/contract.rb
index f273badd85..3f663375c4 100644
--- a/activerecord/test/models/contract.rb
+++ b/activerecord/test/models/contract.rb
@@ -20,3 +20,7 @@ class Contract < ActiveRecord::Base
@bye_count += 1
end
end
+
+class NewContract < Contract
+ validates :company_id, presence: true
+end
diff --git a/activerecord/test/schema/mysql2_specific_schema.rb b/activerecord/test/schema/mysql2_specific_schema.rb
index 8371ba9528..0f2f6ddd68 100644
--- a/activerecord/test/schema/mysql2_specific_schema.rb
+++ b/activerecord/test/schema/mysql2_specific_schema.rb
@@ -14,6 +14,13 @@ ActiveRecord::Schema.define do
end
end
+ create_table :defaults, force: true do |t|
+ t.date :fixed_date, default: "2004-01-01"
+ t.datetime :fixed_time, default: "2004-01-01 00:00:00"
+ t.column :char1, "char(1)", default: "Y"
+ t.string :char2, limit: 50, default: "a varchar field"
+ end
+
create_table :binary_fields, force: true do |t|
t.binary :var_binary, limit: 255
t.binary :var_binary_large, limit: 4095
diff --git a/activerecord/test/schema/sqlite_specific_schema.rb b/activerecord/test/schema/sqlite_specific_schema.rb
new file mode 100644
index 0000000000..18192292e4
--- /dev/null
+++ b/activerecord/test/schema/sqlite_specific_schema.rb
@@ -0,0 +1,11 @@
+# frozen_string_literal: true
+
+ActiveRecord::Schema.define do
+ create_table :defaults, force: true do |t|
+ t.date :fixed_date, default: "2004-01-01"
+ t.datetime :fixed_time, default: "2004-01-01 00:00:00"
+ t.column :char1, "char(1)", default: "Y"
+ t.string :char2, limit: 50, default: "a varchar field"
+ t.text :char3, limit: 50, default: "a text field"
+ end
+end