From d4864bd80f11250b36e23976e475fb46ce60639d Mon Sep 17 00:00:00 2001 From: Bertrand Bougon Date: Fri, 10 Jan 2025 11:34:14 +0100 Subject: [PATCH] [PARCOURS DEMANDE DEVENIR AIDANT] Prends en compte le nouveau parcours : MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Crée la demande avec les informations de l’entité - Met à jour une demande existante - Publie l’événement avec l’information du type d’entité --- .../CapteurCommandeDevenirAidant.ts | 23 ++- .../devenir-aidant/DemandeDevenirAidant.ts | 9 ++ .../CapteurCommandeDevenirAidant.spec.ts | 132 +++++++++++++++++- 3 files changed, 161 insertions(+), 3 deletions(-) diff --git a/mon-aide-cyber-api/src/gestion-demandes/devenir-aidant/CapteurCommandeDevenirAidant.ts b/mon-aide-cyber-api/src/gestion-demandes/devenir-aidant/CapteurCommandeDevenirAidant.ts index 0df432d9a..d191076c8 100644 --- a/mon-aide-cyber-api/src/gestion-demandes/devenir-aidant/CapteurCommandeDevenirAidant.ts +++ b/mon-aide-cyber-api/src/gestion-demandes/devenir-aidant/CapteurCommandeDevenirAidant.ts @@ -1,5 +1,10 @@ import { CapteurCommande, Commande } from '../../domaine/commande'; -import { DemandeDevenirAidant, StatutDemande } from './DemandeDevenirAidant'; +import { + DemandeDevenirAidant, + EntiteDemande, + StatutDemande, + TypeEntite, +} from './DemandeDevenirAidant'; import { Entrepots } from '../../domaine/Entrepots'; import { FournisseurHorloge } from '../../infrastructure/horloge/FournisseurHorloge'; import { ErreurMAC } from '../../domaine/erreurMAC'; @@ -11,6 +16,7 @@ import { BusEvenement, Evenement } from '../../domaine/BusEvenement'; import crypto from 'crypto'; import { ErreurEnvoiEmail } from '../../api/messagerie/Messagerie'; import { ServiceAidant } from '../../espace-aidant/ServiceAidant'; +import { isBefore } from 'date-fns'; export type CommandeDevenirAidant = Omit & { type: 'CommandeDevenirAidant'; @@ -18,6 +24,7 @@ export type CommandeDevenirAidant = Omit & { mail: string; prenom: string; nom: string; + entite?: EntiteDemande; }; class ErreurDemandeDevenirAidant extends Error { @@ -72,6 +79,7 @@ export class CapteurCommandeDevenirAidant nom: commande.nom, prenom: commande.prenom, statut: StatutDemande.EN_COURS, + ...(commande.entite && { entite: commande.entite }), }; return this.entrepots @@ -95,7 +103,14 @@ export class CapteurCommandeDevenirAidant } private async demandeExiste(mail: string): Promise { - return await this.entrepots.demandesDevenirAidant().demandeExiste(mail); + return ( + isBefore( + FournisseurHorloge.maintenant(), + FournisseurHorloge.enDate( + adaptateurEnvironnement.nouveauParcoursDevenirAidant() + ) + ) && (await this.entrepots.demandesDevenirAidant().demandeExiste(mail)) + ); } private async aidantExiste(mailDemandeur: string) { @@ -133,6 +148,9 @@ export class CapteurCommandeDevenirAidant date: demandeDevenirAidant.date, departement: demandeDevenirAidant.departement.nom, identifiantDemande: demandeDevenirAidant.identifiant, + ...(demandeDevenirAidant.entite && { + type: demandeDevenirAidant.entite.type, + }), }, }); } @@ -142,4 +160,5 @@ export type DemandeDevenirAidantCreee = Evenement<{ date: Date; departement: string; identifiantDemande: crypto.UUID; + type?: TypeEntite; }>; diff --git a/mon-aide-cyber-api/src/gestion-demandes/devenir-aidant/DemandeDevenirAidant.ts b/mon-aide-cyber-api/src/gestion-demandes/devenir-aidant/DemandeDevenirAidant.ts index facbf8d87..c44e0c6d2 100644 --- a/mon-aide-cyber-api/src/gestion-demandes/devenir-aidant/DemandeDevenirAidant.ts +++ b/mon-aide-cyber-api/src/gestion-demandes/devenir-aidant/DemandeDevenirAidant.ts @@ -14,6 +14,7 @@ export type DemandeDevenirAidant = Aggregat & { mail: string; departement: Departement; statut: StatutDemande; + entite?: EntiteDemande; }; export interface EntrepotDemandeDevenirAidant extends Entrepot { @@ -23,3 +24,11 @@ export interface EntrepotDemandeDevenirAidant mail: string ): Promise; } + +export type TypeEntite = 'ServicePublic' | 'ServiceEtat' | 'Association'; + +export type EntiteDemande = { + type: TypeEntite; + nom: string; + siret: string; +}; diff --git a/mon-aide-cyber-api/test/gestion-demandes/devenir-aidant/CapteurCommandeDevenirAidant.spec.ts b/mon-aide-cyber-api/test/gestion-demandes/devenir-aidant/CapteurCommandeDevenirAidant.spec.ts index 936c8a2c2..29b4dd218 100644 --- a/mon-aide-cyber-api/test/gestion-demandes/devenir-aidant/CapteurCommandeDevenirAidant.spec.ts +++ b/mon-aide-cyber-api/test/gestion-demandes/devenir-aidant/CapteurCommandeDevenirAidant.spec.ts @@ -11,6 +11,7 @@ import { } from '../../../src/gestion-demandes/devenir-aidant/CapteurCommandeDevenirAidant'; import { unConstructeurDeDemandeDevenirAidant } from './constructeurDeDemandeDevenirAidant'; import { + ardennes, Departement, departements, } from '../../../src/gestion-demandes/departements'; @@ -23,7 +24,7 @@ import { adaptateursEnvironnementDeTest } from '../../adaptateurs/adaptateursEnv import { unServiceAidant } from '../../../src/espace-aidant/ServiceAidantMAC'; import { unAidant } from '../../constructeurs/constructeursAidantUtilisateur'; -describe('Capteur de commande devenir aidant', () => { +describe('Capteur de commande demande devenir aidant', () => { const annuaireCot = () => ({ rechercheEmailParDepartement: (__departement: Departement) => 'cot@email.com', @@ -261,4 +262,133 @@ describe('Capteur de commande devenir aidant', () => { ).rejects.toThrowError('Le mail de mise en relation n’a pu être remis.'); }); }); + + describe('Dans le cadre de la mise en place des profils Aidants / Utilisateurs inscrits à partir du 31/01/2025', () => { + beforeEach(() => { + FournisseurHorlogeDeTest.initialise( + new Date(Date.parse('2025-01-31T14:00')) + ); + }); + + it('Crée la demande', async () => { + const entrepots = new EntrepotsMemoire(); + + const demandeDevenirAidant = await new CapteurCommandeDevenirAidant( + entrepots, + new BusEvenementDeTest(), + new AdaptateurEnvoiMailMemoire(), + annuaireCot, + unServiceAidant(entrepots.aidants()) + ).execute({ + departement: ardennes, + mail: 'email', + nom: 'nom', + prenom: 'prenom', + entite: { + nom: 'Beta-Gouv', + siret: '1234567890', + type: 'ServicePublic', + }, + type: 'CommandeDevenirAidant', + }); + + expect(demandeDevenirAidant).toStrictEqual({ + departement: ardennes, + mail: 'email', + nom: 'nom', + prenom: 'prenom', + identifiant: expect.any(String), + date: FournisseurHorloge.maintenant(), + statut: StatutDemande.EN_COURS, + entite: { + nom: 'Beta-Gouv', + siret: '1234567890', + type: 'ServicePublic', + }, + }); + }); + + it('Met à jour une demande existante', async () => { + const entrepots = new EntrepotsMemoire(); + await entrepots + .demandesDevenirAidant() + .persiste( + unConstructeurDeDemandeDevenirAidant() + .avecUnMail('email-existant@mail.com') + .construis() + ); + + const demandeDevenirAidant = await new CapteurCommandeDevenirAidant( + entrepots, + new BusEvenementDeTest(), + new AdaptateurEnvoiMailMemoire(), + annuaireCot, + unServiceAidant(entrepots.aidants()) + ).execute({ + departement: ardennes, + mail: 'email-existant@mail.com', + nom: 'nom', + prenom: 'prenom', + entite: { + nom: 'Beta-Gouv', + siret: '1234567890', + type: 'ServicePublic', + }, + type: 'CommandeDevenirAidant', + }); + + expect(demandeDevenirAidant).toStrictEqual({ + departement: ardennes, + mail: 'email-existant@mail.com', + nom: 'nom', + prenom: 'prenom', + identifiant: expect.any(String), + date: FournisseurHorloge.maintenant(), + statut: StatutDemande.EN_COURS, + entite: { + nom: 'Beta-Gouv', + siret: '1234567890', + type: 'ServicePublic', + }, + }); + }); + + it('Publie l’événement DemandeDevenirAidantCréée', async () => { + const busEvenementDeTest = new BusEvenementDeTest(); + const entrepots = new EntrepotsMemoire(); + + const demandeDevenirAidant = await new CapteurCommandeDevenirAidant( + entrepots, + busEvenementDeTest, + new AdaptateurEnvoiMailMemoire(), + annuaireCot, + unServiceAidant(entrepots.aidants()) + ).execute({ + departement: departements[1], + mail: 'email', + nom: 'nom', + prenom: 'prenom', + type: 'CommandeDevenirAidant', + entite: { + nom: 'Beta-Gouv', + siret: '1234567890', + type: 'ServicePublic', + }, + }); + + expect( + busEvenementDeTest.evenementRecu + ).toStrictEqual({ + identifiant: demandeDevenirAidant.identifiant, + type: 'DEMANDE_DEVENIR_AIDANT_CREEE', + date: FournisseurHorloge.maintenant(), + corps: { + date: FournisseurHorloge.maintenant(), + identifiantDemande: demandeDevenirAidant.identifiant, + departement: demandeDevenirAidant.departement.nom, + type: 'ServicePublic', + }, + }); + }); + }); });