mirror of
https://github.com/mastodon/mastodon.git
synced 2024-11-17 20:16:14 +00:00
Combine shared-setup examples across spec/controllers/auth/*
specs (#32906)
This commit is contained in:
parent
54a7c1898e
commit
7bd7705f59
|
@ -8,9 +8,7 @@ RSpec.describe Auth::ChallengesController do
|
||||||
let(:password) { 'foobar12345' }
|
let(:password) { 'foobar12345' }
|
||||||
let(:user) { Fabricate(:user, password: password) }
|
let(:user) { Fabricate(:user, password: password) }
|
||||||
|
|
||||||
before do
|
before { sign_in user }
|
||||||
sign_in user
|
|
||||||
end
|
|
||||||
|
|
||||||
describe 'POST #create' do
|
describe 'POST #create' do
|
||||||
let(:return_to) { edit_user_registration_path }
|
let(:return_to) { edit_user_registration_path }
|
||||||
|
@ -18,28 +16,24 @@ RSpec.describe Auth::ChallengesController do
|
||||||
context 'with correct password' do
|
context 'with correct password' do
|
||||||
before { post :create, params: { form_challenge: { return_to: return_to, current_password: password } } }
|
before { post :create, params: { form_challenge: { return_to: return_to, current_password: password } } }
|
||||||
|
|
||||||
it 'redirects back' do
|
it 'redirects back and sets challenge passed at in session' do
|
||||||
expect(response).to redirect_to(return_to)
|
expect(response)
|
||||||
end
|
.to redirect_to(return_to)
|
||||||
|
expect(session[:challenge_passed_at])
|
||||||
it 'sets session' do
|
.to_not be_nil
|
||||||
expect(session[:challenge_passed_at]).to_not be_nil
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'with incorrect password' do
|
context 'with incorrect password' do
|
||||||
before { post :create, params: { form_challenge: { return_to: return_to, current_password: 'hhfggjjd562' } } }
|
before { post :create, params: { form_challenge: { return_to: return_to, current_password: 'hhfggjjd562' } } }
|
||||||
|
|
||||||
it 'renders challenge' do
|
it 'renders challenge, displays error, does not set session' do
|
||||||
expect(response).to render_template('auth/challenges/new')
|
expect(response)
|
||||||
end
|
.to render_template('auth/challenges/new')
|
||||||
|
expect(response.body)
|
||||||
it 'displays error' do
|
.to include 'Invalid password'
|
||||||
expect(response.body).to include 'Invalid password'
|
expect(session[:challenge_passed_at])
|
||||||
end
|
.to be_nil
|
||||||
|
|
||||||
it 'does not set session' do
|
|
||||||
expect(session[:challenge_passed_at]).to be_nil
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -23,12 +23,11 @@ RSpec.describe Auth::ConfirmationsController do
|
||||||
get :show, params: { confirmation_token: 'foobar' }
|
get :show, params: { confirmation_token: 'foobar' }
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'redirects to login' do
|
it 'redirects to login and queues worker' do
|
||||||
expect(response).to redirect_to(new_user_session_path)
|
expect(response)
|
||||||
end
|
.to redirect_to(new_user_session_path)
|
||||||
|
expect(BootstrapTimelineWorker)
|
||||||
it 'queues up bootstrapping of home timeline' do
|
.to have_received(:perform_async).with(user.account_id)
|
||||||
expect(BootstrapTimelineWorker).to have_received(:perform_async).with(user.account_id)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -88,13 +87,13 @@ RSpec.describe Auth::ConfirmationsController do
|
||||||
get :show, params: { confirmation_token: 'foobar' }
|
get :show, params: { confirmation_token: 'foobar' }
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'redirects to login and confirms email' do
|
it 'redirects to login, confirms email, does not queue worker' do
|
||||||
expect(response).to redirect_to(new_user_session_path)
|
expect(response)
|
||||||
expect(user.reload.unconfirmed_email).to be_nil
|
.to redirect_to(new_user_session_path)
|
||||||
end
|
expect(user.reload.unconfirmed_email)
|
||||||
|
.to be_nil
|
||||||
it 'does not queue up bootstrapping of home timeline' do
|
expect(BootstrapTimelineWorker)
|
||||||
expect(BootstrapTimelineWorker).to_not have_received(:perform_async)
|
.to_not have_received(:perform_async)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -57,29 +57,30 @@ RSpec.describe Auth::PasswordsController do
|
||||||
post :update, params: { user: { password: password, password_confirmation: password, reset_password_token: token } }
|
post :update, params: { user: { password: password, password_confirmation: password, reset_password_token: token } }
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'redirect to sign in' do
|
it 'resets the password' do
|
||||||
expect(response).to redirect_to '/auth/sign_in'
|
expect(response)
|
||||||
end
|
.to redirect_to '/auth/sign_in'
|
||||||
|
|
||||||
it 'changes password' do
|
# Change password
|
||||||
this_user = User.find(user.id)
|
expect(User.find(user.id))
|
||||||
|
.to be_present
|
||||||
|
.and be_valid_password(password)
|
||||||
|
|
||||||
expect(this_user).to_not be_nil
|
# Deactivate session
|
||||||
expect(this_user.valid_password?(password)).to be true
|
expect(user.session_activations.count)
|
||||||
end
|
.to eq 0
|
||||||
|
expect { session_activation.reload }
|
||||||
|
.to raise_error(ActiveRecord::RecordNotFound)
|
||||||
|
|
||||||
it 'deactivates all sessions' do
|
# Revoke tokens
|
||||||
expect(user.session_activations.count).to eq 0
|
expect(Doorkeeper::AccessToken.active_for(user).count)
|
||||||
expect { session_activation.reload }.to raise_error(ActiveRecord::RecordNotFound)
|
.to eq 0
|
||||||
end
|
|
||||||
|
|
||||||
it 'revokes all access tokens' do
|
# Remove push subs
|
||||||
expect(Doorkeeper::AccessToken.active_for(user).count).to eq 0
|
expect(Web::PushSubscription.where(user: user).or(Web::PushSubscription.where(access_token: access_token)).count)
|
||||||
end
|
.to eq 0
|
||||||
|
expect { web_push_subscription.reload }
|
||||||
it 'removes push subscriptions' do
|
.to raise_error(ActiveRecord::RecordNotFound)
|
||||||
expect(Web::PushSubscription.where(user: user).or(Web::PushSubscription.where(access_token: access_token)).count).to eq 0
|
|
||||||
expect { web_push_subscription.reload }.to raise_error(ActiveRecord::RecordNotFound)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -88,15 +89,13 @@ RSpec.describe Auth::PasswordsController do
|
||||||
post :update, params: { user: { password: password, password_confirmation: password, reset_password_token: 'some_invalid_value' } }
|
post :update, params: { user: { password: password, password_confirmation: password, reset_password_token: 'some_invalid_value' } }
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'renders reset password' do
|
it 'renders reset password and retains password' do
|
||||||
expect(response).to render_template(:new)
|
expect(response)
|
||||||
end
|
.to render_template(:new)
|
||||||
|
|
||||||
it 'retains password' do
|
expect(User.find(user.id))
|
||||||
this_user = User.find(user.id)
|
.to be_present
|
||||||
|
.and be_external_or_valid_password(user.password)
|
||||||
expect(this_user).to_not be_nil
|
|
||||||
expect(this_user.external_or_valid_password?(user.password)).to be true
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -6,27 +6,35 @@ RSpec.describe Auth::RegistrationsController do
|
||||||
render_views
|
render_views
|
||||||
|
|
||||||
shared_examples 'checks for enabled registrations' do |path|
|
shared_examples 'checks for enabled registrations' do |path|
|
||||||
it 'redirects if it is in single user mode while it is open for registration' do
|
context 'when in single user mode and open for registration' do
|
||||||
Fabricate(:account)
|
before do
|
||||||
Setting.registrations_mode = 'open'
|
Setting.registrations_mode = 'open'
|
||||||
allow(Rails.configuration.x).to receive(:single_user_mode).and_return(true)
|
allow(Rails.configuration.x).to receive(:single_user_mode).and_return(true)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'redirects to root' do
|
||||||
|
Fabricate(:account)
|
||||||
get path
|
get path
|
||||||
|
|
||||||
expect(response).to redirect_to '/'
|
expect(response).to redirect_to '/'
|
||||||
expect(Rails.configuration.x).to have_received(:single_user_mode)
|
expect(Rails.configuration.x).to have_received(:single_user_mode)
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
it 'redirects if it is not open for registration while it is not in single user mode' do
|
context 'when registrations closed and not in single user mode' do
|
||||||
|
before do
|
||||||
Setting.registrations_mode = 'none'
|
Setting.registrations_mode = 'none'
|
||||||
allow(Rails.configuration.x).to receive(:single_user_mode).and_return(false)
|
allow(Rails.configuration.x).to receive(:single_user_mode).and_return(false)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'redirects to root' do
|
||||||
get path
|
get path
|
||||||
|
|
||||||
expect(response).to redirect_to '/'
|
expect(response).to redirect_to '/'
|
||||||
expect(Rails.configuration.x).to have_received(:single_user_mode)
|
expect(Rails.configuration.x).to have_received(:single_user_mode)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe 'GET #edit' do
|
describe 'GET #edit' do
|
||||||
before do
|
before do
|
||||||
|
@ -35,12 +43,12 @@ RSpec.describe Auth::RegistrationsController do
|
||||||
get :edit
|
get :edit
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns http success' do
|
it 'returns http success and cache headers' do
|
||||||
expect(response).to have_http_status(200)
|
expect(response)
|
||||||
end
|
.to have_http_status(200)
|
||||||
|
|
||||||
it 'returns private cache control header' do
|
expect(response.headers['Cache-Control'])
|
||||||
expect(response.headers['Cache-Control']).to include('private, no-store')
|
.to include('private, no-store')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -53,14 +61,13 @@ RSpec.describe Auth::RegistrationsController do
|
||||||
sign_in(user, scope: :user)
|
sign_in(user, scope: :user)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns http success' do
|
it 'returns http success and cache headers' do
|
||||||
put :update
|
put :update
|
||||||
expect(response).to have_http_status(200)
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'returns private cache control headers' do
|
expect(response)
|
||||||
put :update
|
.to have_http_status(200)
|
||||||
expect(response.headers['Cache-Control']).to include('private, no-store')
|
expect(response.headers['Cache-Control'])
|
||||||
|
.to include('private, no-store')
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'can update the user email' do
|
it 'can update the user email' do
|
||||||
|
@ -174,16 +181,14 @@ RSpec.describe Auth::RegistrationsController do
|
||||||
post :create, params: { user: { account_attributes: { username: 'test' }, email: 'test@example.com', password: '12345678', password_confirmation: '12345678', agreement: 'true' } }
|
post :create, params: { user: { account_attributes: { username: 'test' }, email: 'test@example.com', password: '12345678', password_confirmation: '12345678', agreement: 'true' } }
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'redirects to setup' do
|
it 'redirects to setup and creates user' do
|
||||||
subject
|
subject
|
||||||
expect(response).to redirect_to auth_setup_path
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'creates user' do
|
expect(response)
|
||||||
subject
|
.to redirect_to auth_setup_path
|
||||||
user = User.find_by(email: 'test@example.com')
|
expect(User.find_by(email: 'test@example.com'))
|
||||||
expect(user).to_not be_nil
|
.to be_present
|
||||||
expect(user.locale).to eq(accept_language)
|
.and have_attributes(locale: eq(accept_language))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -254,17 +259,18 @@ RSpec.describe Auth::RegistrationsController do
|
||||||
post :create, params: { user: { account_attributes: { username: 'test' }, email: 'test@example.com', password: '12345678', password_confirmation: '12345678', agreement: 'true' } }
|
post :create, params: { user: { account_attributes: { username: 'test' }, email: 'test@example.com', password: '12345678', password_confirmation: '12345678', agreement: 'true' } }
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'redirects to setup' do
|
it 'redirects to setup and creates user' do
|
||||||
subject
|
subject
|
||||||
expect(response).to redirect_to auth_setup_path
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'creates user' do
|
expect(response)
|
||||||
subject
|
.to redirect_to auth_setup_path
|
||||||
user = User.find_by(email: 'test@example.com')
|
|
||||||
expect(user).to_not be_nil
|
expect(User.find_by(email: 'test@example.com'))
|
||||||
expect(user.locale).to eq(accept_language)
|
.to be_present
|
||||||
expect(user.approved).to be(false)
|
.and have_attributes(
|
||||||
|
locale: eq(accept_language),
|
||||||
|
approved: be(false)
|
||||||
|
)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -276,17 +282,17 @@ RSpec.describe Auth::RegistrationsController do
|
||||||
post :create, params: { user: { account_attributes: { username: 'test' }, email: 'test@example.com', password: '12345678', password_confirmation: '12345678', invite_code: invite.code, agreement: 'true' } }
|
post :create, params: { user: { account_attributes: { username: 'test' }, email: 'test@example.com', password: '12345678', password_confirmation: '12345678', invite_code: invite.code, agreement: 'true' } }
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'redirects to setup' do
|
it 'redirects to setup and creates user' do
|
||||||
subject
|
subject
|
||||||
expect(response).to redirect_to auth_setup_path
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'creates user' do
|
expect(response).to redirect_to auth_setup_path
|
||||||
subject
|
|
||||||
user = User.find_by(email: 'test@example.com')
|
expect(User.find_by(email: 'test@example.com'))
|
||||||
expect(user).to_not be_nil
|
.to be_present
|
||||||
expect(user.locale).to eq(accept_language)
|
.and have_attributes(
|
||||||
expect(user.approved).to be(false)
|
locale: eq(accept_language),
|
||||||
|
approved: be(false)
|
||||||
|
)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -300,17 +306,17 @@ RSpec.describe Auth::RegistrationsController do
|
||||||
post :create, params: { user: { account_attributes: { username: 'test' }, email: 'test@example.com', password: '12345678', password_confirmation: '12345678', invite_code: invite.code, agreement: 'true' } }
|
post :create, params: { user: { account_attributes: { username: 'test' }, email: 'test@example.com', password: '12345678', password_confirmation: '12345678', invite_code: invite.code, agreement: 'true' } }
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'redirects to setup' do
|
it 'redirects to setup and creates user' do
|
||||||
subject
|
subject
|
||||||
expect(response).to redirect_to auth_setup_path
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'creates user' do
|
expect(response).to redirect_to auth_setup_path
|
||||||
subject
|
|
||||||
user = User.find_by(email: 'test@example.com')
|
expect(User.find_by(email: 'test@example.com'))
|
||||||
expect(user).to_not be_nil
|
.to be_present
|
||||||
expect(user.locale).to eq(accept_language)
|
.and have_attributes(
|
||||||
expect(user.approved).to be(true)
|
locale: eq(accept_language),
|
||||||
|
approved: be(true)
|
||||||
|
)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -348,12 +354,11 @@ RSpec.describe Auth::RegistrationsController do
|
||||||
delete :destroy
|
delete :destroy
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns http not found' do
|
it 'returns http not found and keeps user' do
|
||||||
expect(response).to have_http_status(404)
|
expect(response)
|
||||||
end
|
.to have_http_status(404)
|
||||||
|
expect(User.find(user.id))
|
||||||
it 'does not delete user' do
|
.to_not be_nil
|
||||||
expect(User.find(user.id)).to_not be_nil
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue