Skip to content

Commit 99ce0c6

Browse files
committed
[PARCOURS DEVENIR AIDANT] Prends en compte le nouveau au niveau de la route /api/demandes/devenir-aidant parcours à compter de la date prévue (31/01/2025)
1 parent ad6f290 commit 99ce0c6

File tree

4 files changed

+163
-3
lines changed

4 files changed

+163
-3
lines changed

mon-aide-cyber-api/src/adaptateurs/adaptateurEnvironnement.ts

+5
Original file line numberDiff line numberDiff line change
@@ -43,13 +43,18 @@ const apiRechercheEntreprise = () => ({
4343
url: () => process.env.URL_API_RECHERCHE_ENTREPRISE || '',
4444
});
4545

46+
const nouveauParcoursDevenirAidant = () =>
47+
process.env.DATE_NOUVEAU_PARCOURS_DEMANDE_DEVENIR_AIDANT ||
48+
'2025-01-31T00:00:00';
49+
4650
const adaptateurEnvironnement = {
4751
messagerie,
4852
mac,
4953
proConnect,
5054
modeMaintenance,
5155
siretsEntreprise,
5256
apiRechercheEntreprise,
57+
nouveauParcoursDevenirAidant,
5358
};
5459

5560
export { sentry, adaptateurEnvironnement };

mon-aide-cyber-api/src/api/demandes/routeAPIDemandeDevenirAidant.ts

+45-2
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,18 @@ import { Entrepots } from '../../domaine/Entrepots';
1919
import { ServiceDeChiffrement } from '../../securite/ServiceDeChiffrement';
2020
import { SagaDemandeAidantCreeEspaceAidant } from '../../gestion-demandes/devenir-aidant/CapteurSagaDemandeAidantCreeEspaceAidant';
2121
import { ErreurMAC } from '../../domaine/erreurMAC';
22+
import { FournisseurHorloge } from '../../infrastructure/horloge/FournisseurHorloge';
23+
import { isAfter } from 'date-fns';
24+
import { adaptateurEnvironnement } from '../../adaptateurs/adaptateurEnvironnement';
2225

