User#find_by_any_email to respect confirmed flag on secondary emails
This commit is contained in:
parent
3b23d06cbe
commit
350f2ba762
|
@ -363,7 +363,7 @@ class User < ActiveRecord::Base
|
||||||
from_users = from_users.confirmed if confirmed
|
from_users = from_users.confirmed if confirmed
|
||||||
|
|
||||||
from_emails = joins(:emails).where(emails: { email: emails })
|
from_emails = joins(:emails).where(emails: { email: emails })
|
||||||
from_emails = from_emails.confirmed if confirmed
|
from_emails = from_emails.confirmed.merge(Email.confirmed) if confirmed
|
||||||
|
|
||||||
items = [from_users, from_emails]
|
items = [from_users, from_emails]
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
title: User#find_by_any_email to respect confirmed flag on secondary emails
|
||||||
|
merge_request: 23181
|
||||||
|
author:
|
||||||
|
type: fixed
|
|
@ -1137,12 +1137,38 @@ describe User do
|
||||||
expect(described_class.find_by_any_email(user.email.upcase, confirmed: true)).to eq user
|
expect(described_class.find_by_any_email(user.email.upcase, confirmed: true)).to eq user
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'finds by secondary email' do
|
context 'finds by secondary email' do
|
||||||
email = create(:email, email: 'foo@example.com')
|
let(:user) { email.user }
|
||||||
user = email.user
|
|
||||||
|
|
||||||
expect(described_class.find_by_any_email(email.email)).to eq user
|
context 'primary email confirmed' do
|
||||||
expect(described_class.find_by_any_email(email.email, confirmed: true)).to eq user
|
context 'secondary email confirmed' do
|
||||||
|
let!(:email) { create(:email, :confirmed, email: 'foo@example.com') }
|
||||||
|
|
||||||
|
it 'finds user respecting the confirmed flag' do
|
||||||
|
expect(described_class.find_by_any_email(email.email)).to eq user
|
||||||
|
expect(described_class.find_by_any_email(email.email, confirmed: true)).to eq user
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'secondary email not confirmed' do
|
||||||
|
let!(:email) { create(:email, email: 'foo@example.com') }
|
||||||
|
|
||||||
|
it 'finds user respecting the confirmed flag' do
|
||||||
|
expect(described_class.find_by_any_email(email.email)).to eq user
|
||||||
|
expect(described_class.find_by_any_email(email.email, confirmed: true)).to be_nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'primary email not confirmed' do
|
||||||
|
let(:user) { create(:user, confirmed_at: nil) }
|
||||||
|
let!(:email) { create(:email, :confirmed, user: user, email: 'foo@example.com') }
|
||||||
|
|
||||||
|
it 'finds user respecting the confirmed flag' do
|
||||||
|
expect(described_class.find_by_any_email(email.email)).to eq user
|
||||||
|
expect(described_class.find_by_any_email(email.email, confirmed: true)).to be_nil
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns nil when nothing found' do
|
it 'returns nil when nothing found' do
|
||||||
|
|
Loading…
Reference in New Issue