catstodon/spec/mailers/user_mailer_spec.rb
Patrick Figel 04ecf44c2f Add confirmation step for email changes (#6071)
* Add confirmation step for email changes

This adds a confirmation step for email changes of existing users.
Like the initial account confirmation, a confirmation link is sent
to the new address.

Additionally, a notification is sent to the existing address when
the change is initiated. This message includes instruction to reset
the password immediately or to contact the instance admin if the
change was not initiated by the account owner.

Fixes #3871

* Add review fixes
2018-01-02 16:55:00 +01:00

86 lines
3 KiB
Ruby

# frozen_string_literal: true
require 'rails_helper'
describe UserMailer, type: :mailer do
let(:receiver) { Fabricate(:user) }
shared_examples 'localized subject' do |*args, **kwrest|
it 'renders subject localized for the locale of the receiver' do
locale = I18n.available_locales.sample
receiver.update!(locale: locale)
expect(mail.subject).to eq I18n.t(*args, kwrest.merge(locale: locale))
end
it 'renders subject localized for the default locale if the locale of the receiver is unavailable' do
receiver.update!(locale: nil)
expect(mail.subject).to eq I18n.t(*args, kwrest.merge(locale: I18n.default_locale))
end
end
describe 'confirmation_instructions' do
let(:mail) { UserMailer.confirmation_instructions(receiver, 'spec') }
it 'renders confirmation instructions' do
receiver.update!(locale: nil)
expect(mail.body.encoded).to include receiver.email
expect(mail.body.encoded).to include 'spec'
expect(mail.body.encoded).to include Rails.configuration.x.local_domain
end
include_examples 'localized subject',
'devise.mailer.confirmation_instructions.subject',
instance: Rails.configuration.x.local_domain
end
describe 'reconfirmation_instructions' do
let(:mail) { UserMailer.confirmation_instructions(receiver, 'spec') }
it 'renders reconfirmation instructions' do
receiver.update!(email: 'new-email@example.com', locale: nil)
expect(mail.body.encoded).to include 'new-email@example.com'
expect(mail.body.encoded).to include 'spec'
expect(mail.body.encoded).to include Rails.configuration.x.local_domain
expect(mail.subject).to eq I18n.t('devise.mailer.reconfirmation_instructions.subject',
instance: Rails.configuration.x.local_domain,
locale: I18n.default_locale)
end
end
describe 'reset_password_instructions' do
let(:mail) { UserMailer.reset_password_instructions(receiver, 'spec') }
it 'renders reset password instructions' do
receiver.update!(locale: nil)
expect(mail.body.encoded).to include receiver.email
expect(mail.body.encoded).to include 'spec'
end
include_examples 'localized subject',
'devise.mailer.reset_password_instructions.subject'
end
describe 'password_change' do
let(:mail) { UserMailer.password_change(receiver) }
it 'renders password change notification' do
receiver.update!(locale: nil)
expect(mail.body.encoded).to include receiver.email
end
include_examples 'localized subject',
'devise.mailer.password_change.subject'
end
describe 'email_changed' do
let(:mail) { UserMailer.email_changed(receiver) }
it 'renders email change notification' do
receiver.update!(locale: nil)
expect(mail.body.encoded).to include receiver.email
end
include_examples 'localized subject',
'devise.mailer.email_changed.subject'
end
end