diff --git a/NEWS.md b/NEWS.md index a61f8fcdc..862aad1d6 100644 --- a/NEWS.md +++ b/NEWS.md @@ -18,6 +18,7 @@ Unreleased * Introduce `suspenders:prerequisites` generator * Introduce `suspenders:ci` generator * Introduce `suspenders:cleanup:organize_gemfile` task +* Introduce `suspenders:test:environment` generator 20230113.0 (January, 13, 2023) diff --git a/README.md b/README.md index 717ae40c1..d9bce0888 100644 --- a/README.md +++ b/README.md @@ -197,6 +197,22 @@ Creates CI files for GitHub Actions. bin/rails g suspenders:ci ``` +### Environments + +#### Test + +Configures test environment. + +``` +bin/rails g suspenders:test:environment +``` + +- Enables [raise_on_missing_translations][] +- Disables [action_dispatch.show_exceptions][] + +[raise_on_missing_translations]: https://guides.rubyonrails.org/configuring.html#config-i18n-raise-on-missing-translations +[action_dispatch.show_exceptions]: https://edgeguides.rubyonrails.org/configuring.html#config-action-dispatch-show-exceptions + ## Contributing See the [CONTRIBUTING] document. diff --git a/lib/generators/suspenders/test/environment_generator.rb b/lib/generators/suspenders/test/environment_generator.rb new file mode 100644 index 000000000..e52b67d73 --- /dev/null +++ b/lib/generators/suspenders/test/environment_generator.rb @@ -0,0 +1,32 @@ +module Suspenders + module Generators + module Test + class EnvironmentGenerator < Rails::Generators::Base + desc <<~MARKDOWN + Configures test environment. + + ``` + bin/rails g suspenders:test:environment + ``` + + - Enables [raise_on_missing_translations][] + - Disables [action_dispatch.show_exceptions][] + + [raise_on_missing_translations]: https://guides.rubyonrails.org/configuring.html#config-i18n-raise-on-missing-translations + [action_dispatch.show_exceptions]: https://edgeguides.rubyonrails.org/configuring.html#config-action-dispatch-show-exceptions + MARKDOWN + + def raise_on_missing_translations + uncomment_lines "config/environments/test.rb", /config\.i18n\.raise_on_missing_translations\s*=\s*true/ + end + + def disable_action_dispatch_show_exceptions + gsub_file "config/environments/test.rb", /^\s*config\.action_dispatch\.show_exceptions\s*=\s*:rescuable/, + "config.action_dispatch.show_exceptions = :none" + + gsub_file "config/environments/test.rb", /^\s*#\s*Raise exceptions instead of rendering exception templates/i, "" + end + end + end + end +end diff --git a/test/generators/suspenders/test/environment_generator_test.rb b/test/generators/suspenders/test/environment_generator_test.rb new file mode 100644 index 000000000..41bccf968 --- /dev/null +++ b/test/generators/suspenders/test/environment_generator_test.rb @@ -0,0 +1,45 @@ +require "test_helper" +require "generators/suspenders/test/environment_generator" + +module Suspenders + module Generators + module Test + class EnvironmentGeneratorTest < Rails::Generators::TestCase + include Suspenders::TestHelpers + + tests Suspenders::Generators::Test::EnvironmentGenerator + destination Rails.root + setup :prepare_destination + teardown :restore_destination + + test "raise on missing translations" do + run_generator + + assert_file app_root("config/environments/test.rb") do |file| + assert_match(/^\s*config\.i18n\.raise_on_missing_translations\s*=\s*true/, file) + end + end + + test "disable action_dispatch.show_exceptions" do + run_generator + + assert_file app_root("config/environments/test.rb") do |file| + assert_match(/^\s*config\.action_dispatch\.show_exceptions\s*=\s*:none/, file) + assert_no_match(/^\s*config\.action_dispatch\.show_exceptions\s*=\s*:rescuable/, file) + assert_no_match(/^\s*#\s*Raise exceptions instead of rendering exception templates/i, file) + end + end + + private + + def prepare_destination + backup_file "config/environments/test.rb" + end + + def restore_destination + restore_file "config/environments/test.rb" + end + end + end + end +end