# frozen_string_literal: true require "generators/generators_test_helper" require "rails/generators/rails/db/system/change/change_generator" module Rails module Generators module Db module System class ChangeGeneratorTest < Rails::Generators::TestCase include GeneratorsTestHelper setup do copy_gemfile( GemfileEntry.new("sqlite3", nil, "Use sqlite3 as the database for Active Record") ) end test "change to invalid database" do output = capture(:stderr) do run_generator ["--to", "invalid-db"] end 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 run_generator ["--to", "postgresql"] assert_file("config/database.yml") do |content| assert_match "adapter: postgresql", content assert_match "database: test_app", content end assert_file("Gemfile") do |content| assert_match "# Use pg as the database for Active Record", content assert_match "gem 'pg', '>= 0.18', '< 2.0'", content end end test "change to mysql" do run_generator ["--to", "mysql"] assert_file("config/database.yml") do |content| assert_match "adapter: mysql2", content assert_match "database: test_app", content end assert_file("Gemfile") do |content| assert_match "# Use mysql2 as the database for Active Record", content assert_match "gem 'mysql2', '>= 0.4.4'", content end end test "change to sqlite3" do run_generator ["--to", "sqlite3"] assert_file("config/database.yml") do |content| assert_match "adapter: sqlite3", content assert_match "db/development.sqlite3", content end assert_file("Gemfile") do |content| assert_match "# Use sqlite3 as the database for Active Record", content assert_match "gem 'sqlite3', '~> 1.4'", content end end test "change from versioned gem to other versioned gem" do run_generator ["--to", "sqlite3"] run_generator ["--to", "mysql", "--force"] assert_file("config/database.yml") do |content| assert_match "adapter: mysql2", content assert_match "database: test_app", content end assert_file("Gemfile") do |content| assert_match "# Use mysql2 as the database for Active Record", content assert_match "gem 'mysql2', '>= 0.4.4'", content end end end end end end end