2019-07-31 22:56:46 +05:30
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2017-09-10 17:25:29 +05:30
|
|
|
require 'spec_helper'
|
|
|
|
|
2020-06-23 00:09:42 +05:30
|
|
|
RSpec.describe PasswordsController do
|
2020-11-24 15:15:51 +05:30
|
|
|
include DeviseHelpers
|
2017-09-10 17:25:29 +05:30
|
|
|
|
2020-11-24 15:15:51 +05:30
|
|
|
before do
|
|
|
|
set_devise_mapping(context: @request)
|
|
|
|
end
|
|
|
|
|
|
|
|
describe '#check_password_authentication_available' do
|
2018-03-17 18:26:18 +05:30
|
|
|
context 'when password authentication is disabled for the web interface and Git' do
|
|
|
|
it 'prevents a password reset' do
|
|
|
|
stub_application_setting(password_authentication_enabled_for_web: false)
|
|
|
|
stub_application_setting(password_authentication_enabled_for_git: false)
|
2017-09-10 17:25:29 +05:30
|
|
|
|
|
|
|
post :create
|
|
|
|
|
2020-03-13 15:44:24 +05:30
|
|
|
expect(response).to have_gitlab_http_status(:found)
|
2020-01-01 13:55:28 +05:30
|
|
|
expect(flash[:alert]).to eq _('Password authentication is unavailable.')
|
2017-09-10 17:25:29 +05:30
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'when reset email belongs to an ldap user' do
|
|
|
|
let(:user) { create(:omniauth_user, provider: 'ldapmain', email: 'ldapuser@gitlab.com') }
|
|
|
|
|
|
|
|
it 'prevents a password reset' do
|
2019-02-15 15:39:39 +05:30
|
|
|
post :create, params: { user: { email: user.email } }
|
2017-09-10 17:25:29 +05:30
|
|
|
|
2020-01-01 13:55:28 +05:30
|
|
|
expect(flash[:alert]).to eq _('Password authentication is unavailable.')
|
2017-09-10 17:25:29 +05:30
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2020-11-24 15:15:51 +05:30
|
|
|
|
|
|
|
describe '#update' do
|
|
|
|
render_views
|
|
|
|
|
|
|
|
context 'updating the password' do
|
|
|
|
subject do
|
|
|
|
put :update, params: {
|
|
|
|
user: {
|
|
|
|
password: password,
|
|
|
|
password_confirmation: password_confirmation,
|
|
|
|
reset_password_token: reset_password_token
|
|
|
|
}
|
|
|
|
}
|
|
|
|
end
|
|
|
|
|
|
|
|
let(:password) { User.random_password }
|
|
|
|
let(:password_confirmation) { password }
|
|
|
|
let(:reset_password_token) { user.send_reset_password_instructions }
|
|
|
|
let(:user) { create(:user, password_automatically_set: true, password_expires_at: 10.minutes.ago) }
|
|
|
|
|
|
|
|
context 'password update is successful' do
|
|
|
|
it 'updates the password-related flags' do
|
|
|
|
subject
|
|
|
|
user.reload
|
|
|
|
|
|
|
|
expect(response).to redirect_to(new_user_session_path)
|
|
|
|
expect(flash[:notice]).to include('password has been changed successfully')
|
|
|
|
expect(user.password_automatically_set).to eq(false)
|
|
|
|
expect(user.password_expires_at).to be_nil
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'password update is unsuccessful' do
|
|
|
|
let(:password_confirmation) { 'not_the_same_as_password' }
|
|
|
|
|
|
|
|
it 'does not update the password-related flags' do
|
|
|
|
subject
|
|
|
|
user.reload
|
|
|
|
|
|
|
|
expect(response).to render_template(:edit)
|
|
|
|
expect(response.body).to have_content("Password confirmation doesn't match Password")
|
|
|
|
expect(user.password_automatically_set).to eq(true)
|
|
|
|
expect(user.password_expires_at).not_to be_nil
|
|
|
|
end
|
|
|
|
end
|
2021-09-04 01:27:46 +05:30
|
|
|
|
|
|
|
it 'sets the username and caller_id in the context' do
|
|
|
|
expect(controller).to receive(:update).and_wrap_original do |m, *args|
|
|
|
|
m.call(*args)
|
|
|
|
|
|
|
|
expect(Gitlab::ApplicationContext.current)
|
|
|
|
.to include('meta.user' => user.username,
|
|
|
|
'meta.caller_id' => 'PasswordsController#update')
|
|
|
|
end
|
|
|
|
|
|
|
|
subject
|
|
|
|
end
|
2020-11-24 15:15:51 +05:30
|
|
|
end
|
|
|
|
end
|
2017-09-10 17:25:29 +05:30
|
|
|
end
|