mysql_rake_test.rb 6.6 KB
Newer Older
1
require 'cases/helper'
P
Pat Allan 已提交
2
require 'mysql'
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118

module ActiveRecord
  class MysqlDBCreateTest < ActiveRecord::TestCase
    def setup
      @connection    = stub(:create_database => true)
      @configuration = {
        'adapter'  => 'mysql',
        'database' => 'my-app-db'
      }

      ActiveRecord::Base.stubs(:connection).returns(@connection)
      ActiveRecord::Base.stubs(:establish_connection).returns(true)
    end

    def test_establishes_connection_without_database
      ActiveRecord::Base.expects(:establish_connection).
        with('adapter' => 'mysql', 'database' => nil)

      ActiveRecord::Tasks::DatabaseTasks.create @configuration
    end

    def test_creates_database_with_default_options
      @connection.expects(:create_database).
        with('my-app-db', {:charset => 'utf8', :collation => 'utf8_unicode_ci'})

      ActiveRecord::Tasks::DatabaseTasks.create @configuration
    end

    def test_creates_database_with_given_options
      @connection.expects(:create_database).
        with('my-app-db', {:charset => 'latin', :collation => 'latin_ci'})

      ActiveRecord::Tasks::DatabaseTasks.create @configuration.merge(
        'charset' => 'latin', 'collation' => 'latin_ci'
      )
    end

    def test_establishes_connection_to_database
      ActiveRecord::Base.expects(:establish_connection).with(@configuration)

      ActiveRecord::Tasks::DatabaseTasks.create @configuration
    end
  end

  class MysqlDBCreateAsRootTest < ActiveRecord::TestCase
    def setup
      @connection    = stub(:create_database => true, :execute => true)
      @error         = Mysql::Error.new "Invalid permissions"
      @configuration = {
        'adapter'  => 'mysql',
        'database' => 'my-app-db',
        'username' => 'pat',
        'password' => 'wossname'
      }

      $stdin.stubs(:gets).returns("secret\n")
      $stdout.stubs(:print).returns(nil)
      @error.stubs(:errno).returns(1045)
      ActiveRecord::Base.stubs(:connection).returns(@connection)
      ActiveRecord::Base.stubs(:establish_connection).raises(@error).then.
        returns(true)
    end

    def test_root_password_is_requested
      $stdin.expects(:gets).returns("secret\n")

      ActiveRecord::Tasks::DatabaseTasks.create @configuration
    end

    def test_connection_established_as_root
      ActiveRecord::Base.expects(:establish_connection).with({
        'adapter'  => 'mysql',
        'database' => nil,
        'username' => 'root',
        'password' => 'secret'
      })

      ActiveRecord::Tasks::DatabaseTasks.create @configuration
    end

    def test_database_created_by_root
      @connection.expects(:create_database).
        with('my-app-db', :charset => 'utf8', :collation => 'utf8_unicode_ci')

      ActiveRecord::Tasks::DatabaseTasks.create @configuration
    end

    def test_grant_privileges_for_normal_user
      @connection.expects(:execute).with("GRANT ALL PRIVILEGES ON my-app-db.* TO 'pat'@'localhost' IDENTIFIED BY 'wossname' WITH GRANT OPTION;")

      ActiveRecord::Tasks::DatabaseTasks.create @configuration
    end

    def test_connection_established_as_normal_user
      ActiveRecord::Base.expects(:establish_connection).returns do
        ActiveRecord::Base.expects(:establish_connection).with({
          'adapter'  => 'mysql',
          'database' => 'my-app-db',
          'username' => 'pat',
          'password' => 'secret'
        })

        raise @error
      end

      ActiveRecord::Tasks::DatabaseTasks.create @configuration
    end

    def test_sends_output_to_stderr_when_other_errors
      @error.stubs(:errno).returns(42)

      $stderr.expects(:puts).at_least_once.returns(nil)

      ActiveRecord::Tasks::DatabaseTasks.create @configuration
    end
  end
P
Pat Allan 已提交
119 120 121 122 123 124 125 126 127 128 129 130 131

  class MySQLDBDropTest < ActiveRecord::TestCase
    def setup
      @connection    = stub(:drop_database => true)
      @configuration = {
        'adapter'  => 'mysql',
        'database' => 'my-app-db'
      }

      ActiveRecord::Base.stubs(:connection).returns(@connection)
      ActiveRecord::Base.stubs(:establish_connection).returns(true)
    end

132
    def test_establishes_connection_to_mysql_database
P
Pat Allan 已提交
133 134 135 136 137 138 139 140 141 142 143 144
      ActiveRecord::Base.expects(:establish_connection).with @configuration

      ActiveRecord::Tasks::DatabaseTasks.drop @configuration
    end

    def test_drops_database
      @connection.expects(:drop_database).with('my-app-db')

      ActiveRecord::Tasks::DatabaseTasks.drop @configuration
    end
  end

145
  class MySQLPurgeTest < ActiveRecord::TestCase
P
Pat Allan 已提交
146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178
    def setup
      @connection    = stub(:recreate_database => true)
      @configuration = {
        'adapter'  => 'mysql',
        'database' => 'test-db'
      }

      ActiveRecord::Base.stubs(:connection).returns(@connection)
      ActiveRecord::Base.stubs(:establish_connection).returns(true)
    end

    def test_establishes_connection_to_test_database
      ActiveRecord::Base.expects(:establish_connection).with(:test)

      ActiveRecord::Tasks::DatabaseTasks.purge @configuration
    end

    def test_recreates_database_with_the_default_options
      @connection.expects(:recreate_database).
        with('test-db', {:charset => 'utf8', :collation => 'utf8_unicode_ci'})

      ActiveRecord::Tasks::DatabaseTasks.purge @configuration
    end

    def test_recreates_database_with_the_given_options
      @connection.expects(:recreate_database).
        with('test-db', {:charset => 'latin', :collation => 'latin_ci'})

      ActiveRecord::Tasks::DatabaseTasks.purge @configuration.merge(
        'charset' => 'latin', 'collation' => 'latin_ci'
      )
    end
  end
S
Simon Jefford 已提交
179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196

  class MysqlDBCharsetTest < ActiveRecord::TestCase
    def setup
      @connection    = stub(:create_database => true)
      @configuration = {
        'adapter'  => 'mysql',
        'database' => 'my-app-db'
      }

      ActiveRecord::Base.stubs(:connection).returns(@connection)
      ActiveRecord::Base.stubs(:establish_connection).returns(true)
    end

    def test_db_retrieves_charset
      @connection.expects(:charset)
      ActiveRecord::Tasks::DatabaseTasks.charset @configuration
    end
  end
K
kennyj 已提交
197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220

  class MySQLStructureDumpTest < ActiveRecord::TestCase
    def setup
      @connection    = stub(:structure_dump => true)
      @configuration = {
        'adapter'  => 'mysql',
        'database' => 'test-db'
      }

      ActiveRecord::Base.stubs(:connection).returns(@connection)
      ActiveRecord::Base.stubs(:establish_connection).returns(true)
    end

    def test_structure_dump
      filename = "awesome-file.sql"
      ActiveRecord::Base.expects(:establish_connection).with(@configuration)
      @connection.expects(:structure_dump)

      ActiveRecord::Tasks::DatabaseTasks.structure_dump(@configuration, filename)
      assert File.exists?(filename)
    ensure
      FileUtils.rm(filename)
    end
  end
S
Simon Jefford 已提交
221
end