Skip to content

Commit

Permalink
Cleaning up after some warnings, adding slightly higher-level tests.
Browse files Browse the repository at this point in the history
  • Loading branch information
pat committed Jun 17, 2012
1 parent 4422e03 commit 8d5710c
Show file tree
Hide file tree
Showing 6 changed files with 309 additions and 9 deletions.
6 changes: 3 additions & 3 deletions activerecord/lib/active_record/tasks/database_tasks.rb
Expand Up @@ -19,7 +19,7 @@ def self.create_all


def self.create_current def self.create_current
each_current_configuration { |configuration| create configuration } each_current_configuration { |configuration| create configuration }
ActiveRecord::Base.establish_connection Rails.env.to_sym ActiveRecord::Base.establish_connection Rails.env
end end


def self.drop(configuration) def self.drop(configuration)
Expand All @@ -44,15 +44,15 @@ def self.purge(configuration)
private private


def self.class_for_adapter(adapter) 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] TASKS_PATTERNS[key]
end end


def self.each_current_configuration def self.each_current_configuration
environments = [Rails.env] environments = [Rails.env]
environments << 'test' if Rails.env.development? 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| configurations.compact.each do |configuration|
yield configuration unless configuration['database'].blank? yield configuration unless configuration['database'].blank?
end end
Expand Down
6 changes: 4 additions & 2 deletions activerecord/lib/active_record/tasks/mysql_database_tasks.rb
Expand Up @@ -39,7 +39,9 @@ def purge


private private


attr_reader :configuration def configuration
@configuration
end


def configuration_without_database def configuration_without_database
configuration.merge('database' => nil) configuration.merge('database' => nil)
Expand All @@ -56,7 +58,7 @@ def error_class
case configuration['adapter'] case configuration['adapter']
when /jdbc/ when /jdbc/
require 'active_record/railties/jdbcmysql_error' require 'active_record/railties/jdbcmysql_error'
error_class = ArJdbcMySQL::Error ArJdbcMySQL::Error
when /mysql2/ when /mysql2/
Mysql2::Error Mysql2::Error
else else
Expand Down
Expand Up @@ -28,7 +28,9 @@ def purge


private private


attr_reader :configuration def configuration
@configuration
end


def encoding def encoding
configuration['encoding'] || DEFAULT_ENCODING configuration['encoding'] || DEFAULT_ENCODING
Expand Down
Expand Up @@ -27,5 +27,7 @@ def drop


private private


attr_reader :configuration def configuration
@configuration
end
end end
296 changes: 296 additions & 0 deletions activerecord/test/cases/database_tasks_test.rb
@@ -0,0 +1,296 @@
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
2 changes: 0 additions & 2 deletions activerecord/test/cases/sqlite_rake_test.rb
@@ -1,8 +1,6 @@
require 'cases/helper' require 'cases/helper'
require 'pathname' require 'pathname'


module Rails; end unless defined?(Rails)

module ActiveRecord module ActiveRecord
class SqliteDBCreateTest < ActiveRecord::TestCase class SqliteDBCreateTest < ActiveRecord::TestCase
def setup def setup
Expand Down

0 comments on commit 8d5710c

Please sign in to comment.