提交 8d5710c8 编写于 作者: P Pat Allan

Cleaning up after some warnings, adding slightly higher-level tests.

上级 4422e034
......@@ -19,7 +19,7 @@ def self.create_all
def self.create_current
each_current_configuration { |configuration| create configuration }
ActiveRecord::Base.establish_connection Rails.env.to_sym
ActiveRecord::Base.establish_connection Rails.env
end
def self.drop(configuration)
......@@ -44,7 +44,7 @@ def self.purge(configuration)
private
def self.class_for_adapter(adapter)
key = TASKS_PATTERNS.keys.detect { |key| adapter[key] }
key = TASKS_PATTERNS.keys.detect { |pattern| adapter[pattern] }
TASKS_PATTERNS[key]
end
......@@ -52,7 +52,7 @@ def self.each_current_configuration
environments = [Rails.env]
environments << 'test' if Rails.env.development?
configurations = ActiveRecord::Base.configurations.values_at *environments
configurations = ActiveRecord::Base.configurations.values_at(*environments)
configurations.compact.each do |configuration|
yield configuration unless configuration['database'].blank?
end
......
......@@ -39,7 +39,9 @@ def purge
private
attr_reader :configuration
def configuration
@configuration
end
def configuration_without_database
configuration.merge('database' => nil)
......@@ -56,7 +58,7 @@ def error_class
case configuration['adapter']
when /jdbc/
require 'active_record/railties/jdbcmysql_error'
error_class = ArJdbcMySQL::Error
ArJdbcMySQL::Error
when /mysql2/
Mysql2::Error
else
......
......@@ -28,7 +28,9 @@ def purge
private
attr_reader :configuration
def configuration
@configuration
end
def encoding
configuration['encoding'] || DEFAULT_ENCODING
......
......@@ -27,5 +27,7 @@ def drop
private
attr_reader :configuration
def configuration
@configuration
end
end
require 'cases/helper'
module ActiveRecord
class DatabaseTasksCreateTest < ActiveRecord::TestCase
def setup
@mysql_tasks, @postgresql_tasks, @sqlite_tasks = stub, stub, stub
ActiveRecord::Tasks::MySQLDatabaseTasks.stubs(:new).returns @mysql_tasks
ActiveRecord::Tasks::PostgreSQLDatabaseTasks.stubs(:new).
returns @postgresql_tasks
ActiveRecord::Tasks::SQLiteDatabaseTasks.stubs(:new).returns @sqlite_tasks
end
def test_mysql_create
@mysql_tasks.expects(:create)
ActiveRecord::Tasks::DatabaseTasks.create 'adapter' => 'mysql'
end
def test_mysql2_create
@mysql_tasks.expects(:create)
ActiveRecord::Tasks::DatabaseTasks.create 'adapter' => 'mysql2'
end
def test_postgresql_create
@postgresql_tasks.expects(:create)
ActiveRecord::Tasks::DatabaseTasks.create 'adapter' => 'postgresql'
end
def test_sqlite_create
@sqlite_tasks.expects(:create)
ActiveRecord::Tasks::DatabaseTasks.create 'adapter' => 'sqlite3'
end
end
class DatabaseTasksCreateAllTest < ActiveRecord::TestCase
def setup
@configurations = {'development' => {'database' => 'my-db'}}
ActiveRecord::Base.stubs(:configurations).returns(@configurations)
end
def test_ignores_configurations_without_databases
@configurations['development'].merge!('database' => nil)
ActiveRecord::Tasks::DatabaseTasks.expects(:create).never
ActiveRecord::Tasks::DatabaseTasks.create_all
end
def test_ignores_remote_databases
@configurations['development'].merge!('host' => 'my.server.tld')
$stderr.stubs(:puts).returns(nil)
ActiveRecord::Tasks::DatabaseTasks.expects(:create).never
ActiveRecord::Tasks::DatabaseTasks.create_all
end
def test_warning_for_remote_databases
@configurations['development'].merge!('host' => 'my.server.tld')
$stderr.expects(:puts).with('This task only modifies local databases. my-db is on a remote host.')
ActiveRecord::Tasks::DatabaseTasks.create_all
end
def test_creates_configurations_with_local_ip
@configurations['development'].merge!('host' => '127.0.0.1')
ActiveRecord::Tasks::DatabaseTasks.expects(:create)
ActiveRecord::Tasks::DatabaseTasks.create_all
end
def test_creates_configurations_with_local_host
@configurations['development'].merge!('host' => 'localhost')
ActiveRecord::Tasks::DatabaseTasks.expects(:create)
ActiveRecord::Tasks::DatabaseTasks.create_all
end
def test_creates_configurations_with_blank_hosts
@configurations['development'].merge!('host' => nil)
ActiveRecord::Tasks::DatabaseTasks.expects(:create)
ActiveRecord::Tasks::DatabaseTasks.create_all
end
end
class DatabaseTasksCreateCurrentTest < ActiveRecord::TestCase
def setup
@configurations = {
'development' => {'database' => 'dev-db'},
'test' => {'database' => 'test-db'},
'production' => {'database' => 'prod-db'}
}
ActiveRecord::Base.stubs(:configurations).returns(@configurations)
ActiveRecord::Base.stubs(:establish_connection).returns(true)
end
def test_creates_current_environment_database
Rails.stubs(:env).returns ActiveSupport::StringInquirer.new('production')
ActiveRecord::Tasks::DatabaseTasks.expects(:create).
with('database' => 'prod-db')
ActiveRecord::Tasks::DatabaseTasks.create_current
end
def test_creates_test_database_when_environment_is_database
Rails.stubs(:env).returns ActiveSupport::StringInquirer.new('development')
ActiveRecord::Tasks::DatabaseTasks.expects(:create).
with('database' => 'dev-db')
ActiveRecord::Tasks::DatabaseTasks.expects(:create).
with('database' => 'test-db')
ActiveRecord::Tasks::DatabaseTasks.create_current
end
def test_establishes_connection_for_the_given_environment
Rails.stubs(:env).returns ActiveSupport::StringInquirer.new('development')
ActiveRecord::Tasks::DatabaseTasks.stubs(:create).returns true
ActiveRecord::Base.expects(:establish_connection).with('development')
ActiveRecord::Tasks::DatabaseTasks.create_current
end
end
class DatabaseTasksDropTest < ActiveRecord::TestCase
def setup
@mysql_tasks, @postgresql_tasks, @sqlite_tasks = stub, stub, stub
ActiveRecord::Tasks::MySQLDatabaseTasks.stubs(:new).returns @mysql_tasks
ActiveRecord::Tasks::PostgreSQLDatabaseTasks.stubs(:new).
returns @postgresql_tasks
ActiveRecord::Tasks::SQLiteDatabaseTasks.stubs(:new).returns @sqlite_tasks
end
def test_mysql_create
@mysql_tasks.expects(:drop)
ActiveRecord::Tasks::DatabaseTasks.drop 'adapter' => 'mysql'
end
def test_mysql2_create
@mysql_tasks.expects(:drop)
ActiveRecord::Tasks::DatabaseTasks.drop 'adapter' => 'mysql2'
end
def test_postgresql_create
@postgresql_tasks.expects(:drop)
ActiveRecord::Tasks::DatabaseTasks.drop 'adapter' => 'postgresql'
end
def test_sqlite_create
@sqlite_tasks.expects(:drop)
ActiveRecord::Tasks::DatabaseTasks.drop 'adapter' => 'sqlite3'
end
end
class DatabaseTasksDropAllTest < ActiveRecord::TestCase
def setup
@configurations = {:development => {'database' => 'my-db'}}
ActiveRecord::Base.stubs(:configurations).returns(@configurations)
end
def test_ignores_configurations_without_databases
@configurations[:development].merge!('database' => nil)
ActiveRecord::Tasks::DatabaseTasks.expects(:drop).never
ActiveRecord::Tasks::DatabaseTasks.drop_all
end
def test_ignores_remote_databases
@configurations[:development].merge!('host' => 'my.server.tld')
$stderr.stubs(:puts).returns(nil)
ActiveRecord::Tasks::DatabaseTasks.expects(:drop).never
ActiveRecord::Tasks::DatabaseTasks.drop_all
end
def test_warning_for_remote_databases
@configurations[:development].merge!('host' => 'my.server.tld')
$stderr.expects(:puts).with('This task only modifies local databases. my-db is on a remote host.')
ActiveRecord::Tasks::DatabaseTasks.drop_all
end
def test_creates_configurations_with_local_ip
@configurations[:development].merge!('host' => '127.0.0.1')
ActiveRecord::Tasks::DatabaseTasks.expects(:drop)
ActiveRecord::Tasks::DatabaseTasks.drop_all
end
def test_creates_configurations_with_local_host
@configurations[:development].merge!('host' => 'localhost')
ActiveRecord::Tasks::DatabaseTasks.expects(:drop)
ActiveRecord::Tasks::DatabaseTasks.drop_all
end
def test_creates_configurations_with_blank_hosts
@configurations[:development].merge!('host' => nil)
ActiveRecord::Tasks::DatabaseTasks.expects(:drop)
ActiveRecord::Tasks::DatabaseTasks.drop_all
end
end
class DatabaseTasksDropCurrentTest < ActiveRecord::TestCase
def setup
@configurations = {
'development' => {'database' => 'dev-db'},
'test' => {'database' => 'test-db'},
'production' => {'database' => 'prod-db'}
}
ActiveRecord::Base.stubs(:configurations).returns(@configurations)
end
def test_creates_current_environment_database
Rails.stubs(:env).returns ActiveSupport::StringInquirer.new('production')
ActiveRecord::Tasks::DatabaseTasks.expects(:drop).
with('database' => 'prod-db')
ActiveRecord::Tasks::DatabaseTasks.drop_current
end
def test_creates_test_database_when_environment_is_database
Rails.stubs(:env).returns ActiveSupport::StringInquirer.new('development')
ActiveRecord::Tasks::DatabaseTasks.expects(:drop).
with('database' => 'dev-db')
ActiveRecord::Tasks::DatabaseTasks.expects(:drop).
with('database' => 'test-db')
ActiveRecord::Tasks::DatabaseTasks.drop_current
end
end
class DatabaseTasksPurgeTest < ActiveRecord::TestCase
def setup
@mysql_tasks, @postgresql_tasks, @sqlite_tasks = stub, stub, stub
ActiveRecord::Tasks::MySQLDatabaseTasks.stubs(:new).returns @mysql_tasks
ActiveRecord::Tasks::PostgreSQLDatabaseTasks.stubs(:new).
returns @postgresql_tasks
ActiveRecord::Tasks::SQLiteDatabaseTasks.stubs(:new).returns @sqlite_tasks
end
def test_mysql_create
@mysql_tasks.expects(:purge)
ActiveRecord::Tasks::DatabaseTasks.purge 'adapter' => 'mysql'
end
def test_mysql2_create
@mysql_tasks.expects(:purge)
ActiveRecord::Tasks::DatabaseTasks.purge 'adapter' => 'mysql2'
end
def test_postgresql_create
@postgresql_tasks.expects(:purge)
ActiveRecord::Tasks::DatabaseTasks.purge 'adapter' => 'postgresql'
end
def test_sqlite_create
@sqlite_tasks.expects(:purge)
ActiveRecord::Tasks::DatabaseTasks.purge 'adapter' => 'sqlite3'
end
end
end
require 'cases/helper'
require 'pathname'
module Rails; end unless defined?(Rails)
module ActiveRecord
class SqliteDBCreateTest < ActiveRecord::TestCase
def setup
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册