Skip to content

Commit

Permalink
[PARCOURS DEMANDE DEVENIR AIDANT] Prends en compte le nouveau parcours :
Browse files Browse the repository at this point in the history
- 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é
  • Loading branch information
bbougon committed Jan 10, 2025
1 parent 99ce0c6 commit d4864bd
Show file tree
Hide file tree
Showing 3 changed files with 161 additions and 3 deletions.
Original file line number Diff line number Diff line change
@@ -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';
Expand All @@ -11,13 +16,15 @@ 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<Commande, 'type'> & {
type: 'CommandeDevenirAidant';
departement: Departement;
mail: string;
prenom: string;
nom: string;
entite?: EntiteDemande;
};

class ErreurDemandeDevenirAidant extends Error {
Expand Down Expand Up @@ -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
Expand All @@ -95,7 +103,14 @@ export class CapteurCommandeDevenirAidant
}

private async demandeExiste(mail: string): Promise<boolean> {
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) {
Expand Down Expand Up @@ -133,6 +148,9 @@ export class CapteurCommandeDevenirAidant
date: demandeDevenirAidant.date,
departement: demandeDevenirAidant.departement.nom,
identifiantDemande: demandeDevenirAidant.identifiant,
...(demandeDevenirAidant.entite && {
type: demandeDevenirAidant.entite.type,
}),
},
});
}
Expand All @@ -142,4 +160,5 @@ export type DemandeDevenirAidantCreee = Evenement<{
date: Date;
departement: string;
identifiantDemande: crypto.UUID;
type?: TypeEntite;
}>;
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ export type DemandeDevenirAidant = Aggregat & {
mail: string;
departement: Departement;
statut: StatutDemande;
entite?: EntiteDemande;
};
export interface EntrepotDemandeDevenirAidant
extends Entrepot<DemandeDevenirAidant> {
Expand All @@ -23,3 +24,11 @@ export interface EntrepotDemandeDevenirAidant
mail: string
): Promise<DemandeDevenirAidant | undefined>;
}

export type TypeEntite = 'ServicePublic' | 'ServiceEtat' | 'Association';

export type EntiteDemande = {
type: TypeEntite;
nom: string;
siret: string;
};
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand All @@ -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) =>
'[email protected]',
Expand Down Expand Up @@ -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<DemandeDevenirAidant>({
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 protected]')
.construis()
);

const demandeDevenirAidant = await new CapteurCommandeDevenirAidant(
entrepots,
new BusEvenementDeTest(),
new AdaptateurEnvoiMailMemoire(),
annuaireCot,
unServiceAidant(entrepots.aidants())
).execute({
departement: ardennes,
mail: '[email protected]',
nom: 'nom',
prenom: 'prenom',
entite: {
nom: 'Beta-Gouv',
siret: '1234567890',
type: 'ServicePublic',
},
type: 'CommandeDevenirAidant',
});

expect(demandeDevenirAidant).toStrictEqual<DemandeDevenirAidant>({
departement: ardennes,
mail: '[email protected]',
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<DemandeDevenirAidantCreee>({
identifiant: demandeDevenirAidant.identifiant,
type: 'DEMANDE_DEVENIR_AIDANT_CREEE',
date: FournisseurHorloge.maintenant(),
corps: {
date: FournisseurHorloge.maintenant(),
identifiantDemande: demandeDevenirAidant.identifiant,
departement: demandeDevenirAidant.departement.nom,
type: 'ServicePublic',
},
});
});
});
});

0 comments on commit d4864bd

Please sign in to comment.