| 
									
										
										
										
											2017-04-21 22:23:17 -04:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | require 'rails_helper' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | describe Settings::TwoFactorAuthenticationsController do | 
					
						
							|  |  |  |   render_views | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   let(:user) { Fabricate(:user) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   describe 'GET #show' do | 
					
						
							| 
									
										
										
										
											2017-05-30 01:07:07 +09:00
										 |  |  |     context 'when signed in' do | 
					
						
							|  |  |  |       before do | 
					
						
							|  |  |  |         sign_in user, scope: :user | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2017-04-21 22:23:17 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-30 01:07:07 +09:00
										 |  |  |       describe 'when user requires otp for login already' do | 
					
						
							|  |  |  |         it 'returns http success' do | 
					
						
							|  |  |  |           user.update(otp_required_for_login: true) | 
					
						
							|  |  |  |           get :show | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           expect(response).to have_http_status(:success) | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       describe 'when user does not require otp for login' do | 
					
						
							|  |  |  |         it 'returns http success' do | 
					
						
							|  |  |  |           user.update(otp_required_for_login: false) | 
					
						
							|  |  |  |           get :show | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           expect(response).to have_http_status(:success) | 
					
						
							|  |  |  |         end | 
					
						
							| 
									
										
										
										
											2017-04-21 22:23:17 -04:00
										 |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-30 01:07:07 +09:00
										 |  |  |     context 'when not signed in' do | 
					
						
							|  |  |  |       it 'redirects' do | 
					
						
							| 
									
										
										
										
											2017-04-21 22:23:17 -04:00
										 |  |  |         get :show | 
					
						
							| 
									
										
										
										
											2017-05-30 01:07:07 +09:00
										 |  |  |         expect(response).to redirect_to '/auth/sign_in' | 
					
						
							| 
									
										
										
										
											2017-04-21 22:23:17 -04:00
										 |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   describe 'POST #create' do | 
					
						
							| 
									
										
										
										
											2017-05-30 01:07:07 +09:00
										 |  |  |     context 'when signed in' do | 
					
						
							|  |  |  |       before do | 
					
						
							|  |  |  |         sign_in user, scope: :user | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2017-04-21 22:23:17 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-30 01:07:07 +09:00
										 |  |  |       describe 'when user requires otp for login already' do | 
					
						
							|  |  |  |         it 'redirects to show page' do | 
					
						
							|  |  |  |           user.update(otp_required_for_login: true) | 
					
						
							|  |  |  |           post :create | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           expect(response).to redirect_to(settings_two_factor_authentication_path) | 
					
						
							|  |  |  |         end | 
					
						
							| 
									
										
										
										
											2017-04-21 22:23:17 -04:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-30 01:07:07 +09:00
										 |  |  |       describe 'when creation succeeds' do | 
					
						
							|  |  |  |         it 'updates user secret' do | 
					
						
							|  |  |  |           before = user.otp_secret | 
					
						
							|  |  |  |           post :create | 
					
						
							| 
									
										
										
										
											2017-04-21 22:23:17 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-30 01:07:07 +09:00
										 |  |  |           expect(user.reload.otp_secret).not_to eq(before) | 
					
						
							|  |  |  |           expect(response).to redirect_to(new_settings_two_factor_authentication_confirmation_path) | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     context 'when not signed in' do | 
					
						
							|  |  |  |       it 'redirects' do | 
					
						
							|  |  |  |         get :show | 
					
						
							|  |  |  |         expect(response).to redirect_to '/auth/sign_in' | 
					
						
							| 
									
										
										
										
											2017-04-21 22:23:17 -04:00
										 |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   describe 'POST #destroy' do | 
					
						
							|  |  |  |     before do | 
					
						
							|  |  |  |       user.update(otp_required_for_login: true) | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2017-05-30 01:07:07 +09:00
										 |  |  | 
 | 
					
						
							|  |  |  |     it 'turns off otp requirement if signed in' do | 
					
						
							|  |  |  |       sign_in user, scope: :user | 
					
						
							| 
									
										
										
										
											2017-04-21 22:23:17 -04:00
										 |  |  |       post :destroy | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect(response).to redirect_to(settings_two_factor_authentication_path) | 
					
						
							|  |  |  |       user.reload | 
					
						
							|  |  |  |       expect(user.otp_required_for_login).to eq(false) | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2017-05-30 01:07:07 +09:00
										 |  |  | 
 | 
					
						
							|  |  |  |     it 'redirects if not signed in' do | 
					
						
							|  |  |  |       get :show | 
					
						
							|  |  |  |       expect(response).to redirect_to '/auth/sign_in' | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2017-04-21 22:23:17 -04:00
										 |  |  |   end | 
					
						
							|  |  |  | end |