Skip to content

Commit

Permalink
Merge pull request #2710 from rspec/fix-6-0
Browse files Browse the repository at this point in the history
Fix verify_mailer_preview_path on 6-0
  • Loading branch information
JonRowe authored Nov 14, 2023
2 parents e5943ed + 72f4a01 commit 1814538
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 13 deletions.
3 changes: 2 additions & 1 deletion example_app_generator/generate_app.rb
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,8 @@
# sqlite3 is an optional, unspecified, dependency and Rails 6.0 only supports `~> 1.4`
gsub_file "Gemfile", /.*gem..sqlite3.*/, "gem 'sqlite3', '~> 1.4'"

gsub_file "Gemfile", /.*chromedriver-helper.*/, "gem 'webdrivers'"
# remove webdrivers
gsub_file "Gemfile", /gem ['"]webdrivers['"]/, ""

if RUBY_ENGINE == "jruby"
gsub_file "Gemfile", /.*jdbc.*/, ''
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
if Rails.autoloaders.respond_to?(:main) && Rails.autoloaders.main.respond_to?(:ignore)
Rails.autoloaders.main.ignore('lib/rails/generators/in_memory/model/model_generator.rb')
end
13 changes: 10 additions & 3 deletions example_app_generator/spec/support/default_preview_path
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,12 @@ require_file_stub 'config/environment' do
module ExampleApp
class Application < Rails::Application
config.eager_load = false
if Rails::VERSION::STRING.to_f >= 7.0
config.active_support.cache_format_version = 7.0
end

# Don't care if the mailer can't send.
config.action_mailer.raise_delivery_errors = false unless ENV['NO_ACTION_MAILER']

if ENV['CUSTOM_PREVIEW_PATH']
config.action_mailer.preview_path = ENV['CUSTOM_PREVIEW_PATH']
end
Expand All @@ -59,13 +61,18 @@ require_file_stub 'config/environment' do
Rails.application.initialize!
end

exit if ENV['NO_ACTION_MAILER']
exit(0) if ENV['NO_ACTION_MAILER']
if ENV['DEFAULT_URL']
puts ActionMailer::Base.default_url_options[:host]
elsif defined?(::ActionMailer::Preview)
puts Rails.application.config.action_mailer.preview_path
if Rails::VERSION::STRING.start_with?('7.1')
puts Rails.application.config.action_mailer.preview_paths
else
puts Rails.application.config.action_mailer.preview_path
end
end

# This will force the loading of ActionMailer settings to ensure we do not
# accidentally set something we should not
ActionMailer::Base.smtp_settings
exit 0
33 changes: 24 additions & 9 deletions example_app_generator/spec/verify_mailer_preview_path_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,17 @@ def as_commandline(ops)

def capture_exec(*ops)
ops << { err: [:child, :out] }
io = IO.popen(ops)
lines = []

_process =
IO.popen(ops) do |io|
while (line = io.gets)
lines << line
end
end

# Necessary to ignore warnings from Rails code base
out = io.readlines
out = lines
.reject { |line| line =~ /warning: circular argument reference/ }
.reject { |line| line =~ /Gem::Specification#rubyforge_project=/ }
.reject { |line| line =~ /DEPRECATION WARNING/ }
Expand All @@ -30,7 +38,16 @@ def capture_exec(*ops)
CaptureExec.new(out, $?.exitstatus)
end

def have_no_preview
if ENV['RAILS_VERSION'] == 'main' && Rails::VERSION::STRING == "7.2.0.alpha"
before do
skip('This is broken on Rails main but is skipped for green builds of 7.1.x, please fix')
end
end

let(:expected_custom_path) { '/custom/path' }
let(:expected_rspec_path) { "#{::Rails.root}/spec/mailers/previews" }

def have_no_preview(_opts = {})
have_attributes(io: be_blank, exit_status: 0)
end

Expand All @@ -45,9 +62,7 @@ def have_no_preview

it 'sets the preview path to the default rspec path' do
skip "this spec fails singularly on JRuby due to weird env things" if RUBY_ENGINE == "jruby"
expect(capture_exec(custom_env, exec_script)).to eq(
"#{::Rails.root}/spec/mailers/previews"
)
expect(capture_exec(custom_env, exec_script)).to eq(expected_rspec_path)
end

it 'respects the setting from `show_previews`' do
Expand All @@ -65,7 +80,7 @@ def have_no_preview
custom_env.merge('CUSTOM_PREVIEW_PATH' => '/custom/path'),
exec_script
)
).to eq('/custom/path')
).to eq(expected_custom_path)
end

it 'allows initializers to set options' do
Expand All @@ -83,7 +98,7 @@ def have_no_preview
custom_env.merge('NO_ACTION_MAILER' => 'true'),
exec_script
)
).to have_no_preview
).to have_no_preview(actually_blank: true)
end
end

Expand All @@ -98,7 +113,7 @@ def have_no_preview
it 'respects the setting from `show_previews`' do
expect(
capture_exec(custom_env.merge('SHOW_PREVIEWS' => 'true'), exec_script)
).to eq("#{::Rails.root}/spec/mailers/previews")
).to eq(expected_rspec_path)
end

it 'allows initializers to set options' do
Expand Down

0 comments on commit 1814538

Please sign in to comment.