Previously the default locale was set by Localized concern for controllers, but it was not enforced for mailers. config is enforced throughout the application and an appropriate place to set the default locale.
		
			
				
	
	
		
			64 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| # frozen_string_literal: true
 | |
| 
 | |
| require 'rails_helper'
 | |
| 
 | |
| describe ApplicationController, type: :controller do
 | |
|   controller do
 | |
|     include Localized
 | |
| 
 | |
|     def success
 | |
|       head 200
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   before do
 | |
|     routes.draw { get 'success' => 'anonymous#success' }
 | |
|   end
 | |
| 
 | |
|   shared_examples 'default locale' do
 | |
|     after { I18n.locale = I18n.default_locale }
 | |
| 
 | |
|     it 'sets available and preferred language' do
 | |
|       request.headers['Accept-Language'] = 'ca-ES, fa'
 | |
|       get 'success'
 | |
|       expect(I18n.locale).to eq :fa
 | |
|     end
 | |
| 
 | |
|     it 'sets available and compatible langauge if none of available languages are preferred' do
 | |
|       request.headers['Accept-Language'] = 'fa-IR'
 | |
|       get 'success'
 | |
|       expect(I18n.locale).to eq :fa
 | |
|     end
 | |
| 
 | |
|     it 'sets default locale if none of available languages are compatible' do
 | |
|       request.headers['Accept-Language'] = ''
 | |
|       get 'success'
 | |
|       expect(I18n.locale).to eq :en
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   context 'user with valid locale has signed in' do
 | |
|     it "sets user's locale" do
 | |
|       user = Fabricate(:user, locale: :ca)
 | |
| 
 | |
|       sign_in(user)
 | |
|       get 'success'
 | |
| 
 | |
|       expect(I18n.locale).to eq :ca
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   context 'user with invalid locale has signed in' do
 | |
|     before do
 | |
|       user = Fabricate.build(:user, locale: :invalid)
 | |
|       user.save!(validate: false)
 | |
|       sign_in(user)
 | |
|     end
 | |
| 
 | |
|     include_examples 'default locale'
 | |
|   end
 | |
| 
 | |
|   context 'user has not signed in' do
 | |
|     include_examples 'default locale'
 | |
|   end
 | |
| end
 |