04ecf44c2f
* 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
86 lines
3 KiB
Ruby
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
|