Merge pull request #6482 from betagouv/user_can_transfer_all_dossier

Un usager peut transférer tous ces dossiers
This commit is contained in:
LeSim 2021-09-20 20:56:45 +02:00 committed by GitHub
commit 326956b002
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 86 additions and 0 deletions

View file

@ -5,6 +5,7 @@ module Users
if: -> { instructeur_signed_in? }
def show
@waiting_transfers = current_user.dossiers.joins(:transfer).group('dossier_transfers.email').count.to_a
end
def renew_api_token
@ -27,6 +28,12 @@ module Users
redirect_to profil_path
end
def transfer_all_dossiers
DossierTransfer.initiate(next_owner_email, current_user.dossiers)
flash.notice = t('.new_transfer', count: current_user.dossiers.count, email: next_owner_email)
redirect_to profil_path
end
private
def update_email_params
@ -40,5 +47,9 @@ module Users
def redirect_if_instructeur
redirect_to profil_path
end
def next_owner_email
params[:next_owner]
end
end
end

View file

@ -23,6 +23,22 @@
= f.email_field :email, value: nil, placeholder: 'Nouvelle adresse email', required: true
= f.submit "Changer mon adresse", class: 'button primary'
- if !instructeur_signed_in?
.card
.card-title= t('.transfer_title')
= t('.transfer_explication_html')
= form_tag transfer_all_dossiers_path, class: 'form' do
= email_field_tag :next_owner, nil, required: true
= submit_tag "Transférer tous mes dossiers", class: 'button primary', data: { confirm: t('.transfer_confirmation') }
- if @waiting_transfers.any?
.card.warning
.card-title= t('.waiting_transfers')
%ul
- @waiting_transfers.each do |email, nb_dossier|
%li= t('.one_waiting_transfer', email: email, count: nb_dossier)
- if current_administrateur.present?
.card
.card-title Jeton didentification de lAPI (token)

View file

@ -0,0 +1,16 @@
fr:
users:
profil:
show:
transfer_title: Transferer tous vos dossiers
transfer_explication_html: "<p>Cette fonctionnalité vous permet de changer le propriétaire de tous vos dossiers. C'est généralement utile lors d'un changement de poste ou si vous souhaitez fusionner plusieurs comptes.</p>
<p>Adresse email du destinataire de tous vos dossiers</p>"
waiting_transfers: "Transfert en attente :"
one_waiting_transfer:
one: "Le nouveau propriétaire %{email} doit confirmer le transfert d'un dossier en suivant les instructions reçues dans son mail."
other: "Le nouveau propriétaire %{email} doit confirmer le transfert de vos %{count} dossiers en suivant les instructions reçues dans son mail."
transfer_confirmation: "Confirmez-vous le transfert ?"
transfer_all_dossiers:
new_transfer:
one: "Le transfert d'un dossier à %{email} est en cours"
other: "Le transfert de %{count} dossiers à %{email} est en cours"

View file

@ -276,6 +276,7 @@ Rails.application.routes.draw do
# allow refresh 'renew api token' page
get 'renew-api-token' => redirect('/profil')
patch 'update_email' => 'profil#update_email'
post 'transfer_all_dossiers' => 'profil#transfer_all_dossiers'
end
#

View file

@ -5,6 +5,32 @@ describe Users::ProfilController, type: :controller do
before { sign_in(user) }
describe 'GET #show' do
render_views
before { post :show }
context 'when the current user is not an instructeur' do
it { expect(response.body).to include(I18n.t('users.profil.show.transfer_title')) }
context 'when an existing transfer exists' do
let(:dossiers) { Array.new(3) { create(:dossier, user: user) } }
let(:next_owner) { 'loulou@lou.com' }
let!(:transfer) { DossierTransfer.initiate(next_owner, dossiers) }
before { post :show }
it { expect(response.body).to include(I18n.t('users.profil.show.one_waiting_transfer', count: dossiers.count, email: next_owner)) }
end
end
context 'when the current user is an instructeur' do
let(:user) { create(:instructeur).user }
it { expect(response.body).not_to include(I18n.t('users.profil.show.transfer_title')) }
end
end
describe 'POST #renew_api_token' do
let(:administrateur) { create(:administrateur) }
@ -72,4 +98,20 @@ describe Users::ProfilController, type: :controller do
it { expect(response).to redirect_to(profil_path) }
end
end
context 'POST #transfer_all_dossiers' do
let!(:dossiers) { Array.new(3) { create(:dossier, user: user) } }
let(:next_owner) { 'loulou@lou.com' }
let(:created_transfer) { DossierTransfer.first }
before do
post :transfer_all_dossiers, params: { next_owner: next_owner }
end
it "transfer all dossiers" do
expect(created_transfer.email).to eq(next_owner)
expect(created_transfer.dossiers).to eq(dossiers)
expect(flash.notice).to eq("Le transfert de 3 dossiers à #{next_owner} est en cours")
end
end
end