Corrige un crash quand l'email France Connect n'a pas la même c… (#4054)

Usager : corrige une erreur lorsque l'email France Connect n'a pas la même casse que sur demarches-simplifiees.fr
This commit is contained in:
Pierre de La Morinerie 2019-07-09 16:24:08 +02:00 committed by GitHub
commit 214b8b2837
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 24 additions and 5 deletions

View file

@ -13,7 +13,7 @@ class FranceConnect::ParticulierController < ApplicationController
fetched_fci.tap(&:save) fetched_fci.tap(&:save)
if fci.user.nil? if fci.user.nil?
user = User.find_or_create_by(email: fci.email_france_connect) do |new_user| user = User.find_or_create_by!(email: fci.email_france_connect.downcase) do |new_user|
new_user.password = Devise.friendly_token[0, 20] new_user.password = Devise.friendly_token[0, 20]
new_user.confirmed_at = Time.zone.now new_user.confirmed_at = Time.zone.now
end end

View file

@ -71,11 +71,30 @@ describe FranceConnect::ParticulierController, type: :controller do
end end
context 'when france_connect_particulier_id does not have an associate user' do context 'when france_connect_particulier_id does not have an associate user' do
it { is_expected.to redirect_to(root_path) } context 'when the email address is not used yet' do
it { expect { subject }.to change(User, :count).by(1) }
it { is_expected.to redirect_to(root_path) }
end
it do context 'when the email address is already used' do
subject let!(:user) { create(:user, email: email, france_connect_information: nil) }
expect(User.find_by(email: email)).not_to be_nil
it 'associates the france_connect infos with the existing user' do
expect { subject }.not_to change(User, :count)
expect(user.reload.loged_in_with_france_connect).to eq(User.loged_in_with_france_connects.fetch(:particulier))
expect(subject).to redirect_to(root_path)
end
end
context 'when a differently cased email address is already used' do
let(:email) { 'TEST@test.com' }
let!(:user) { create(:user, email: email.downcase, france_connect_information: nil) }
it 'associates the france_connect infos with the existing user' do
expect { subject }.not_to change(User, :count)
expect(user.reload.loged_in_with_france_connect).to eq(User.loged_in_with_france_connects.fetch(:particulier))
expect(subject).to redirect_to(root_path)
end
end end
end end
end end