* 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
 |