diff --git a/app/models/notifier.rb b/app/models/notifier.rb index 941bd642..1f46af98 100644 --- a/app/models/notifier.rb +++ b/app/models/notifier.rb @@ -1,12 +1,21 @@ class Notifier < ::ActionMailer::Base + cattr_accessor :sender def confirmation_instructions(record) - # TODO: configure email + from self.class.sender + recipients record.email + subject I18n.t(:confirmation_instructions, :scope => [:devise, :notifier], :default => 'Confirmation instructions') + sent_on Time.now + content_type 'text/html' + body record.class.name.downcase.to_sym => record end def reset_password_instructions(record) - # TODO + from self.class.sender + recipients record.email + subject I18n.t(:reset_password_instructions, :scope => [:devise, :notifier], :default => 'Reset password instructions') + sent_on Time.now + content_type 'text/html' + body record.class.name.downcase.to_sym => record end end - -#Devise::Notifier.template_root = File.join(File.dirname(__FILE__), '..', 'views') diff --git a/app/views/notifier/confirmation_instructions.html.erb b/app/views/notifier/confirmation_instructions.html.erb index e69de29b..d72dca26 100644 --- a/app/views/notifier/confirmation_instructions.html.erb +++ b/app/views/notifier/confirmation_instructions.html.erb @@ -0,0 +1,5 @@ +Welcome <%= @user.email %>! + +You can confirm your account through the link below: + +<%= link_to 'Confirm my account', confirmation_url(:perishable_token => @user.perishable_token) %> diff --git a/app/views/notifier/reset_password_instructions.html.erb b/app/views/notifier/reset_password_instructions.html.erb index e69de29b..ca529167 100644 --- a/app/views/notifier/reset_password_instructions.html.erb +++ b/app/views/notifier/reset_password_instructions.html.erb @@ -0,0 +1,8 @@ +Hello <%= @user.email %>! + +Someone has requested a link to change your password, and you can do this through the link below. + +<%= link_to 'Change my password', edit_password_url(:perishable_token => @user.perishable_token) %> + +If you didn't request this, please ignore this email. +Your password won't change until you access the link above and create a new one. diff --git a/test/mailers/confirmation_instructions_test.rb b/test/mailers/confirmation_instructions_test.rb new file mode 100644 index 00000000..ea39197a --- /dev/null +++ b/test/mailers/confirmation_instructions_test.rb @@ -0,0 +1,42 @@ +require 'test_helper' + +class ConfirmationInstructionsTest < ActionMailer::TestCase + + def setup + setup_mailer + I18n.backend.store_translations :en, {:devise => { :notifier => { :confirmation_instructions => 'Account Confirmation' } }} + Notifier.sender = 'test@example.com' + @user = create_user + @mail = ActionMailer::Base.deliveries.first + end + + test 'email sent after creating the user' do + assert_not_nil @mail + end + + test 'content type should be set to html' do + assert_equal 'text/html', @mail.content_type + end + + test 'send confirmation instructions to the user email' do + assert_equal [@user.email], @mail.to + end + + test 'setup sender from configuration' do + assert_equal ['test@example.com'], @mail.from + end + + test 'setup subject from I18n' do + assert_equal 'Account Confirmation', @mail.subject + end + + test 'body should have user info' do + assert_match /#{@user.email}/, @mail.body + end + + test 'body should have link to confirm the account' do + host = ActionMailer::Base.default_url_options[:host] + confirmation_url_regexp = %r{} + assert_match confirmation_url_regexp, @mail.body + end +end diff --git a/test/mailers/notifier_test.rb b/test/mailers/notifier_test.rb deleted file mode 100644 index b1bfb5bd..00000000 --- a/test/mailers/notifier_test.rb +++ /dev/null @@ -1,7 +0,0 @@ -require 'test_helper' - -class NotifierTest < ActionMailer::TestCase - - # TODO -end - diff --git a/test/mailers/reset_password_instructions_test.rb b/test/mailers/reset_password_instructions_test.rb new file mode 100644 index 00000000..4b5f06c3 --- /dev/null +++ b/test/mailers/reset_password_instructions_test.rb @@ -0,0 +1,42 @@ +require 'test_helper' + +class ResetPasswordInstructionsTest < ActionMailer::TestCase + + def setup + setup_mailer + I18n.backend.store_translations :en, {:devise => { :notifier => { :reset_password_instructions => 'Reset instructions' } }} + Notifier.sender = 'test@example.com' + @user = create_user + @mail = Notifier.deliver_reset_password_instructions(@user) + end + + test 'email sent after reseting the user password' do + assert_not_nil @mail + end + + test 'content type should be set to html' do + assert_equal 'text/html', @mail.content_type + end + + test 'send confirmation instructions to the user email' do + assert_equal [@user.email], @mail.to + end + + test 'setup sender from configuration' do + assert_equal ['test@example.com'], @mail.from + end + + test 'setup subject from I18n' do + assert_equal 'Reset instructions', @mail.subject + end + + test 'body should have user info' do + assert_match /#{@user.email}/, @mail.body + end + + test 'body should have link to confirm the account' do + host = ActionMailer::Base.default_url_options[:host] + confirmation_url_regexp = %r{} + assert_match confirmation_url_regexp, @mail.body + end +end diff --git a/test/test_helper.rb b/test/test_helper.rb index 78b78ce2..e4d7639b 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -14,6 +14,7 @@ require 'integration_tests_helper' ActionMailer::Base.delivery_method = :test ActionMailer::Base.perform_deliveries = true +ActionMailer::Base.default_url_options[:host] = 'test.com' ActiveRecord::Migration.verbose = false ActiveRecord::Base.logger = Logger.new(nil)