summaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
authorBrett Walker <brett@digitalmoksha.com>2017-09-11 19:12:57 +0200
committerBrett Walker <brett@digitalmoksha.com>2017-09-23 15:24:53 +0200
commita9b31786971d83c193a1430df7c5c4550ba5aa6b (patch)
treef44fc10f5eb558644dfa3e246d88e3b721ebd03d /spec
parent4457ae827251904c28a30c3db06e05495a42b484 (diff)
downloadgitlab-ce-a9b31786971d83c193a1430df7c5c4550ba5aa6b.tar.gz
Make GPG signature verification work with non-primary email (#36959)
Diffstat (limited to 'spec')
-rw-r--r--spec/factories/emails.rb2
-rw-r--r--spec/models/gpg_key_spec.rb13
-rw-r--r--spec/models/user_spec.rb56
3 files changed, 55 insertions, 16 deletions
diff --git a/spec/factories/emails.rb b/spec/factories/emails.rb
index 8303861bcfe..c9ab87a15aa 100644
--- a/spec/factories/emails.rb
+++ b/spec/factories/emails.rb
@@ -2,5 +2,7 @@ FactoryGirl.define do
factory :email do
user
email { generate(:email_alias) }
+
+ trait(:confirmed) { confirmed_at Time.now }
end
end
diff --git a/spec/models/gpg_key_spec.rb b/spec/models/gpg_key_spec.rb
index fadc8bfeb61..49c608b284f 100644
--- a/spec/models/gpg_key_spec.rb
+++ b/spec/models/gpg_key_spec.rb
@@ -88,12 +88,21 @@ describe GpgKey do
describe '#emails_with_verified_status' do
it 'email is verified if the user has the matching email' do
- user = create :user, email: 'bette.cartwright@example.com'
+ user = create :user, email: 'bette.cartwright@example.com'
gpg_key = create :gpg_key, key: GpgHelpers::User2.public_key, user: user
+ email_unconfirmed = create :email, user: user
+ user.reload
+
+ expect(gpg_key.emails_with_verified_status).to eq(
+ 'bette.cartwright@example.com' => true,
+ 'bette.cartwright@example.net' => false
+ )
+ email_confirmed = create :email, :confirmed, user: user, email: 'bette.cartwright@example.net'
+ user.reload
expect(gpg_key.emails_with_verified_status).to eq(
'bette.cartwright@example.com' => true,
- 'bette.cartwright@example.net' => false
+ 'bette.cartwright@example.net' => true
)
end
end
diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb
index c1affa812aa..e047027adab 100644
--- a/spec/models/user_spec.rb
+++ b/spec/models/user_spec.rb
@@ -1093,6 +1093,48 @@ describe User do
end
end
+ describe '#all_emails' do
+ let(:user) { create(:user) }
+
+ it 'returns all emails' do
+ email_confirmed = create :email, user: user, confirmed_at: Time.now
+ email_unconfirmed = create :email, user: user
+ user.reload
+ expect(user.all_emails).to eq([user.email, email_unconfirmed.email, email_confirmed.email])
+ end
+ end
+
+ describe '#all_verified_emails' do
+ let(:user) { create(:user) }
+
+ it 'returns only confirmed emails' do
+ email_confirmed = create :email, user: user, confirmed_at: Time.now
+ email_unconfirmed = create :email, user: user
+ user.reload
+ expect(user.all_verified_emails).to eq([user.email, email_confirmed.email])
+ end
+ end
+
+ describe '#verified_email?' do
+ let(:user) { create(:user) }
+
+ it 'returns true when the email is verified/confirmed' do
+ email_confirmed = create :email, user: user, confirmed_at: Time.now
+ email_unconfirmed = create :email, user: user
+ user.reload
+
+ expect(user.verified_email?(user.email)).to be_truthy
+ expect(user.verified_email?(email_confirmed.email)).to be_truthy
+ end
+
+ it 'returns false when the email is not verified/confirmed' do
+ email_unconfirmed = create :email, user: user
+ user.reload
+
+ expect(user.verified_email?(email_unconfirmed.email)).to be_falsy
+ end
+ end
+
describe '#requires_ldap_check?' do
let(:user) { described_class.new }
@@ -2073,20 +2115,6 @@ describe User do
end
end
- describe '#verified_email?' do
- it 'returns true when the email is the primary email' do
- user = build :user, email: 'email@example.com'
-
- expect(user.verified_email?('email@example.com')).to be true
- end
-
- it 'returns false when the email is not the primary email' do
- user = build :user, email: 'email@example.com'
-
- expect(user.verified_email?('other_email@example.com')).to be false
- end
- end
-
describe '#sync_attribute?' do
let(:user) { described_class.new }