AvisController: add redirection logic for various login cases
This commit is contained in:
parent
516a8c28c5
commit
f9aee06040
2 changed files with 64 additions and 12 deletions
|
@ -1,6 +1,7 @@
|
||||||
class Backoffice::AvisController < ApplicationController
|
class Backoffice::AvisController < ApplicationController
|
||||||
|
|
||||||
before_action :authenticate_gestionnaire!, except: [:sign_up, :create_gestionnaire]
|
before_action :authenticate_gestionnaire!, except: [:sign_up, :create_gestionnaire]
|
||||||
|
before_action :redirect_if_no_sign_up_needed, only: [:sign_up]
|
||||||
before_action :check_avis_exists_and_email_belongs_to_avis, only: [:sign_up, :create_gestionnaire]
|
before_action :check_avis_exists_and_email_belongs_to_avis, only: [:sign_up, :create_gestionnaire]
|
||||||
|
|
||||||
def create
|
def create
|
||||||
|
@ -68,6 +69,20 @@ class Backoffice::AvisController < ApplicationController
|
||||||
params.require(:avis).permit(:answer)
|
params.require(:avis).permit(:answer)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def redirect_if_no_sign_up_needed
|
||||||
|
avis = Avis.find(params[:id])
|
||||||
|
|
||||||
|
if current_gestionnaire.present?
|
||||||
|
# a gestionnaire is authenticated ... lets see if it can view the dossier
|
||||||
|
|
||||||
|
redirect_to backoffice_dossier_url(avis.dossier)
|
||||||
|
elsif avis.gestionnaire.present? && avis.gestionnaire.email == params[:email]
|
||||||
|
# the avis gestionnaire has already signed up and it sould sign in
|
||||||
|
|
||||||
|
redirect_to new_gestionnaire_session_url
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def check_avis_exists_and_email_belongs_to_avis
|
def check_avis_exists_and_email_belongs_to_avis
|
||||||
if !Avis.avis_exists_and_email_belongs_to_avis?(params[:id], params[:email])
|
if !Avis.avis_exists_and_email_belongs_to_avis?(params[:id], params[:email])
|
||||||
redirect_to url_for(root_path)
|
redirect_to url_for(root_path)
|
||||||
|
|
|
@ -72,23 +72,60 @@ describe Backoffice::AvisController, type: :controller do
|
||||||
let!(:avis) { Avis.create(email: invited_email, dossier: dossier) }
|
let!(:avis) { Avis.create(email: invited_email, dossier: dossier) }
|
||||||
let(:invitations_email) { true }
|
let(:invitations_email) { true }
|
||||||
|
|
||||||
before do
|
context 'when the new gestionnaire has never signed up' do
|
||||||
expect(Avis).to receive(:avis_exists_and_email_belongs_to_avis?)
|
before do
|
||||||
.with(avis.id.to_s, invited_email)
|
expect(Avis).to receive(:avis_exists_and_email_belongs_to_avis?)
|
||||||
.and_return(invitations_email)
|
.with(avis.id.to_s, invited_email)
|
||||||
get :sign_up, params: { id: avis.id, email: invited_email }
|
.and_return(invitations_email)
|
||||||
|
get :sign_up, params: { id: avis.id, email: invited_email }
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when the email belongs to the invitation' do
|
||||||
|
it { expect(subject.status).to eq(200) }
|
||||||
|
it { expect(assigns(:email)).to eq(invited_email) }
|
||||||
|
it { expect(assigns(:dossier)).to eq(dossier) }
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when the email does not belong to the invitation' do
|
||||||
|
let(:invitations_email) { false }
|
||||||
|
|
||||||
|
it { is_expected.to redirect_to root_path }
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when the email belongs to the invitation' do
|
context 'when the gestionnaire has already signed up and belongs to the invitation' do
|
||||||
it { expect(subject.status).to eq(200) }
|
let(:gestionnaire) { create(:gestionnaire, email: invited_email) }
|
||||||
it { expect(assigns(:email)).to eq(invited_email) }
|
let!(:avis) { Avis.create(dossier: dossier, gestionnaire: gestionnaire) }
|
||||||
it { expect(assigns(:dossier)).to eq(dossier) }
|
|
||||||
|
context 'when the gestionnaire is authenticated' do
|
||||||
|
before do
|
||||||
|
sign_in gestionnaire
|
||||||
|
get :sign_up, params: { id: avis.id, email: invited_email }
|
||||||
|
end
|
||||||
|
|
||||||
|
it { is_expected.to redirect_to backoffice_dossier_url(avis.dossier) }
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when the gestionnaire is not authenticated' do
|
||||||
|
before do
|
||||||
|
get :sign_up, params: { id: avis.id, email: invited_email }
|
||||||
|
end
|
||||||
|
|
||||||
|
it { is_expected.to redirect_to new_gestionnaire_session_url }
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when the email does not belong to the invitation' do
|
context 'when the gestionnaire has already signed up / is authenticated and does not belong to the invitation' do
|
||||||
let(:invitations_email) { false }
|
let(:gestionnaire) { create(:gestionnaire, email: 'other@gmail.com') }
|
||||||
|
let!(:avis) { Avis.create(email: invited_email, dossier: dossier) }
|
||||||
|
|
||||||
it { is_expected.to redirect_to root_path }
|
before do
|
||||||
|
sign_in gestionnaire
|
||||||
|
get :sign_up, params: { id: avis.id, email: invited_email }
|
||||||
|
end
|
||||||
|
|
||||||
|
# redirected to dossier but then the gestionnaire gonna be banished !
|
||||||
|
it { is_expected.to redirect_to backoffice_dossier_url(avis.dossier) }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue