mirror of
https://github.com/gitlabhq/gitlabhq.git
synced 2025-08-10 03:00:46 +00:00
174 lines
5.8 KiB
Ruby
174 lines
5.8 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require('spec_helper')
|
|
|
|
RSpec.describe UserSettings::ProfilesController, :request_store, feature_category: :user_profile do
|
|
let(:password) { User.random_password }
|
|
let(:user) { create(:user, password: password) }
|
|
|
|
describe 'POST update' do
|
|
it 'does not update password' do
|
|
sign_in(user)
|
|
new_password = User.random_password
|
|
expect do
|
|
post :update, params: { user: { password: new_password, password_confirmation: new_password } }
|
|
end.not_to change { user.reload.encrypted_password }
|
|
|
|
expect(response).to have_gitlab_http_status(:found)
|
|
end
|
|
|
|
it 'allows an email update from a user without an external email address' do
|
|
sign_in(user)
|
|
|
|
put :update, params: { user: { email: "john@gmail.com", name: "John", validation_password: password } }
|
|
|
|
user.reload
|
|
|
|
expect(response).to have_gitlab_http_status(:found)
|
|
expect(user.unconfirmed_email).to eq('john@gmail.com')
|
|
end
|
|
|
|
it "allows an email update without confirmation if existing verified email" do
|
|
user = create(:user)
|
|
create(:email, :confirmed, user: user, email: 'john@gmail.com')
|
|
sign_in(user)
|
|
|
|
put :update, params: { user: { email: "john@gmail.com", name: "John" } }
|
|
|
|
user.reload
|
|
|
|
expect(response).to have_gitlab_http_status(:found)
|
|
expect(user.unconfirmed_email).to eq nil
|
|
end
|
|
|
|
it 'ignores an email update from a user with an external email address' do
|
|
stub_omniauth_setting(sync_profile_from_provider: ['ldap'])
|
|
stub_omniauth_setting(sync_profile_attributes: true)
|
|
|
|
ldap_user = create(:omniauth_user)
|
|
ldap_user.create_user_synced_attributes_metadata(provider: 'ldap', name_synced: true, email_synced: true)
|
|
sign_in(ldap_user)
|
|
|
|
put :update, params: { user: { email: "john@gmail.com", name: "John" } }
|
|
|
|
ldap_user.reload
|
|
|
|
expect(response).to have_gitlab_http_status(:found)
|
|
expect(ldap_user.unconfirmed_email).not_to eq('john@gmail.com')
|
|
end
|
|
|
|
it 'ignores an email and name update but allows a location update from a user with external email and name,' \
|
|
'but not external location' do
|
|
stub_omniauth_setting(sync_profile_from_provider: ['ldap'])
|
|
stub_omniauth_setting(sync_profile_attributes: true)
|
|
|
|
ldap_user = create(:omniauth_user, name: 'Alex')
|
|
ldap_user.create_user_synced_attributes_metadata(
|
|
provider: 'ldap', name_synced: true, email_synced: true, location_synced: false
|
|
)
|
|
sign_in(ldap_user)
|
|
|
|
put :update, params: { user: { email: "john@gmail.com", name: "John", location: "City, Country" } }
|
|
|
|
ldap_user.reload
|
|
|
|
expect(response).to have_gitlab_http_status(:found)
|
|
expect(ldap_user.unconfirmed_email).not_to eq('john@gmail.com')
|
|
expect(ldap_user.name).not_to eq('John')
|
|
expect(ldap_user.location).to eq('City, Country')
|
|
end
|
|
|
|
it 'allows setting a user status', :freeze_time do
|
|
sign_in(user)
|
|
|
|
put :update, params: { user: { status: {
|
|
message: 'Working hard!', availability: 'busy', clear_status_after: '8_hours'
|
|
} } }
|
|
|
|
expect(user.reload.status.message).to eq('Working hard!')
|
|
expect(user.reload.status.availability).to eq('busy')
|
|
expect(user.reload.status.clear_status_after).to eq(8.hours.from_now)
|
|
expect(response).to have_gitlab_http_status(:found)
|
|
end
|
|
|
|
it 'allows updating user specified job title' do
|
|
title = 'Marketing Executive'
|
|
sign_in(user)
|
|
|
|
put :update, params: { user: { job_title: title } }
|
|
|
|
expect(user.reload.job_title).to eq(title)
|
|
expect(response).to have_gitlab_http_status(:found)
|
|
end
|
|
|
|
it 'allows updating user specified pronouns', :aggregate_failures do
|
|
pronouns = 'they/them'
|
|
sign_in(user)
|
|
|
|
put :update, params: { user: { pronouns: pronouns } }
|
|
|
|
expect(user.reload.pronouns).to eq(pronouns)
|
|
expect(response).to have_gitlab_http_status(:found)
|
|
end
|
|
|
|
it 'allows updating user specified pronunciation', :aggregate_failures do
|
|
user = create(:user, name: 'Example')
|
|
pronunciation = 'uhg-zaam-pl'
|
|
sign_in(user)
|
|
|
|
put :update, params: { user: { pronunciation: pronunciation } }
|
|
|
|
expect(user.reload.pronunciation).to eq(pronunciation)
|
|
expect(response).to have_gitlab_http_status(:found)
|
|
end
|
|
|
|
it 'allows updating user specified Discord User ID', :aggregate_failures do
|
|
discord_user_id = '1234567890123456789'
|
|
sign_in(user)
|
|
|
|
put :update, params: { user: { discord: discord_user_id } }
|
|
|
|
expect(user.reload.discord).to eq(discord_user_id)
|
|
expect(response).to have_gitlab_http_status(:found)
|
|
end
|
|
|
|
it 'allows updating user specified bluesky did identifier', :aggregate_failures do
|
|
bluesky_did_id = 'did:plc:ewvi7nxzyoun6zhxrhs64oiz'
|
|
sign_in(user)
|
|
|
|
put :update, params: { user: { bluesky: bluesky_did_id } }
|
|
|
|
expect(user.reload.bluesky).to eq(bluesky_did_id)
|
|
expect(response).to have_gitlab_http_status(:found)
|
|
end
|
|
|
|
it 'allows updating user specified mastodon usernames with varying top level domains', :aggregate_failures do
|
|
possible_mastodon_usernames = [
|
|
'@robin@example.com',
|
|
'@robin@mastadon.com',
|
|
'@john@mastadon.social',
|
|
'@drew@social.vivaldi.net',
|
|
'@adil@c.im'
|
|
]
|
|
sign_in(user)
|
|
|
|
possible_mastodon_usernames.each do |mastodon_username|
|
|
put :update, params: { user: { mastodon: mastodon_username } }
|
|
|
|
expect(user.reload.mastodon).to eq(mastodon_username)
|
|
expect(response).to have_gitlab_http_status(:found)
|
|
end
|
|
end
|
|
|
|
it 'allows updating user specified ORCID ID', :aggregate_failures do
|
|
orcid_id = '1234-1234-1234-1234'
|
|
sign_in(user)
|
|
|
|
put :update, params: { user: { orcid: orcid_id } }
|
|
|
|
expect(user.reload.orcid).to eq(orcid_id)
|
|
expect(response).to have_gitlab_http_status(:found)
|
|
end
|
|
end
|
|
end
|