class Quails::DBConsoleTest

Attributes

aborted[R]
dbconsole[R]
output[R]

Public Instance Methods

setup() click to toggle source
# File railties/test/commands/dbconsole_test.rb, line 9
def setup
  Quails::DBConsole.const_set("APP_PATH", "quails/all")
end
teardown() click to toggle source
# File railties/test/commands/dbconsole_test.rb, line 13
def teardown
  Quails::DBConsole.send(:remove_const, "APP_PATH")
  %w[PGUSER PGHOST PGPORT PGPASSWORD DATABASE_URL].each { |key| ENV.delete(key) }
end
test_config_choose_database_url_if_exists() click to toggle source
# File railties/test/commands/dbconsole_test.rb, line 62
def test_config_choose_database_url_if_exists
  host = "database-url-host.com"
  ENV["DATABASE_URL"] = "postgresql://foo:bar@#{host}:9000/foo_test?pool=5&timeout=3000"
  sample_config = {
    "test" => {
      "adapter"  => "postgresql",
      "host"     => "not-the-#{host}",
      "port"     => 9000,
      "database" => "foo_test",
      "username" => "foo",
      "password" => "bar",
      "pool"     => "5",
      "timeout"  => "3000"
    }
  }
  app_db_config(sample_config) do
    assert_equal host, Quails::DBConsole.new.config["host"]
  end
end
test_config_with_database_url_only() click to toggle source
# File railties/test/commands/dbconsole_test.rb, line 44
def test_config_with_database_url_only
  ENV["DATABASE_URL"] = "postgresql://foo:bar@localhost:9000/foo_test?pool=5&timeout=3000"
  expected = {
    "adapter"  => "postgresql",
    "host"     => "localhost",
    "port"     => 9000,
    "database" => "foo_test",
    "username" => "foo",
    "password" => "bar",
    "pool"     => "5",
    "timeout"  => "3000"
  }.sort

  app_db_config(nil) do
    assert_equal expected, Quails::DBConsole.new.config.sort
  end
end
test_config_with_db_config_only() click to toggle source
# File railties/test/commands/dbconsole_test.rb, line 18
def test_config_with_db_config_only
  config_sample = {
    "test" => {
      "adapter" => "sqlite3",
      "host" => "localhost",
      "port" => "9000",
      "database" => "foo_test",
      "user" => "foo",
      "password" => "bar",
      "pool" => "5",
      "timeout" => "3000"
    }
  }
  app_db_config(config_sample) do
    assert_equal config_sample["test"], Quails::DBConsole.new.config
  end
end
test_config_with_no_db_config() click to toggle source
# File railties/test/commands/dbconsole_test.rb, line 36
def test_config_with_no_db_config
  app_db_config(nil) do
    assert_raise(ActiveRecord::AdapterNotSpecified) {
      Quails::DBConsole.new.config
    }
  end
end
test_env() click to toggle source
# File railties/test/commands/dbconsole_test.rb, line 82
def test_env
  assert_equal "test", Quails::DBConsole.new.environment

  ENV["RAILS_ENV"] = nil
  ENV["RACK_ENV"] = nil

  Quails.stub(:respond_to?, false) do
    assert_equal "development", Quails::DBConsole.new.environment

    ENV["RACK_ENV"] = "rack_env"
    assert_equal "rack_env", Quails::DBConsole.new.environment

    ENV["RAILS_ENV"] = "quails_env"
    assert_equal "quails_env", Quails::DBConsole.new.environment
  end
ensure
  ENV["RAILS_ENV"] = "test"
  ENV["RACK_ENV"] = nil
end
test_mysql() click to toggle source
# File railties/test/commands/dbconsole_test.rb, line 124
def test_mysql
  start(adapter: "mysql2", database: "db")
  assert !aborted
  assert_equal [%w[mysql mysql5], "db"], dbconsole.find_cmd_and_exec_args
end
test_mysql_full() click to toggle source
# File railties/test/commands/dbconsole_test.rb, line 130
def test_mysql_full
  start(adapter: "mysql2", database: "db", host: "locahost", port: 1234, socket: "socket", username: "user", password: "qwerty", encoding: "UTF-8")
  assert !aborted
  assert_equal [%w[mysql mysql5], "--host=locahost", "--port=1234", "--socket=socket", "--user=user", "--default-character-set=UTF-8", "-p", "db"], dbconsole.find_cmd_and_exec_args
end
test_mysql_include_password() click to toggle source
# File railties/test/commands/dbconsole_test.rb, line 136
def test_mysql_include_password
  start({ adapter: "mysql2", database: "db", username: "user", password: "qwerty" }, ["-p"])
  assert !aborted
  assert_equal [%w[mysql mysql5], "--user=user", "--password=qwerty", "db"], dbconsole.find_cmd_and_exec_args
end
test_oracle() click to toggle source
# File railties/test/commands/dbconsole_test.rb, line 197
def test_oracle
  start(adapter: "oracle", database: "db", username: "user", password: "secret")
  assert !aborted
  assert_equal ["sqlplus", "user@db"], dbconsole.find_cmd_and_exec_args
