aboutsummaryrefslogblamecommitdiffstats
path: root/activerecord/test/cases/database_tasks_test.rb
blob: a5329073ed6041cfe09be7af2a51fa43f30dca5f (plain) (tree)











































































































                                                                                                        


                                                          


                                                        


                                                               




                                                          


                                                        


                                                             



                                                                           


                                                        










































































































                                                                                                        


                                                        


                                                       


                                                               




                                                        


                                                        




































                                                                                

































                                                                                
   
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
      ActiveRecord::Tasks::DatabaseTasks.expects(:create).
        with('database' => 'prod-db')

      ActiveRecord::Tasks::DatabaseTasks.create_current(
        ActiveSupport::StringInquirer.new('production')
      )
    end

    def test_creates_test_database_when_environment_is_database
      ActiveRecord::Tasks::DatabaseTasks.expects(:create).
        with('database' => 'dev-db')
      ActiveRecord::Tasks::DatabaseTasks.expects(:create).
        with('database' => 'test-db')

      ActiveRecord::Tasks::DatabaseTasks.create_current(
        ActiveSupport::StringInquirer.new('development')
      )
    end

    def test_establishes_connection_for_the_given_environment
      ActiveRecord::Tasks::DatabaseTasks.stubs(:create).returns true

      ActiveRecord::Base.expects(:establish_connection).with('development')

      ActiveRecord::Tasks::DatabaseTasks.create_current(
        ActiveSupport::StringInquirer.new('development')
      )
    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
      ActiveRecord::Tasks::DatabaseTasks.expects(:drop).
        with('database' => 'prod-db')

      ActiveRecord::Tasks::DatabaseTasks.drop_current(
        ActiveSupport::StringInquirer.new('production')
      )
    end

    def test_creates_test_database_when_environment_is_database
      ActiveRecord::Tasks::DatabaseTasks.expects(:drop).
        with('database' => 'dev-db')
      ActiveRecord::Tasks::DatabaseTasks.expects(:drop).
        with('database' => 'test-db')

      ActiveRecord::Tasks::DatabaseTasks.drop_current(
        ActiveSupport::StringInquirer.new('development')
      )
    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

  class DatabaseTasksCharsetTest < 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_charset
      @mysql_tasks.expects(:charset)

      ActiveRecord::Tasks::DatabaseTasks.charset 'adapter' => 'mysql'
    end

    def test_mysql2_charset
      @mysql_tasks.expects(:charset)

      ActiveRecord::Tasks::DatabaseTasks.charset 'adapter' => 'mysql2'
    end

    def test_postgresql_charset
      @postgresql_tasks.expects(:charset)

      ActiveRecord::Tasks::DatabaseTasks.charset 'adapter' => 'postgresql'
    end

    def test_sqlite_charset
      @sqlite_tasks.expects(:charset)

      ActiveRecord::Tasks::DatabaseTasks.charset 'adapter' => 'sqlite3'
    end
  end
end