diff --git a/app/controllers/manager/dossiers_controller.rb b/app/controllers/manager/dossiers_controller.rb
index 5f64cb7e8..d947b6c9a 100644
--- a/app/controllers/manager/dossiers_controller.rb
+++ b/app/controllers/manager/dossiers_controller.rb
@@ -16,6 +16,21 @@ module Manager
end
end
+ def transfer_edit
+ @dossier = Dossier.find params[:id]
+ end
+
+ def transfer
+ transfer = DossierTransfer.create(email: params[:email], dossiers: [Dossier.find(params[:id])])
+ if transfer.persisted?
+ flash[:success] = "Une invitation de transfert a été envoyée à #{params[:email]}"
+ else
+ flash[:alert] = transfer.errors.full_messages.join(" ")
+ end
+
+ redirect_to manager_dossier_path(params[:id])
+ end
+
private
def unfiltered_list?
diff --git a/app/views/manager/dossiers/show.html.erb b/app/views/manager/dossiers/show.html.erb
index 8d3f108b7..50aee6daf 100644
--- a/app/views/manager/dossiers/show.html.erb
+++ b/app/views/manager/dossiers/show.html.erb
@@ -26,6 +26,13 @@ as well as a link to its edit page.
(Supprimé)
<% end %>
+
+ <% end %>
+
diff --git a/config/routes.rb b/config/routes.rb
index d244d5ade..2ab6b85a9 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -69,7 +69,10 @@ Rails.application.routes.draw do
end
end
- resources :dossiers, only: [:show]
+ resources :dossiers, only: [:show] do
+ get 'transfer_edit', on: :member
+ post 'transfer', on: :member
+ end
resources :bill_signatures, only: [:index]
diff --git a/spec/controllers/manager/dossiers_controller_spec.rb b/spec/controllers/manager/dossiers_controller_spec.rb
index 3bff00e01..54f103f62 100644
--- a/spec/controllers/manager/dossiers_controller_spec.rb
+++ b/spec/controllers/manager/dossiers_controller_spec.rb
@@ -34,4 +34,25 @@ describe Manager::DossiersController, type: :controller do
it { expect(subject).to match(%r{Nom\s+\*\s+Texte court\s+🟢\s+rempli}) }
end
+
+ describe "POST #transfer" do
+ before do
+ allow(DossierMailer).to receive(:notify_transfer).and_call_original
+ post :transfer, params: { id: @dossier.id, email: }
+ end
+
+ context 'with valid email' do
+ let(:email) { "chouette.gars@laposte.net" }
+
+ it { expect(flash[:success]).to eq("Une invitation de transfert a été envoyée à chouette.gars@laposte.net") }
+ it { expect(DossierMailer).to have_received(:notify_transfer) }
+ end
+
+ context 'with invalid email' do
+ let(:email) { "chouette" }
+
+ it { expect(flash[:alert]).to eq("L’adresse email est invalide") }
+ it { expect(DossierMailer).not_to have_received(:notify_transfer) }
+ end
+ end
end