aboutsummaryrefslogtreecommitdiffstats
path: root/railties/test/commands/db_system_change_test.rb
blob: 2ff45a7878a1266176fba285fd10c116f5986c85 (plain) (blame)
1
2
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
# frozen_string_literal: true

require "isolation/abstract_unit"
require "rails/command"
require "rails/commands/db/system/change/change_command"

class Rails::Command::Db::System::ChangeCommandTest < ActiveSupport::TestCase
  include ActiveSupport::Testing::Isolation

  setup { build_app }

  teardown { teardown_app }

  test "change to existing database" do
    change_database(to: "sqlite3")

    output = change_database(to: "sqlite3")

    assert_match "identical  config/database.yml", output
    assert_match "gsub  Gemfile", output
  end

  test "change to invalid database" do
    output = change_database(to: "invalid-db")

    assert_match <<~MSG.squish, output
      Invalid value for --to option.
      Supported preconfigurations are:
      mysql, postgresql, sqlite3, oracle, frontbase,
      ibm_db, sqlserver, jdbcmysql, jdbcsqlite3,
      jdbcpostgresql, jdbc.
    MSG
  end

  test "change to postgresql" do
    output = change_database(to: "postgresql")

    assert_match "force  config/database.yml", output
    assert_match "gsub  Gemfile", output
  end

  test "change to mysql" do
    output = change_database(to: "mysql")

    assert_match "force  config/database.yml", output
    assert_match "gsub  Gemfile", output
  end

  test "change to sqlite3" do
    change_database(to: "postgresql")
    output = change_database(to: "sqlite3")

    assert_match "force  config/database.yml", output
    assert_match "gsub  Gemfile", output
  end

  private
    def change_database(to:, **options)
      args = ["--to", to]
      rails "db:system:change", args, **options
    end
end