diff options
Diffstat (limited to 'spec/models/user_spec.rb')
-rw-r--r-- | spec/models/user_spec.rb | 138 |
1 files changed, 102 insertions, 36 deletions
diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 21c5aea514a..b5d4614d206 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -6,6 +6,7 @@ RSpec.describe User do include ProjectForksHelper include TermsHelper include ExclusiveLeaseHelpers + include LdapHelpers it_behaves_like 'having unique enum values' @@ -98,7 +99,7 @@ RSpec.describe User do it { is_expected.to have_many(:group_members) } it { is_expected.to have_many(:groups) } it { is_expected.to have_many(:keys).dependent(:destroy) } - it { is_expected.to have_many(:expired_and_unnotified_keys) } + it { is_expected.to have_many(:expired_today_and_unnotified_keys) } it { is_expected.to have_many(:deploy_keys).dependent(:nullify) } it { is_expected.to have_many(:group_deploy_keys) } it { is_expected.to have_many(:events).dependent(:delete_all) } @@ -1123,7 +1124,7 @@ RSpec.describe User do end describe 'after commit hook' do - describe '#update_emails_with_primary_email' do + describe 'when the primary email is updated' do before do @user = create(:user, email: 'primary@example.com').tap do |user| user.skip_reconfirmation! @@ -1132,13 +1133,7 @@ RSpec.describe User do @user.reload end - it 'gets called when email updated' do - expect(@user).to receive(:update_emails_with_primary_email) - - @user.update!(email: 'new_primary@example.com') - end - - it 'adds old primary to secondary emails when secondary is a new email' do + it 'keeps old primary to secondary emails when secondary is a new email' do @user.update!(email: 'new_primary@example.com') @user.reload @@ -1146,22 +1141,6 @@ RSpec.describe User do expect(@user.emails.pluck(:email)).to match_array([@secondary.email, 'primary@example.com']) end - it 'adds old primary to secondary emails if secondary is becoming a primary' do - @user.update!(email: @secondary.email) - @user.reload - - expect(@user.emails.count).to eq 1 - expect(@user.emails.first.email).to eq 'primary@example.com' - end - - it 'transfers old confirmation values into new secondary' do - @user.update!(email: @secondary.email) - @user.reload - - expect(@user.emails.count).to eq 1 - expect(@user.emails.first.confirmed_at).not_to eq nil - end - context 'when the first email was unconfirmed and the second email gets confirmed' do let(:user) { create(:user, :unconfirmed, email: 'should-be-unconfirmed@test.com') } @@ -1178,11 +1157,8 @@ RSpec.describe User do expect(user).to be_confirmed end - it 'keeps the unconfirmed email unconfirmed' do - email = user.emails.first - - expect(email.email).to eq('should-be-unconfirmed@test.com') - expect(email).not_to be_confirmed + it 'does not add unconfirmed email to secondary' do + expect(user.emails.map(&:email)).not_to include('should-be-unconfirmed@test.com') end it 'has only one email association' do @@ -1244,7 +1220,7 @@ RSpec.describe User do expect(user.email).to eq(confirmed_email) end - it 'moves the old email' do + it 'keeps the old email' do email = user.reload.emails.first expect(email.email).to eq(old_confirmed_email) @@ -1499,7 +1475,7 @@ RSpec.describe User do allow_any_instance_of(ApplicationSetting).to receive(:send_user_confirmation_email).and_return(true) end - let(:user) { create(:user, confirmed_at: nil, unconfirmed_email: 'test@gitlab.com') } + let(:user) { create(:user, :unconfirmed, unconfirmed_email: 'test@gitlab.com') } it 'returns unconfirmed' do expect(user.confirmed?).to be_falsey @@ -1509,6 +1485,22 @@ RSpec.describe User do user.confirm expect(user.confirmed?).to be_truthy end + + it 'adds the confirmed primary email to emails' do + expect(user.emails.confirmed.map(&:email)).not_to include(user.email) + + user.confirm + + expect(user.emails.confirmed.map(&:email)).to include(user.email) + end + end + + context 'if the user is created with confirmed_at set to a time' do + let!(:user) { create(:user, email: 'test@gitlab.com', confirmed_at: Time.now.utc) } + + it 'adds the confirmed primary email to emails upon creation' do + expect(user.emails.confirmed.map(&:email)).to include(user.email) + end end describe '#to_reference' do @@ -2216,7 +2208,7 @@ RSpec.describe User do end context 'primary email not confirmed' do - let(:user) { create(:user, confirmed_at: nil) } + let(:user) { create(:user, :unconfirmed) } let!(:email) { create(:email, :confirmed, user: user, email: 'foo@example.com') } it 'finds user respecting the confirmed flag' do @@ -2231,7 +2223,7 @@ RSpec.describe User do end it 'returns nil when user is not confirmed' do - user = create(:user, email: 'foo@example.com', confirmed_at: nil) + user = create(:user, :unconfirmed, email: 'foo@example.com') expect(described_class.find_by_any_email(user.email, confirmed: false)).to eq(user) expect(described_class.find_by_any_email(user.email, confirmed: true)).to be_nil @@ -4155,6 +4147,23 @@ RSpec.describe User do end end + describe '#remove_project_authorizations' do + let_it_be(:project1) { create(:project) } + let_it_be(:project2) { create(:project) } + let_it_be(:project3) { create(:project) } + let_it_be(:user) { create(:user) } + + it 'removes the project authorizations of the user, in specified projects' do + create(:project_authorization, user: user, project: project1) + create(:project_authorization, user: user, project: project2) + create(:project_authorization, user: user, project: project3) + + user.remove_project_authorizations([project1.id, project2.id]) + + expect(user.project_authorizations.pluck(:project_id)).to match_array([project3.id]) + end + end + describe '#access_level=' do let(:user) { build(:user) } @@ -5817,7 +5826,7 @@ RSpec.describe User do end describe '#active_for_authentication?' do - subject { user.active_for_authentication? } + subject(:active_for_authentication?) { user.active_for_authentication? } let(:user) { create(:user) } @@ -5827,6 +5836,14 @@ RSpec.describe User do end it { is_expected.to be false } + + it 'does not check if LDAP is allowed' do + stub_ldap_setting(enabled: true) + + expect(Gitlab::Auth::Ldap::Access).not_to receive(:allowed?) + + active_for_authentication? + end end context 'when user is a ghost user' do @@ -5837,6 +5854,28 @@ RSpec.describe User do it { is_expected.to be false } end + context 'when user is ldap_blocked' do + before do + user.ldap_block + end + + it 'rechecks if LDAP is allowed when LDAP is enabled' do + stub_ldap_setting(enabled: true) + + expect(Gitlab::Auth::Ldap::Access).to receive(:allowed?) + + active_for_authentication? + end + + it 'does not check if LDAP is allowed when LDAP is not enabled' do + stub_ldap_setting(enabled: false) + + expect(Gitlab::Auth::Ldap::Access).not_to receive(:allowed?) + + active_for_authentication? + end + end + context 'based on user type' do using RSpec::Parameterized::TableSyntax @@ -6011,7 +6050,7 @@ RSpec.describe User do subject { user.confirmation_required_on_sign_in? } context 'when user is confirmed' do - let(:user) { build_stubbed(:user) } + let(:user) { create(:user) } it 'is falsey' do expect(user.confirmed?).to be_truthy @@ -6203,4 +6242,31 @@ RSpec.describe User do expect(described_class.get_ids_by_username([user_name])).to match_array([user_id]) end end + + describe 'user_project' do + it 'returns users project matched by username and public visibility' do + user = create(:user) + public_project = create(:project, :public, path: user.username, namespace: user.namespace) + create(:project, namespace: user.namespace) + + expect(user.user_project).to eq(public_project) + end + end + + describe 'user_readme' do + it 'returns readme from user project' do + user = create(:user) + create(:project, :repository, :public, path: user.username, namespace: user.namespace) + + expect(user.user_readme.name).to eq('README.md') + expect(user.user_readme.data).to include('testme') + end + + it 'returns nil if project is private' do + user = create(:user) + create(:project, :repository, :private, path: user.username, namespace: user.namespace) + + expect(user.user_readme).to be(nil) + end + end end |