2326
export const validateurDemande = (
2427
entrepots: Entrepots,
2528
serviceDeChiffrement: ServiceDeChiffrement
2629
) => {
2730
const { body } = new ExpressValidator({
28-
verifieCoherenceDeLaDemande: async (value: string) => {
31+
verifieCoherenceDeLaDemande: async (valeur: string) => {
2932
const tokenConverti: { demande: string; mail: string } = JSON.parse(
30-
atob(serviceDeChiffrement.dechiffre(value))
33+
atob(serviceDeChiffrement.dechiffre(valeur))
3134
);
3235

3336
await entrepots.demandesDevenirAidant().lis(tokenConverti.demande);
@@ -52,6 +55,45 @@ export const validateurDemande = (
5255
];
5356
};
5457

58+
const validateurNouveauParcoursDemandeDevenirAidant = () => {
59+
const dateNouveauParcoursDemandeDevenirAidant =
60+
adaptateurEnvironnement.nouveauParcoursDevenirAidant();
61+
if (dateNouveauParcoursDemandeDevenirAidant) {
62+
if (
63+
isAfter(
64+
FournisseurHorloge.maintenant(),
65+
FournisseurHorloge.enDate(dateNouveauParcoursDemandeDevenirAidant)
66+
)
67+
) {
68+
const { body } = new ExpressValidator({
69+
typeEntite: async (valeur: string) => {
70+
if (valeur !== ('ServicePublic' && 'ServiceEtat' && 'Association')) {
71+
throw new Error(
72+
'Veuillez fournir l’une des valeurs suivantes pour le type d’entité ’ServicePublic’, ’ServiceEtat’, ’Association’'
73+
);
74+
}
75+
return true;
76+
},
77+
});
78+
return [
79+
body('signatureCharte')
80+
.custom((value: boolean) => value)
81+
.withMessage('Veuillez signer la Charte Aidant.'),
82+
body('entite.nom')
83+
.optional()
84+
.notEmpty()
85+
.withMessage('Veuillez renseigner un nom pour votre entité'),
86+
body('entite.siret')
87+
.optional()
88+
.notEmpty()
89+
.withMessage('Veuillez renseigner un SIRET pour votre entité'),
90+
body('entite.type').optional().typeEntite(),
91+
];
92+
}
93+
}
94+
return [];
95+
};
96+
5597
export const routesAPIDemandesDevenirAidant = (
5698
configuration: ConfigurationServeur
5799
) => {
@@ -82,6 +124,7 @@ export const routesAPIDemandesDevenirAidant = (
82124
body('cguValidees')
83125
.custom((value: boolean) => value)
84126
.withMessage('Veuillez valider les CGU'),
127+
validateurNouveauParcoursDemandeDevenirAidant(),
85128
async (requete: Request, reponse: Response, suite: NextFunction) => {
86129
try {
87130
const resultatsValidation: Result<FieldValidationError> =

mon-aide-cyber-api/test/api/demandes/constructeurRequeteDemandeDevenirAidant.ts

+38
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ type RequeteDemandeDevenirAidant = {
88
mail: string;
99
departement: string;
1010
cguValidees: boolean;
11+
signatureCharte?: boolean;
12+
entite?: { type: string; nom?: string; siret?: string };
1113
};
1214

1315
class ConstructeurRequeteDemandeDevenirAidant
@@ -20,6 +22,9 @@ class ConstructeurRequeteDemandeDevenirAidant
2022
private departement: string =
2123
departements[fakerFR.number.int({ min: 0, max: departements.length - 1 })]
2224
.nom;
25+
private signatureCharte: boolean | undefined = undefined;
26+
private entite: { type: string; nom?: string; siret?: string } | undefined =
27+
undefined;
2328

2429
dansLeDepartement(
2530
departement: string
@@ -38,13 +43,46 @@ class ConstructeurRequeteDemandeDevenirAidant
3843
return this;
3944
}
4045

46+
sansCharteAidant(): ConstructeurRequeteDemandeDevenirAidant {
47+
this.signatureCharte = false;
48+
return this;
49+
}
50+
51+
dansUneEntite = (
52+
nom: string,
53+
siret: string,
54+
type: string
55+
): ConstructeurRequeteDemandeDevenirAidant => {
56+
this.entite = {
57+
nom,
58+
siret,
59+
type,
60+
};
61+
return this;
62+
};
63+
64+
ayantSigneLaCharte(): ConstructeurRequeteDemandeDevenirAidant {
65+
this.signatureCharte = true;
66+
return this;
67+
}
68+
69+
enAttenteAdhesionAssociation(): ConstructeurRequeteDemandeDevenirAidant {
70+
this.signatureCharte = true;
71+
this.entite = { type: 'Association' };
72+
return this;
73+
}
74+
4175
construis(): RequeteDemandeDevenirAidant {
4276
return {
4377
cguValidees: this.cguValidees,
4478
departement: this.departement,
4579
mail: this.mail,
4680
nom: this.nom,
4781
prenom: this.prenom,
82+
...(this.signatureCharte !== undefined && {
83+
signatureCharte: this.signatureCharte,
84+
}),
85+
...(this.entite !== undefined && { entite: this.entite }),
4886
};
4987
}
5088
}

mon-aide-cyber-api/test/api/demandes/routeAPIDemandeDevenirAidant.spec.ts

+75-1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import { FournisseurHorlogeDeTest } from '../../infrastructure/horloge/Fournisse
1414
import { FournisseurHorloge } from '../../../src/infrastructure/horloge/FournisseurHorloge';
1515
import { unAidant } from '../../constructeurs/constructeursAidantUtilisateur';
1616
import { Aidant } from '../../../src/espace-aidant/Aidant';
17+
import { adaptateurEnvironnement } from '../../../src/adaptateurs/adaptateurEnvironnement';
1718

1819
describe('Le serveur MAC, sur les routes de demande pour devenir Aidant', () => {
1920
const testeurMAC = testeurIntegration();
@@ -148,7 +149,7 @@ describe('Le serveur MAC, sur les routes de demande pour devenir Aidant', () =>
148149
expect(reponse.statusCode).toStrictEqual(422);
149150
});
150151

151-
it("Précise l'erreur dans un message, si une erreur est rencontré", async () => {
152+
it("Précise l'erreur dans un message, si une erreur est rencontrée", async () => {
152153
const corpsDeRequeteAvecMailInvalide = uneRequeteDemandeDevenirAidant()
153154
.avecUnMail('mail-invalide')
154155
.construis();
@@ -456,4 +457,77 @@ describe('Le serveur MAC, sur les routes de demande pour devenir Aidant', () =>
456457
});
457458
});
458459
});
460+
461+
describe('Dans le cadre de la mise en place des profils Aidants / Utilisateurs inscrits à partir du 31/01/2025', () => {
462+
const testeurMAC = testeurIntegration();
463+
let donneesServeur: { portEcoute: number; app: Express };
464+
465+
beforeEach(() => {
466+
FournisseurHorlogeDeTest.initialise(
467+
new Date(Date.parse('2025-01-31T08:30:00'))
468+
);
469+
donneesServeur = testeurMAC.initialise();
470+
adaptateurEnvironnement.nouveauParcoursDevenirAidant = () =>
471+
'2025-01-31T00:00:00';
472+
});
473+
474+
afterEach(() => testeurMAC.arrete());
475+
476+
describe('Quand une requête POST est reçue /api/demandes/devenir-aidant', () => {
477+
it('Retourne le code 422 si la charte n’est pas signée', async () => {
478+
const corpsDeRequete = uneRequeteDemandeDevenirAidant()
479+
.sansCharteAidant()
480+
.construis();
481+
482+
const reponse = await executeRequete(
483+
donneesServeur.app,
484+
'POST',
485+
'/api/demandes/devenir-aidant',
486+
donneesServeur.portEcoute,
487+
corpsDeRequete
488+
);
489+
490+
expect(JSON.parse(reponse.body).message).toStrictEqual(
491+
'Veuillez signer la Charte Aidant.'
492+
);
493+
expect(reponse.statusCode).toStrictEqual(422);
494+
});
495+
496+
it('Retourne le code 422 si les informations de l’entité fournie sont incorrectes', async () => {
497+
const corpsDeRequete = uneRequeteDemandeDevenirAidant()
498+
.dansUneEntite('', '', '')
499+
.ayantSigneLaCharte()
500+
.construis();
501+
502+
const reponse = await executeRequete(
503+
donneesServeur.app,
504+
'POST',
505+
'/api/demandes/devenir-aidant',
506+
donneesServeur.portEcoute,
507+
corpsDeRequete
508+
);
509+
510+
expect(JSON.parse(reponse.body).message).toStrictEqual(
511+
'Veuillez renseigner un nom pour votre entité, Veuillez renseigner un SIRET pour votre entité, Veuillez fournir l’une des valeurs suivantes pour le type d’entité ’ServicePublic’, ’ServiceEtat’, ’Association’'
512+
);
513+
expect(reponse.statusCode).toStrictEqual(422);
514+
});
515+
516+
it('Retourne OK si le futur Aidant n’adhère pas encore à une association', async () => {
517+
const corpsDeRequete = uneRequeteDemandeDevenirAidant()
518+
.enAttenteAdhesionAssociation()
519+
.construis();
520+
521+
const reponse = await executeRequete(
522+
donneesServeur.app,
523+
'POST',
524+
'/api/demandes/devenir-aidant',
525+
donneesServeur.portEcoute,
526+
corpsDeRequete
527+
);
528+
529+
expect(reponse.statusCode).toStrictEqual(200);
530+
});
531+
});
532+
});
459533
});

0 commit comments

Comments
 (0)