Files
prism/test/test_mailer_preview.rb

71 lines
2.2 KiB
Ruby

require 'minitest/autorun'
require 'prism'
require 'tmpdir'
require 'fileutils'
class MailerPreviewTest < Minitest::Test
def setup
@dir = Dir.mktmpdir('prism-mailer-preview')
FileUtils.mkdir_p(File.join(@dir, 'preview_user'))
File.write(File.join(@dir, 'preview_user/welcome.text.erb'), "Hi <%= name %>\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', subject: 'Welcome!')
end
end
Object.const_set(:PreviewUserMailer, @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(:UserMailerPreview, @preview_class)
end
def teardown
Prism::Mailer::Preview.registry.delete(@preview_class)
%i[UserMailerPreview PreviewUserMailer].each do |name|
Object.send(:remove_const, name) if Object.const_defined?(name)
end
FileUtils.remove_entry(@dir)
end
def test_subclassing_registers_the_preview
assert_includes Prism::Mailer::Preview.registry, UserMailerPreview
end
def test_preview_name_strips_the_preview_suffix_and_underscores
assert_equal 'user_mailer', UserMailerPreview.preview_name
end
def test_emails_lists_the_defined_preview_actions
assert_equal ['welcome'], UserMailerPreview.emails
end
def test_call_renders_the_action_and_returns_its_delivery
delivery = UserMailerPreview.call(:welcome)
assert_equal "Hi Fixture Fred\n", delivery.message.text_body
end
def test_call_never_delivers_the_message
Prism::Mailer.deliveries.clear
UserMailerPreview.call(:welcome)
assert_empty Prism::Mailer.deliveries
end
def test_call_raises_for_an_unknown_email
error = assert_raises(ArgumentError) { UserMailerPreview.call(:does_not_exist) }
assert_match(/unknown preview/, error.message)
end
def test_find_looks_up_a_registered_preview_by_name
assert_equal UserMailerPreview, Prism::Mailer::Preview.find('user_mailer')
assert_nil Prism::Mailer::Preview.find('nonexistent')
end
end