diff options
Diffstat (limited to 'spec')
-rw-r--r-- | spec/factories/emails.rb | 1 | ||||
-rw-r--r-- | spec/lib/gitlab/git/user_spec.rb | 15 | ||||
-rw-r--r-- | spec/models/user_spec.rb | 50 |
3 files changed, 62 insertions, 4 deletions
diff --git a/spec/factories/emails.rb b/spec/factories/emails.rb index 4dc7961060a..d23ddf9d79b 100644 --- a/spec/factories/emails.rb +++ b/spec/factories/emails.rb @@ -4,5 +4,6 @@ FactoryBot.define do email { generate(:email_alias) } trait(:confirmed) { confirmed_at Time.now } + trait(:skip_validate) { to_create {|instance| instance.save(validate: false) } } end end diff --git a/spec/lib/gitlab/git/user_spec.rb b/spec/lib/gitlab/git/user_spec.rb index 99d850e1df9..d9d338206f8 100644 --- a/spec/lib/gitlab/git/user_spec.rb +++ b/spec/lib/gitlab/git/user_spec.rb @@ -22,10 +22,19 @@ describe Gitlab::Git::User do end describe '.from_gitlab' do - let(:user) { build(:user) } - subject { described_class.from_gitlab(user) } + context 'when no commit_email has been set' do + let(:user) { build(:user, email: 'alice@example.com', commit_email: nil) } + subject { described_class.from_gitlab(user) } - it { expect(subject).to eq(described_class.new(user.username, user.name, user.email, 'user-')) } + it { expect(subject).to eq(described_class.new(user.username, user.name, user.email, 'user-')) } + end + + context 'when commit_email has been set' do + let(:user) { build(:user, email: 'alice@example.com', commit_email: 'bob@example.com') } + subject { described_class.from_gitlab(user) } + + it { expect(subject).to eq(described_class.new(user.username, user.name, user.commit_email, 'user-')) } + end end describe '#==' do diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index bee4a3d24a7..27aec49e348 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -167,6 +167,55 @@ describe User do subject { build(:user).tap { |user| user.emails << build(:email, email: email_value) } } end + describe '#commit_email' do + subject(:user) { create(:user) } + + it 'defaults to the primary email' do + expect(user.email).to be_present + expect(user.commit_email).to eq(user.email) + end + + it 'defaults to the primary email when the column in the database is null' do + user.update_column(:commit_email, nil) + + found_user = described_class.find_by(id: user.id) + + expect(found_user.commit_email).to eq(user.email) + end + + it 'can be set to a confirmed email' do + confirmed = create(:email, :confirmed, user: user) + user.commit_email = confirmed.email + + expect(user).to be_valid + expect(user.commit_email).to eq(confirmed.email) + end + + it 'can not be set to an unconfirmed email' do + unconfirmed = create(:email, user: user) + user.commit_email = unconfirmed.email + + # This should set the commit_email attribute to the primary email + expect(user).to be_valid + expect(user.commit_email).to eq(user.email) + end + + it 'can not be set to a non-existent email' do + user.commit_email = 'non-existent-email@nonexistent.nonexistent' + + # This should set the commit_email attribute to the primary email + expect(user).to be_valid + expect(user.commit_email).to eq(user.email) + end + + it 'can not be set to an invalid email, even if confirmed' do + confirmed = create(:email, :confirmed, :skip_validate, user: user, email: 'invalid') + user.commit_email = confirmed.email + + expect(user).not_to be_valid + end + end + describe 'email' do context 'when no signup domains whitelisted' do before do @@ -1390,7 +1439,6 @@ describe User do it 'returns only confirmed emails' do email_confirmed = create :email, user: user, confirmed_at: Time.now create :email, user: user - user.reload expect(user.verified_emails).to match_array([user.email, email_confirmed.email]) end |