summaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
authorNick Thomas <nick@gitlab.com>2018-09-14 09:52:09 +0000
committerDouwe Maan <douwe@gitlab.com>2018-09-14 09:52:09 +0000
commitfc0194b589238df6171ba3f4aeec79f8034b7128 (patch)
treecf61e7a7f0fa45b80de2a47f59d34bb60c1e4aab /spec
parent9de6efe6d18b0c6881aa5074d6e805ac6202d5e5 (diff)
downloadgitlab-ce-fc0194b589238df6171ba3f4aeec79f8034b7128.tar.gz
Resolve "Add functionality to change what email address online actions commit using"
Diffstat (limited to 'spec')
-rw-r--r--spec/factories/emails.rb1
-rw-r--r--spec/lib/gitlab/git/user_spec.rb15
-rw-r--r--spec/models/user_spec.rb50
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