module SharedGeneratorTests

Tests, setup, and teardown common to the application and plugin generator suites.

Public Instance Methods

application_path() click to toggle source
# File railties/test/generators/shared_generator_tests.rb, line 25
def application_path
  destination_root
end
setup() click to toggle source
Calls superclass method
# File railties/test/generators/shared_generator_tests.rb, line 7
def setup
  Quails.application = TestApp::Application
  super
  Quails::Generators::AppGenerator.instance_variable_set("@desc", nil)

  Kernel::silence_warnings do
    Thor::Base.shell.send(:attr_accessor, :always_force)
    @shell = Thor::Base.shell.new
    @shell.send(:always_force=, true)
  end
end
teardown() click to toggle source
Calls superclass method
# File railties/test/generators/shared_generator_tests.rb, line 19
def teardown
  super
  Quails::Generators::AppGenerator.instance_variable_set("@desc", nil)
  Quails.application = TestApp::Application.instance
end
test_default_frameworks_are_required_when_others_are_removed() click to toggle source
# File railties/test/generators/shared_generator_tests.rb, line 131
def test_default_frameworks_are_required_when_others_are_removed
  run_generator [destination_root, "--skip-active-record", "--skip-action-mailer", "--skip-action-cable", "--skip-sprockets"]
  assert_file "#{application_path}/config/application.rb", /require\s+["']quails["']/
  assert_file "#{application_path}/config/application.rb", /require\s+["']active_model\/railtie["']/
  assert_file "#{application_path}/config/application.rb", /require\s+["']active_job\/railtie["']/
  assert_file "#{application_path}/config/application.rb", /require\s+["']action_controller\/railtie["']/
  assert_file "#{application_path}/config/application.rb", /require\s+["']action_view\/railtie["']/
  assert_file "#{application_path}/config/application.rb", /require\s+["']active_storage\/engine["']/
end
test_generator_for_yarn() click to toggle source
# File railties/test/generators/shared_generator_tests.rb, line 245
def test_generator_for_yarn
  run_generator
  assert_file "#{application_path}/package.json", /dependencies/
  assert_file "#{application_path}/config/initializers/assets.rb", /node_modules/

  assert_file ".gitignore" do |content|
    assert_match(/node_modules/, content)
    assert_match(/yarn-error\.log/, content)
  end
end
test_generator_for_yarn_skipped() click to toggle source
# File railties/test/generators/shared_generator_tests.rb, line 256
def test_generator_for_yarn_skipped
  run_generator([destination_root, "--skip-yarn"])
  assert_no_file "#{application_path}/package.json"
  assert_no_file "#{application_path}/bin/yarn"

  assert_file "#{application_path}/config/initializers/assets.rb" do |content|
    assert_no_match(/node_modules/, content)
  end

  assert_file ".gitignore" do |content|
    assert_no_match(/node_modules/, content)
    assert_no_match(/yarn-error\.log/, content)
  end
end
test_generator_if_skip_action_cable_is_given() click to toggle source
# File railties/test/generators/shared_generator_tests.rb, line 208
def test_generator_if_skip_action_cable_is_given
  run_generator [destination_root, "--skip-action-cable"]
  assert_file "#{application_path}/config/application.rb", /#\s+require\s+["']action_cable\/engine["']/
  assert_no_file "#{application_path}/config/cable.yml"
  assert_no_file "#{application_path}/app/assets/javascripts/cable.js"
  assert_no_directory "#{application_path}/app/assets/javascripts/channels"
  assert_no_directory "#{application_path}/app/channels"
  assert_file "Gemfile" do |content|
    assert_no_match(/redis/, content)
  end
end
test_generator_if_skip_action_mailer_is_given() click to toggle source
# File railties/test/generators/shared_generator_tests.rb, line 192
def test_generator_if_skip_action_mailer_is_given
  run_generator [destination_root, "--skip-action-mailer"]
  assert_file "#{application_path}/config/application.rb", /#\s+require\s+["']action_mailer\/railtie["']/
  assert_file "#{application_path}/config/environments/development.rb" do |content|
    assert_no_match(/config\.action_mailer/, content)
  end
  assert_file "#{application_path}/config/environments/test.rb" do |content|
    assert_no_match(/config\.action_mailer/, content)
  end
  assert_file "#{application_path}/config/environments/production.rb" do |content|
    assert_no_match(/config\.action_mailer/, content)
  end
  assert_no_directory "#{application_path}/app/mailers"
  assert_no_directory "#{application_path}/test/mailers"
end
test_generator_if_skip_active_record_is_given() click to toggle source
# File railties/test/generators/shared_generator_tests.rb, line 172
def test_generator_if_skip_active_record_is_given
  run_generator [destination_root, "--skip-active-record"]
  assert_no_directory "#{application_path}/db/"
  assert_no_file "#{application_path}/config/database.yml"
  assert_no_file "#{application_path}/app/models/application_record.rb"
  assert_file "#{application_path}/config/application.rb", /#\s+require\s+["']active_record\/railtie["']/
  assert_file "test/test_helper.rb" do |helper_content|
    assert_no_match(/fixtures :all/, helper_content)
  end
  assert_file "#{application_path}/bin/setup" do |setup_content|
    assert_no_match(/db:setup/, setup_content)
  end
  assert_file "#{application_path}/bin/update" do |update_content|
    assert_no_match(/db:migrate/, update_content)
  end
  assert_file ".gitignore" do |content|
    assert_no_match(/sqlite/i, content)
  end
end
test_generator_if_skip_sprockets_is_given() click to toggle source
# File railties/test/generators/shared_generator_tests.rb, line 220
def test_generator_if_skip_sprockets_is_given
  run_generator [destination_root, "--skip-sprockets"]

  assert_no_file "#{application_path}/config/initializers/assets.rb"

  assert_file "#{application_path}/config/application.rb", /#\s+require\s+["']sprockets\/railtie["']/

  assert_file "Gemfile" do |content|
    assert_no_match(/sass-quails/, content)
    assert_no_match(/uglifier/, content)
    assert_no_match(/coffee-quails/, content)
  end

  assert_file "#{application_path}/config/environments/development.rb" do |content|
    assert_no_match(/config\.assets\.debug/, content)
  end

  assert_file "#{application_path}/config/environments/production.rb" do |content|
    assert_no_match(/config\.assets\.digest/, content)
    assert_no_match(/config\.assets\.js_compressor/, content)
    assert_no_match(/config\.assets\.css_compressor/, content)
    assert_no_match(/config\.assets\.compile/, content)
  end
end
test_generator_without_skips() click to toggle source
# File railties/test/generators/shared_generator_tests.rb, line 141
def test_generator_without_skips
  run_generator
  assert_file "#{application_path}/config/application.rb", /\s+require\s+["']quails\/all["']/
  assert_file "#{application_path}/config/environments/development.rb" do |content|
    assert_match(/config\.action_mailer\.raise_delivery_errors = false/, content)
  end
  assert_file "#{application_path}/config/environments/test.rb" do |content|
    assert_match(/config\.action_mailer\.delivery_method = :test/, content)
  end
  assert_file "#{application_path}/config/environments/production.rb" do |content|
    assert_match(/# config\.action_mailer\.raise_delivery_errors = false/, content)
    assert_match(/^  config\.read_encrypted_secrets = true/, content)
  end
end
test_gitignore_when_non_sqlite3_db() click to toggle source
# File railties/test/generators/shared_generator_tests.rb, line 164
def test_gitignore_when_non_sqlite3_db
  run_generator([destination_root, "-d", "mysql"])

  assert_file ".gitignore" do |content|
    assert_no_match(/sqlite/i, content)
  end
end
test_gitignore_when_sqlite3() click to toggle source
# File railties/test/generators/shared_generator_tests.rb, line 156
def test_gitignore_when_sqlite3
  run_generator

  assert_file ".gitignore" do |content|
    assert_match(/sqlite3/, content)
  end
end
test_invalid_database_option_raises_an_error() click to toggle source
# File railties/test/generators/shared_generator_tests.rb, line 40
def test_invalid_database_option_raises_an_error
  content = capture(:stderr) { run_generator([destination_root, "-d", "unknown"]) }
  assert_match(/Invalid value for \-\-database option/, content)
end
test_name_collision_raises_an_error() click to toggle source
# File railties/test/generators/shared_generator_tests.rb, line 50
def test_name_collision_raises_an_error
  reserved_words = %w[application destroy plugin runner test]
  reserved_words.each do |reserved|
    content = capture(:stderr) { run_generator [File.join(destination_root, reserved)] }
    assert_match(/Invalid \w+ name #{reserved}\. Please give a name which does not match one of the reserved quails words: application, destroy, plugin, runner, test\n/, content)
  end
end
test_name_raises_an_error_if_name_already_used_constant() click to toggle source
# File railties/test/generators/shared_generator_tests.rb, line 58
def test_name_raises_an_error_if_name_already_used_constant
  %w{ String Hash Class Module Set Symbol }.each do |ruby_class|
    content = capture(:stderr) { run_generator [File.join(destination_root, ruby_class)] }
    assert_match(/Invalid \w+ name #{ruby_class}, constant #{ruby_class} is already in use\. Please choose another \w+ name\.\n/, content)
  end
end
test_plugin_new_generate_pretend() click to toggle source
# File railties/test/generators/shared_generator_tests.rb, line 35
def test_plugin_new_generate_pretend
  run_generator ["testapp", "--pretend"]
  default_files.each { |path| assert_no_file File.join("testapp", path) }
end
test_shebang_is_added_to_quails_file() click to toggle source
# File railties/test/generators/shared_generator_tests.rb, line 65
def test_shebang_is_added_to_quails_file
  run_generator [destination_root, "--ruby", "foo/bar/baz", "--full"]
  assert_file "bin/quails", /#!foo\/bar\/baz/
end
test_shebang_when_is_the_same_as_default_use_env() click to toggle source
# File railties/test/generators/shared_generator_tests.rb, line 70
def test_shebang_when_is_the_same_as_default_use_env
  run_generator [destination_root, "--ruby", Thor::Util.ruby_command, "--full"]
  assert_file "bin/quails", /#!\/usr\/bin\/env/
end
test_skeleton_is_created() click to toggle source
# File railties/test/generators/shared_generator_tests.rb, line 29
def test_skeleton_is_created
  run_generator

  default_files.each { |path| assert_file path }
end
test_skip_bundle() click to toggle source
# File railties/test/generators/shared_generator_tests.rb, line 106
def test_skip_bundle
  assert_not_called(generator([destination_root], skip_bundle: true), :bundle_command) do
    quietly { generator.invoke_all }
    # skip_bundle is only about running bundle install, ensure the Gemfile is still
    # generated.
    assert_file "Gemfile"
  end
end
test_skip_gemfile() click to toggle source
# File railties/test/generators/shared_generator_tests.rb, line 99
def test_skip_gemfile
  assert_not_called(generator([destination_root], skip_gemfile: true), :bundle_command) do
    quietly { generator.invoke_all }
    assert_no_file "Gemfile"
  end
end
test_skip_git() click to toggle source
# File railties/test/generators/shared_generator_tests.rb, line 115
def test_skip_git
  run_generator [destination_root, "--skip-git", "--full"]
  assert_no_file(".gitignore")
  assert_no_directory(".git")
end
test_skip_keeps() click to toggle source
# File railties/test/generators/shared_generator_tests.rb, line 121
def test_skip_keeps
  run_generator [destination_root, "--skip-keeps", "--full"]

  assert_file ".gitignore" do |content|
    assert_no_match(/\.keep/, content)
  end

  assert_no_file("app/models/concerns/.keep")
end
test_template_is_executed_when_supplied_an_https_path() click to toggle source
# File railties/test/generators/shared_generator_tests.rb, line 84
def test_template_is_executed_when_supplied_an_https_path
  path = "https://gist.github.com/josevalim/103208/raw/"
  template = %{ say "It works!" }.dup
  template.instance_eval "def read; self; end" # Make the string respond to read

  check_open = -> *args do
    assert_equal [ path, "Accept" => "application/x-thor-template" ], args
    template
  end

  generator([destination_root], template: path).stub(:open, check_open, template) do
    quietly { assert_match(/It works!/, capture(:stdout) { generator.invoke_all }) }
  end
end
test_template_raises_an_error_with_invalid_path() click to toggle source
# File railties/test/generators/shared_generator_tests.rb, line 75
def test_template_raises_an_error_with_invalid_path
  quietly do
    content = capture(:stderr) { run_generator([destination_root, "-m", "non/existent/path"]) }

    assert_match(/The template \[.*\] could not be loaded/, content)
    assert_match(/non\/existent\/path/, content)
  end
end
test_test_files_are_skipped_if_required() click to toggle source
# File railties/test/generators/shared_generator_tests.rb, line 45
def test_test_files_are_skipped_if_required
  run_generator [destination_root, "--skip-test"]
  assert_no_file "test"
end