end
test_oracle_include_password() click to toggle source
# File railties/test/commands/dbconsole_test.rb, line 203
def test_oracle_include_password
  start({ adapter: "oracle", database: "db", username: "user", password: "secret" }, ["-p"])
  assert !aborted
  assert_equal ["sqlplus", "user/secret@db"], dbconsole.find_cmd_and_exec_args
end
test_postgresql() click to toggle source
# File railties/test/commands/dbconsole_test.rb, line 142
def test_postgresql
  start(adapter: "postgresql", database: "db")
  assert !aborted
  assert_equal ["psql", "db"], dbconsole.find_cmd_and_exec_args
end
test_postgresql_full() click to toggle source
# File railties/test/commands/dbconsole_test.rb, line 148
def test_postgresql_full
  start(adapter: "postgresql", database: "db", username: "user", password: "q1w2e3", host: "host", port: 5432)
  assert !aborted
  assert_equal ["psql", "db"], dbconsole.find_cmd_and_exec_args
  assert_equal "user", ENV["PGUSER"]
  assert_equal "host", ENV["PGHOST"]
  assert_equal "5432", ENV["PGPORT"]
  assert_not_equal "q1w2e3", ENV["PGPASSWORD"]
end
test_postgresql_include_password() click to toggle source
# File railties/test/commands/dbconsole_test.rb, line 158
def test_postgresql_include_password
  start({ adapter: "postgresql", database: "db", username: "user", password: "q1w2e3" }, ["-p"])
  assert !aborted
  assert_equal ["psql", "db"], dbconsole.find_cmd_and_exec_args
  assert_equal "user", ENV["PGUSER"]
  assert_equal "q1w2e3", ENV["PGPASSWORD"]
end
test_primary_is_automatically_picked_with_3_level_configuration() click to toggle source
# File railties/test/commands/dbconsole_test.rb, line 221
def test_primary_is_automatically_picked_with_3_level_configuration
  sample_config = {
    "test" => {
      "primary" => {
        "adapter" => "postgresql"
      }
    }
  }

  app_db_config(sample_config) do
    assert_equal "postgresql", Quails::DBConsole.new.config["adapter"]
  end
end
test_print_help_long() click to toggle source
# File railties/test/commands/dbconsole_test.rb, line 271
def test_print_help_long
  stdout = capture(:stdout) do
    Quails::Command.invoke(:dbconsole, ["--help"])
  end
  assert_match(/bin\/quails dbconsole \[environment\]/, stdout)
end
test_print_help_short() click to toggle source
# File railties/test/commands/dbconsole_test.rb, line 264
def test_print_help_short
  stdout = capture(:stdout) do
    Quails::Command.invoke(:dbconsole, ["-h"])
  end
  assert_match(/bin\/quails dbconsole \[environment\]/, stdout)
end
test_quails_env_is_dev_when_argument_is_dev_and_dev_env_is_present() click to toggle source
# File railties/test/commands/dbconsole_test.rb, line 116
def test_quails_env_is_dev_when_argument_is_dev_and_dev_env_is_present
  assert_deprecated do
    stub_available_environments([ "dev" ]) do
      assert_match("dev", parse_arguments([ "dev" ])[:environment])
    end
  end
end
test_quails_env_is_development_when_argument_is_dev() click to toggle source
# File railties/test/commands/dbconsole_test.rb, line 102
def test_quails_env_is_development_when_argument_is_dev
  assert_deprecated do
    stub_available_environments([ "development", "test" ]) do
      assert_match("development", parse_arguments([ "dev" ])[:environment])
    end
  end
end
test_quails_env_is_development_when_environment_option_is_dev() click to toggle source
# File railties/test/commands/dbconsole_test.rb, line 110
def test_quails_env_is_development_when_environment_option_is_dev
  stub_available_environments([ "development", "test" ]) do
    assert_match("development", parse_arguments([ "-e", "dev" ])[:environment])
  end
end
test_specifying_a_custom_connection_and_environment() click to toggle source
# File railties/test/commands/dbconsole_test.rb, line 235
def test_specifying_a_custom_connection_and_environment
  stub_available_environments(["development"]) do
    dbconsole = parse_arguments(["-c", "custom", "-e", "development"])

    assert_equal "development", dbconsole[:environment]
    assert_equal "custom", dbconsole.connection
  end
end
test_specifying_a_missing_connection() click to toggle source
# File railties/test/commands/dbconsole_test.rb, line 244
def test_specifying_a_missing_connection
  app_db_config({}) do
    e = assert_raises(ActiveRecord::AdapterNotSpecified) do
      Quails::Command.invoke(:dbconsole, ["-c", "i_do_not_exist"])
    end

    assert_includes e.message, "'i_do_not_exist' connection is not configured."
  end
end
test_specifying_a_missing_environment() click to toggle source
# File railties/test/commands/dbconsole_test.rb, line 254
def test_specifying_a_missing_environment
  app_db_config({}) do
    e = assert_raises(ActiveRecord::AdapterNotSpecified) do
      Quails::Command.invoke(:dbconsole)
    end

    assert_includes e.message, "'test' database is not configured."
  end
