Skip to content
Snippets Groups Projects
Unverified Commit 8c44b723 authored by Claire's avatar Claire Committed by GitHub
Browse files

Change confirmations controller to redirect to / for approved users (#16151)

Clicking the confirmation link multiple times currently leads to entering
account settings, which can be confusing. This commit changes that so that
it redirects to the root path, so it behaves the same way as clicking only
once in most cases.
parent 09bb9287
No related branches found
No related tags found
No related merge requests found
......@@ -17,7 +17,9 @@ class Auth::ConfirmationsController < Devise::ConfirmationsController
private
def require_unconfirmed!
redirect_to edit_user_registration_path if user_signed_in? && current_user.confirmed? && current_user.unconfirmed_email.blank?
if user_signed_in? && current_user.confirmed? && current_user.unconfirmed_email.blank?
redirect_to(current_user.approved? ? root_path : edit_user_registration_path)
end
end
def set_body_classes
......
......@@ -32,6 +32,52 @@ describe Auth::ConfirmationsController, type: :controller do
end
end
context 'when user is unconfirmed and unapproved' do
let!(:user) { Fabricate(:user, confirmation_token: 'foobar', confirmed_at: nil, approved: false) }
before do
allow(BootstrapTimelineWorker).to receive(:perform_async)
@request.env['devise.mapping'] = Devise.mappings[:user]
get :show, params: { confirmation_token: 'foobar' }
end
it 'redirects to login' do
expect(response).to redirect_to(new_user_session_path)
end
end
context 'when user is already confirmed' do
let!(:user) { Fabricate(:user) }
before do
allow(BootstrapTimelineWorker).to receive(:perform_async)
@request.env['devise.mapping'] = Devise.mappings[:user]
sign_in(user, scope: :user)
get :show, params: { confirmation_token: 'foobar' }
end
it 'redirects to root path' do
expect(response).to redirect_to(root_path)
end
end
context 'when user is already confirmed but unapproved' do
let!(:user) { Fabricate(:user, approved: false) }
before do
allow(BootstrapTimelineWorker).to receive(:perform_async)
@request.env['devise.mapping'] = Devise.mappings[:user]
user.approved = false
user.save!
sign_in(user, scope: :user)
get :show, params: { confirmation_token: 'foobar' }
end
it 'redirects to settings' do
expect(response).to redirect_to(edit_user_registration_path)
end
end
context 'when user is updating email' do
let!(:user) { Fabricate(:user, confirmation_token: 'foobar', unconfirmed_email: 'new-email@example.com') }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment