amelioration(UsersDeletionService.expired_users_with_dossiers): ignore les usagers ayant un dossier en instruction, meme si il a des dossiers en brouillon ou autre

This commit is contained in:
Martin 2023-11-17 09:41:18 +01:00 committed by mfo
parent 3a9b520a93
commit bfe27b5eb7
3 changed files with 28 additions and 16 deletions

View file

@ -32,16 +32,10 @@ class Expired::UsersDeletionService < Expired::MailRateLimiter
# rubocop:disable DS/Unscoped
def expired_users_with_dossiers
users = User.arel_table
dossiers = Dossier.arel_table
expired_users
.joins(
users.join(dossiers, Arel::Nodes::InnerJoin)
.on(users[:id].eq(dossiers[:user_id])
.and(dossiers[:state].not_eq(Dossier.states.fetch(:en_instruction))))
.join_sources
)
.joins(:dossiers)
.group("users.id")
.having("NOT 'en_instruction' = ANY(ARRAY_AGG(dossiers.state))")
end
def expired_users_without_dossiers

View file

@ -5,18 +5,20 @@
%p
Cela fait plus de deux ans que vous ne vous êtes pas connecté à #{APPLICATION_NAME}.
%br
Dans le respect du RGPD, nous allons
%strong supprimer votre compte d'ici #{distance_of_time_in_words(Expired::REMAINING_WEEKS_BEFORE_EXPIRATION.weeks)}.
- if @user.dossiers.not_brouillon.count == 0
Aussi vous n'avez plus de dossier sur la plateforme.
%p
%strong Ne vous en faites pas,
vos dossiers restent conservé par l'administration. À tout moment vous pourrez re-créer une compte sur notre plateforme.
%br
Mais dans l'attente, nous tenons a respecter le RGPD et protéger ainsi votre vie privée.
Dans le respect du règlement général sur la protection des données, nous allons
%strong supprimer votre compte d'ici #{distance_of_time_in_words(Expired::REMAINING_WEEKS_BEFORE_EXPIRATION.weeks)}.
- if @user.dossiers.not_brouillon.count > 0
%p
%strong Ne vous en faites pas,
vos dossiers traités sont conservés par l'administration. Aussi, à tout moment vous pourrez re-créer une compte sur notre plateforme.
Au besoin, vous pouvez télécharger vos dossiers en suivant ce lien :
= link_to dossiers_url, dossiers_url
%p Vous souhaitez conserver votre compte et vos dossiers ? Connectez-vous avec vos identifiants et nous conserverons vos données.
= render partial: "layouts/mailers/signature"

View file

@ -165,6 +165,14 @@ describe Expired::UsersDeletionService do
it { is_expected.to include(user) }
end
context 'when user is expired and has a many dossier brouillon' do
before do
create(:dossier, :brouillon, user:, created_at: last_signed_in_expired)
create(:dossier, :brouillon, user:, created_at: last_signed_in_expired)
end
it { is_expected.to eq([user]) }
end
context 'when user is expired and has a dossier en_construction' do
let(:dossier) { create(:dossier, :en_construction, user:, created_at: last_signed_in_expired) }
it { is_expected.to include(user) }
@ -175,6 +183,14 @@ describe Expired::UsersDeletionService do
it { is_expected.not_to include(user) }
end
context 'when user is expired and has a dossier en_instruction plus another one brouillon' do
before do
create(:dossier, :en_instruction, user:, created_at: last_signed_in_expired)
create(:dossier, :brouillon, user:, created_at: last_signed_in_expired)
end
it { is_expected.to eq([]) }
end
context 'when user is expired and has a dossier termine' do
let(:dossier) { create(:dossier, :accepte, user:, created_at: last_signed_in_expired) }
it { is_expected.to include(user) }