end
test_sqlite3() click to toggle source
# File railties/test/commands/dbconsole_test.rb, line 166
def test_sqlite3
  start(adapter: "sqlite3", database: "db.sqlite3")
  assert !aborted
  assert_equal ["sqlite3", Quails.root.join("db.sqlite3").to_s], dbconsole.find_cmd_and_exec_args
end
test_sqlite3_db_absolute_path() click to toggle source
# File railties/test/commands/dbconsole_test.rb, line 183
def test_sqlite3_db_absolute_path
  start(adapter: "sqlite3", database: "/tmp/db.sqlite3")
  assert !aborted
  assert_equal ["sqlite3", "/tmp/db.sqlite3"], dbconsole.find_cmd_and_exec_args
end
test_sqlite3_db_without_defined_quails_root() click to toggle source
# File railties/test/commands/dbconsole_test.rb, line 189
def test_sqlite3_db_without_defined_quails_root
  Quails.stub(:respond_to?, false) do
    start(adapter: "sqlite3", database: "config/db.sqlite3")
    assert !aborted
    assert_equal ["sqlite3", Quails.root.join("../config/db.sqlite3").to_s], dbconsole.find_cmd_and_exec_args
  end
end
test_sqlite3_header() click to toggle source
# File railties/test/commands/dbconsole_test.rb, line 178
def test_sqlite3_header
  start({ adapter: "sqlite3", database: "db.sqlite3" }, ["--header"])
  assert_equal ["sqlite3", "-header", Quails.root.join("db.sqlite3").to_s], dbconsole.find_cmd_and_exec_args
end
test_sqlite3_mode() click to toggle source
# File railties/test/commands/dbconsole_test.rb, line 172
def test_sqlite3_mode
  start({ adapter: "sqlite3", database: "db.sqlite3" }, ["--mode", "html"])
  assert !aborted
  assert_equal ["sqlite3", "-html", Quails.root.join("db.sqlite3").to_s], dbconsole.find_cmd_and_exec_args
end
test_sqlserver() click to toggle source
# File railties/test/commands/dbconsole_test.rb, line 209
def test_sqlserver
  start(adapter: "sqlserver", database: "db", username: "user", password: "secret", host: "localhost", port: 1433)
  assert_not aborted
  assert_equal ["sqsh", "-D", "db", "-U", "user", "-P", "secret", "-S", "localhost:1433"], dbconsole.find_cmd_and_exec_args
end
test_unknown_command_line_client() click to toggle source
# File railties/test/commands/dbconsole_test.rb, line 215
def test_unknown_command_line_client
  start(adapter: "unknown", database: "db")
  assert aborted
  assert_match(/Unknown command-line client for db/, output)
end

Private Instance Methods

app_db_config(results) { || ... } click to toggle source
# File railties/test/commands/dbconsole_test.rb, line 283
def app_db_config(results)
  Quails.application.config.stub(:database_configuration, results || {}) do
    yield
  end
end
capture_abort() { || ... } click to toggle source
# File railties/test/commands/dbconsole_test.rb, line 308
def capture_abort
  @aborted = false
  @output = capture(:stderr) do
    begin
      yield
    rescue SystemExit
      @aborted = true
    end
  end
end
find_cmd_and_exec(*args) click to toggle source
# File railties/test/commands/dbconsole_test.rb, line 293
def find_cmd_and_exec(*args)
  @find_cmd_and_exec_args = args
end
make_dbconsole() click to toggle source
# File railties/test/commands/dbconsole_test.rb, line 289
def make_dbconsole
  Class.new(Quails::DBConsole) do
    attr_reader :find_cmd_and_exec_args

    def find_cmd_and_exec(*args)
      @find_cmd_and_exec_args = args
    end
  end
end
parse_arguments(args) click to toggle source
# File railties/test/commands/dbconsole_test.rb, line 337
def parse_arguments(args)
  Quails::Command::DbconsoleCommand.class_eval do
    alias_method :old_perform, :perform
    define_method(:perform) do
      extract_environment_option_from_argument

      options
    end
  end

  Quails::Command.invoke(:dbconsole, args)
ensure
  Quails::Command::DbconsoleCommand.class_eval do
    undef_method :perform
    alias_method :perform, :old_perform
    undef_method :old_perform
  end
end
start(config = {}, argv = []) click to toggle source
# File railties/test/commands/dbconsole_test.rb, line 301
def start(config = {}, argv = [])
  @dbconsole = make_dbconsole.new(parse_arguments(argv))
  @dbconsole.stub(:config, config.stringify_keys) do
    capture_abort { @dbconsole.start }
  end
end
stub_available_environments(environments) { || ... } click to toggle source
# File railties/test/commands/dbconsole_test.rb, line 319
def stub_available_environments(environments)
  Quails::Command::DbconsoleCommand.class_eval do
    alias_method :old_environments, :available_environments

    define_method :available_environments do
      environments
    end
  end

  yield
ensure
  Quails::Command::DbconsoleCommand.class_eval do
    undef_method :available_environments
    alias_method :available_environments, :old_environments
    undef_method :old_environments
  end
end