-
Notifications
You must be signed in to change notification settings - Fork 5
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
gère aussi la migration pole-emploi.fr vers francetravail.fr
- Loading branch information
1 parent
341f676
commit 3287341
Showing
4 changed files
with
275 additions
and
227 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
# frozen_string_literal: true | ||
|
||
module ProConnectRecupereCompteHelper | ||
class << self | ||
def cree_ou_recupere_compte(user_info) | ||
email = user_info['email'].strip.downcase | ||
compte = Compte.find_by(id_pro_connect: user_info['sub']) | ||
if compte.present? && compte.email != email | ||
compte = actualise_email_compte_existant(compte, email) | ||
end | ||
if compte.blank? && email.end_with?('francetravail.fr') | ||
compte = cherche_compte_pole_emploi(email) | ||
end | ||
compte ||= Compte.find_or_create_by(email: email) | ||
actualise_autres_champs_et_sauve(compte, user_info) | ||
end | ||
|
||
private | ||
|
||
def actualise_email_compte_existant(compte, email) | ||
compte_existant = Compte.find_by(email: email) | ||
if compte_existant.present? | ||
compte.update!(id_pro_connect: nil) | ||
compte = compte_existant | ||
else | ||
compte.email = email | ||
compte.skip_reconfirmation! | ||
compte.confirmed_at = Time.zone.now | ||
end | ||
compte | ||
end | ||
|
||
def cherche_compte_pole_emploi(email) | ||
email_pe = email.gsub('francetravail.fr', 'pole-emploi.fr') | ||
compte = Compte.find_by(email: email_pe) | ||
compte&.email = email | ||
compte&.skip_reconfirmation! | ||
compte&.confirmed_at = Time.zone.now | ||
compte | ||
end | ||
|
||
def actualise_autres_champs_et_sauve(compte, user_info) | ||
compte.id_pro_connect = user_info['sub'] | ||
compte.prenom = user_info['given_name'] | ||
compte.nom = user_info['usual_name'] | ||
compte.password = SecureRandom.uuid if compte.encrypted_password.blank? | ||
compte.confirmed_at ||= Time.zone.now | ||
compte.save! | ||
compte | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -20,195 +20,4 @@ | |
expect(session[:pc_logout_token]).to be_nil | ||
end | ||
end | ||
|
||
describe '#cree_ou_recupere_compte' do | ||
let(:id_ic) { 'identifiant_ic' } | ||
|
||
context "le compte n'existe pas" do | ||
it do | ||
Timecop.freeze(aujourdhui) do | ||
compte = described_class.cree_ou_recupere_compte({ | ||
'sub' => id_ic, | ||
'email' => email, | ||
'given_name' => 'prénom', | ||
'usual_name' => 'nom' | ||
}) | ||
expect(compte).not_to be_nil | ||
expect(compte.email).to eq(email) | ||
expect(compte.prenom).to eq('prénom') | ||
expect(compte.nom).to eq('nom') | ||
expect(compte.confirmed_at).to eq(aujourdhui) | ||
expect(compte.password).not_to be_nil | ||
expect(compte.id_pro_connect).to eq(id_ic) | ||
end | ||
end | ||
end | ||
|
||
context 'le compte existe déjà en base sans id inclusion connect' do | ||
before do | ||
create :compte_admin, email: email | ||
end | ||
|
||
it do | ||
Timecop.freeze(aujourdhui) do | ||
compte = described_class.cree_ou_recupere_compte({ | ||
'sub' => id_ic, | ||
'email' => email, | ||
'given_name' => 'prénom', | ||
'usual_name' => 'nom' | ||
}) | ||
expect(compte).not_to be_nil | ||
expect(compte.email).to eq(email) | ||
expect(compte.prenom).to eq('prénom') | ||
expect(compte.nom).to eq('nom') | ||
expect(compte.confirmed_at).to eq(aujourdhui) | ||
expect(compte.password).to be_nil | ||
expect(compte.id_pro_connect).to eq(id_ic) | ||
end | ||
end | ||
end | ||
|
||
context 'le compte existe déjà en base sans id inclusion connect, email avec majuscule' do | ||
before do | ||
create :compte_admin, email: email | ||
end | ||
|
||
it do | ||
Timecop.freeze(aujourdhui) do | ||
compte = described_class.cree_ou_recupere_compte({ | ||
'sub' => id_ic, | ||
'email' => '[email protected]', | ||
'given_name' => 'prénom', | ||
'usual_name' => 'nom' | ||
}) | ||
expect(compte).not_to be_nil | ||
expect(compte.email).to eq(email) | ||
expect(compte.prenom).to eq('prénom') | ||
expect(compte.nom).to eq('nom') | ||
expect(compte.confirmed_at).to eq(aujourdhui) | ||
expect(compte.password).to be_nil | ||
expect(compte.id_pro_connect).to eq(id_ic) | ||
end | ||
end | ||
end | ||
|
||
context 'le compte existe déjà en base même email, mais effacé' do | ||
before do | ||
create :compte_admin, email: email, confirmed_at: hier, deleted_at: hier | ||
end | ||
|
||
it do | ||
Timecop.freeze(aujourdhui) do | ||
compte = described_class.cree_ou_recupere_compte({ | ||
'sub' => id_ic, | ||
'email' => email, | ||
'given_name' => 'prénom', | ||
'usual_name' => 'nom' | ||
}) | ||
expect(compte).not_to be_nil | ||
expect(compte.prenom).to eq('prénom') | ||
expect(compte.nom).to eq('nom') | ||
expect(compte.email).to eq(email) | ||
expect(compte.confirmed_at).to eq(aujourdhui) | ||
expect(compte.password).not_to be_nil | ||
expect(compte.id_pro_connect).to eq(id_ic) | ||
expect(compte.id).not_to eq(Compte.only_deleted.find_by(email: email).id) | ||
end | ||
end | ||
end | ||
|
||
context 'le compte existe déjà en base avec id inclusion connect, même email' do | ||
before do | ||
create :compte_admin, email: email, confirmed_at: hier, id_pro_connect: id_ic | ||
end | ||
|
||
it do | ||
Timecop.freeze(aujourdhui) do | ||
compte = described_class.cree_ou_recupere_compte({ | ||
'sub' => id_ic, | ||
'email' => email, | ||
'given_name' => 'prénom', | ||
'usual_name' => 'nom' | ||
}) | ||
expect(compte).not_to be_nil | ||
expect(compte.prenom).to eq('prénom') | ||
expect(compte.nom).to eq('nom') | ||
expect(compte.email).to eq(email) | ||
expect(compte.confirmed_at).to eq(hier) | ||
expect(compte.password).to be_nil | ||
expect(compte.id_pro_connect).to eq(id_ic) | ||
end | ||
end | ||
end | ||
|
||
context 'le compte existe déjà en base avec id inclusion connect, email différent' do | ||
before do | ||
create :compte_admin, email: ancien_email, confirmed_at: hier, id_pro_connect: id_ic | ||
end | ||
|
||
it do | ||
Timecop.freeze(aujourdhui) do | ||
compte = described_class.cree_ou_recupere_compte({ | ||
'sub' => id_ic, | ||
'email' => email, | ||
'given_name' => 'prénom', | ||
'usual_name' => 'nom' | ||
}) | ||
expect(compte).not_to be_nil | ||
expect(compte.prenom).to eq('prénom') | ||
expect(compte.nom).to eq('nom') | ||
expect(compte.email).to eq(email) | ||
expect(compte.confirmed_at).to eq(aujourdhui) | ||
expect(compte.password).to be_nil | ||
expect(compte.id_pro_connect).to eq(id_ic) | ||
end | ||
end | ||
end | ||
|
||
context "Il existe deux comptes en base dans le cas d'une mise à jourd d'email" do | ||
before do | ||
create :compte_admin, email: email, confirmed_at: hier | ||
create :compte_admin, email: ancien_email, confirmed_at: hier, id_pro_connect: id_ic | ||
end | ||
|
||
it do | ||
Timecop.freeze(aujourdhui) do | ||
compte = described_class.cree_ou_recupere_compte({ | ||
'sub' => id_ic, | ||
'email' => email, | ||
'given_name' => 'prénom', | ||
'usual_name' => 'nom' | ||
}) | ||
expect(compte).not_to be_nil | ||
expect(compte.prenom).to eq('prénom') | ||
expect(compte.nom).to eq('nom') | ||
expect(compte.email).to eq(email) | ||
expect(compte.confirmed_at).to eq(hier) | ||
expect(compte.password).to be_nil | ||
expect(compte.id_pro_connect).to eq(id_ic) | ||
ancien_compte = Compte.find_by(email: ancien_email) | ||
expect(ancien_compte).not_to be_nil | ||
expect(ancien_compte.id_pro_connect).to be_nil | ||
end | ||
end | ||
end | ||
|
||
context 'le compte existe déjà en base et avec un email déjà confirmé' do | ||
before do | ||
create :compte_admin, email: email, confirmed_at: hier | ||
end | ||
|
||
it do | ||
Timecop.freeze(aujourdhui) do | ||
compte = described_class.cree_ou_recupere_compte({ | ||
'sub' => id_ic, | ||
'email' => email, | ||
'given_name' => 'prénom', | ||
'usual_name' => 'nom' | ||
}) | ||
expect(compte.confirmed_at).to eq(hier) | ||
end | ||
end | ||
end | ||
end | ||
end |
Oops, something went wrong.