demarches-normaliennes/spec/controllers/users/transfers_controller_spec.rb
2024-07-25 12:24:25 +02:00

105 lines
3.2 KiB
Ruby
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

describe Users::TransfersController, type: :controller do
let(:sender_user) { create(:user) }
let(:recipient_user) { create(:user) }
let(:dossier) { create(:dossier, user: sender_user) }
describe 'DELETE destroy' do
context "as transfer receiver" do
let(:dossier_transfert) { DossierTransfer.initiate(recipient_user.email, [dossier]) }
subject { delete :destroy, params: { id: dossier_transfert.id } }
before do
sign_in(recipient_user)
end
it { expect { subject }.not_to raise_error }
it "deletes dossier transfert" do
subject
expect { dossier_transfert.reload }.to raise_error(ActiveRecord::RecordNotFound)
expect { (flash.notice).to eq('La demande de transfert a été supprimée avec succès') }
expect { (subject).to redirect_to dossiers_path }
end
end
context "as transfer sender" do
let(:dossier_transfert) { DossierTransfer.initiate(recipient_user.email, [dossier]) }
subject { delete :destroy, params: { id: dossier_transfert.id } }
before do
sign_in(sender_user)
end
it { expect { subject }.not_to raise_error }
it "deletes dossier transfert" do
subject
expect { dossier_transfert.reload }.to raise_error(ActiveRecord::RecordNotFound)
end
end
context "as transfer unauthorized" do
let(:dossier_transfert) { DossierTransfer.initiate(recipient_user.email, [dossier]) }
let(:random_user) { create(:user) }
subject { delete :destroy, params: { id: dossier_transfert.id } }
before do
sign_in(random_user)
end
it { expect { subject }.not_to raise_error }
it "does not delete dossier transfert" do
subject
expect { dossier_transfert.reload.to eq(dossier_transfert) }
expect { (flash.alert).to eq("Vous n'avez pas l'autorisation pour supprimer cette demande de transfert") }
expect { (subject).to redirect_to dossiers_path }
end
end
end
describe "POST create" do
subject { post :create, params: { dossier_transfer: { email: email, dossier: dossier.id } } }
before do
sign_in(sender_user)
subject
end
context "with valid email" do
let(:email) { "test@rspec.net" }
it { expect(DossierTransfer.last.email).to eq(email) }
it { expect(DossierTransfer.last.dossiers).to eq([dossier]) }
end
context 'with upper case email' do
let(:email) { "Test@rspec.net" }
it { expect(DossierTransfer.last.email).to eq(email.strip.downcase) }
end
shared_examples 'email error' do
it { expect { subject }.not_to change { DossierTransfer.count } }
it { expect(flash.alert).to include(expected_error) }
it { is_expected.to redirect_to transferer_dossier_path(dossier.id) }
end
context "when email is empty" do
let(:email) { "" }
it_behaves_like 'email error' do
let(:expected_error) { 'Ladresse email doit être rempli' }
end
end
context "when email is invalid" do
let(:email) { "not-an-email" }
it_behaves_like 'email error' do
let(:expected_error) { "Ladresse email est invalide. Saisir une adresse électronique valide, exemple : adresse@mail.com" }
end
end
end
end