test: cover MailerPreviewAppTest and welcome
This commit is contained in:
1 parent
7587a4010d
commit
3fb6c9f5f3
1 file changed
+100
@@ -0,0 +1,100 @@
|
||||
require 'minitest/autorun'
|
||||
require 'prism'
|
||||
require 'support'
|
||||
require 'tmpdir'
|
||||
require 'fileutils'
|
||||
|
||||
class MailerPreviewAppTest < Minitest::Test
|
||||
include TestSupport
|
||||
|
||||
def setup
|
||||
@dir = Dir.mktmpdir('prism-mailer-preview-app')
|
||||
FileUtils.mkdir_p(File.join(@dir, 'preview_widget'))
|
||||
File.write(File.join(@dir, 'preview_widget/welcome.text.erb'), "Hi <%= name %>\n")
|
||||
File.write(File.join(@dir, 'preview_widget/welcome.html.erb'), "<p>Hi <%= name %></p>\n")
|
||||
|
||||
mailer_dir = @dir
|
||||
@mailer_class = Class.new(Prism::Mailer::Base) do
|
||||
self.template_roots = [mailer_dir]
|
||||
|
||||
def welcome(name)
|
||||
@name = name
|
||||
mail(to: 'someone@example.com', from: 'app@example.com', subject: 'Welcome!')
|
||||
end
|
||||
end
|
||||
Object.const_set(:PreviewWidgetMailer, @mailer_class)
|
||||
|
||||
mailer_class = @mailer_class
|
||||
@preview_class = Class.new(Prism::Mailer::Preview) do
|
||||
define_method(:welcome) { mailer_class.welcome('Fixture Fred') }
|
||||
end
|
||||
Object.const_set(:WidgetMailerPreview, @preview_class)
|
||||
|
||||
@app = Prism::Mailer::PreviewApp.new
|
||||
end
|
||||
|
||||
def teardown
|
||||
Prism::Mailer::Preview.registry.delete(@preview_class)
|
||||
%i[WidgetMailerPreview PreviewWidgetMailer].each do |name|
|
||||
Object.send(:remove_const, name) if Object.const_defined?(name)
|
||||
end
|
||||
FileUtils.remove_entry(@dir)
|
||||
end
|
||||
|
||||
def call(path, script_name: '')
|
||||
env = env_for('GET', path)
|
||||
env['SCRIPT_NAME'] = script_name
|
||||
@app.call(env)
|
||||
end
|
||||
|
||||
def test_index_lists_registered_previews
|
||||
status, _, body = call('/')
|
||||
assert_equal 200, status
|
||||
assert_includes body.join, 'widget_mailer'
|
||||
end
|
||||
|
||||
def test_preview_page_lists_its_email_actions
|
||||
status, _, body = call('/widget_mailer')
|
||||
assert_equal 200, status
|
||||
assert_includes body.join, 'welcome'
|
||||
end
|
||||
|
||||
def test_email_page_renders_the_actual_rendered_html_body
|
||||
status, headers, body = call('/widget_mailer/welcome')
|
||||
assert_equal 200, status
|
||||
assert_equal 'text/html; charset=UTF-8', headers['Content-Type']
|
||||
assert_includes body.join, '<p>Hi Fixture Fred</p>'
|
||||
assert_includes body.join, 'Welcome!'
|
||||
end
|
||||
|
||||
def test_email_page_never_delivers_the_message
|
||||
Prism::Mailer.deliveries.clear
|
||||
call('/widget_mailer/welcome')
|
||||
assert_empty Prism::Mailer.deliveries
|
||||
end
|
||||
|
||||
def test_unknown_preview_is_a_404
|
||||
status, = call('/does_not_exist')
|
||||
assert_equal 404, status
|
||||
end
|
||||
|
||||
def test_unknown_email_action_is_a_404
|
||||
status, = call('/widget_mailer/does_not_exist')
|
||||
assert_equal 404, status
|
||||
end
|
||||
|
||||
def test_links_are_built_from_script_name_so_mounting_anywhere_works
|
||||
_, _, body = call('/', script_name: '/rails/mailers')
|
||||
assert_includes body.join, 'href="/rails/mailers/widget_mailer"'
|
||||
end
|
||||
|
||||
def test_mounted_end_to_end_through_an_application
|
||||
host_app = Class.new(Prism::Application) do
|
||||
mount '/rails/mailers', Prism::Mailer::PreviewApp.new
|
||||
end
|
||||
|
||||
status, _, body = host_app.call(env_for('GET', '/rails/mailers/widget_mailer/welcome'))
|
||||
assert_equal 200, status
|
||||
assert_includes body.join, '<p>Hi Fixture Fred</p>'
|
||||
end
|
||||
end
|
||||
Reference in new issue
Block a user