@@ -5,7 +5,11 @@ import { executeRequete } from './executeurRequete';
5
5
import { AdaptateurDeVerificationDeSessionAvecContexteDeTest } from '../adaptateurs/AdaptateurDeVerificationDeSessionAvecContexteDeTest' ;
6
6
import { AdaptateurDeVerificationDeSessionDeTest } from '../adaptateurs/AdaptateurDeVerificationDeSessionDeTest' ;
7
7
8
- import { unUtilisateur } from '../constructeurs/constructeursAidantUtilisateur' ;
8
+ import {
9
+ unAidant ,
10
+ unCompteAidantRelieAUnCompteUtilisateur ,
11
+ unUtilisateur ,
12
+ } from '../constructeurs/constructeursAidantUtilisateur' ;
9
13
import {
10
14
CorpsReponseReinitialiserMotDePasseEnErreur ,
11
15
ReponseReinitialisationMotDePasseEnErreur ,
@@ -16,6 +20,7 @@ import { FournisseurHorlogeDeTest } from '../infrastructure/horloge/FournisseurH
16
20
import { add } from 'date-fns' ;
17
21
import { AdaptateurGestionnaireErreursMemoire } from '../../src/infrastructure/adaptateurs/AdaptateurGestionnaireErreursMemoire' ;
18
22
import { liensPublicsAttendus } from './hateoas/liensAttendus' ;
23
+ import { ReponseHATEOASEnErreur } from '../../src/api/hateoas/hateoas' ;
19
24
20
25
describe ( 'le serveur MAC sur les routes /api/utilisateur' , ( ) => {
21
26
const testeurMAC = testeurIntegration ( ) ;
@@ -33,6 +38,7 @@ describe('le serveur MAC sur les routes /api/utilisateur', () => {
33
38
} ) ;
34
39
35
40
describe ( 'quand une requête GET est reçue sur /' , ( ) => {
41
+ beforeEach ( ( ) => adaptateurDeVerificationDeSession . reinitialise ( ) ) ;
36
42
it ( "retourne l'utilisateur connecté" , async ( ) => {
37
43
const utilisateur = unUtilisateur ( ) . construis ( ) ;
38
44
await testeurMAC . entrepots . utilisateurs ( ) . persiste ( utilisateur ) ;
@@ -318,4 +324,130 @@ describe('le serveur MAC sur les routes /api/utilisateur', () => {
318
324
} ) ;
319
325
} ) ;
320
326
} ) ;
327
+
328
+ describe ( "Lorsqu'une requête POST est reçue sur /utilisateur/valider-signature-cgu" , ( ) => {
329
+ const testeurMAC = testeurIntegration ( ) ;
330
+ let donneesServeur : { portEcoute : number ; app : Express } ;
331
+ beforeEach ( ( ) => {
332
+ testeurMAC . adaptateurDeVerificationDeSession =
333
+ new AdaptateurDeVerificationDeSessionDeTest ( ) ;
334
+ donneesServeur = testeurMAC . initialise ( ) ;
335
+ } ) ;
336
+
337
+ afterEach ( ( ) => {
338
+ testeurMAC . arrete ( ) ;
339
+ } ) ;
340
+
341
+ it ( 'Ajoute la date de signature des CGU' , async ( ) => {
342
+ FournisseurHorlogeDeTest . initialise ( new Date ( ) ) ;
343
+ const { utilisateur } = await unCompteAidantRelieAUnCompteUtilisateur ( {
344
+ entrepotUtilisateur : testeurMAC . entrepots . utilisateurs ( ) ,
345
+ constructeurAidant : unAidant ( ) . sansCGUSignees ( ) ,
346
+ entrepotAidant : testeurMAC . entrepots . aidants ( ) ,
347
+ constructeurUtilisateur : unUtilisateur ( ) ,
348
+ } ) ;
349
+ testeurMAC . adaptateurDeVerificationDeSession . utilisateurConnecte (
350
+ utilisateur
351
+ ) ;
352
+
353
+ const reponse = await executeRequete (
354
+ donneesServeur . app ,
355
+ 'POST' ,
356
+ `/api/utilisateur/valider-signature-cgu` ,
357
+ donneesServeur . portEcoute ,
358
+ {
359
+ cguValidees : true ,
360
+ }
361
+ ) ;
362
+
363
+ expect ( reponse . statusCode ) . toBe ( 200 ) ;
364
+ const aidantModifie = await testeurMAC . entrepots
365
+ . aidants ( )
366
+ . lis ( utilisateur . identifiant ) ;
367
+ expect ( aidantModifie . dateSignatureCGU ) . toStrictEqual (
368
+ FournisseurHorloge . maintenant ( )
369
+ ) ;
370
+ } ) ;
371
+
372
+ it ( "Accepte la requête et renvoie les actions possibles pour l'Aidant" , async ( ) => {
373
+ const { utilisateur } = await unCompteAidantRelieAUnCompteUtilisateur ( {
374
+ entrepotUtilisateur : testeurMAC . entrepots . utilisateurs ( ) ,
375
+ constructeurAidant : unAidant ( ) . sansCGUSignees ( ) ,
376
+ entrepotAidant : testeurMAC . entrepots . aidants ( ) ,
377
+ constructeurUtilisateur : unUtilisateur ( ) ,
378
+ } ) ;
379
+ testeurMAC . adaptateurDeVerificationDeSession . utilisateurConnecte (
380
+ utilisateur
381
+ ) ;
382
+
383
+ const reponse = await executeRequete (
384
+ donneesServeur . app ,
385
+ 'POST' ,
386
+ `/api/utilisateur/valider-signature-cgu` ,
387
+ donneesServeur . portEcoute ,
388
+ {
389
+ cguValidees : true ,
390
+ }
391
+ ) ;
392
+
393
+ expect ( await reponse . json ( ) ) . toStrictEqual ( {
394
+ liens : {
395
+ 'afficher-tableau-de-bord' : {
396
+ methode : 'GET' ,
397
+ url : '/api/espace-aidant/tableau-de-bord' ,
398
+ } ,
399
+ 'lancer-diagnostic' : {
400
+ methode : 'POST' ,
401
+ url : '/api/diagnostic' ,
402
+ } ,
403
+ 'modifier-mot-de-passe' : {
404
+ methode : 'POST' ,
405
+ url : '/api/profil/modifier-mot-de-passe' ,
406
+ } ,
407
+ 'modifier-profil' : {
408
+ methode : 'PATCH' ,
409
+ url : '/api/profil' ,
410
+ } ,
411
+ 'se-deconnecter' : {
412
+ methode : 'DELETE' ,
413
+ url : '/api/token' ,
414
+ } ,
415
+ } ,
416
+ } ) ;
417
+ } ) ;
418
+
419
+ it ( 'Vérifie la présence de la date de signature des CGU' , async ( ) => {
420
+ FournisseurHorlogeDeTest . initialise ( new Date ( ) ) ;
421
+ const { utilisateur } = await unCompteAidantRelieAUnCompteUtilisateur ( {
422
+ entrepotUtilisateur : testeurMAC . entrepots . utilisateurs ( ) ,
423
+ constructeurAidant : unAidant ( ) . sansCGUSignees ( ) ,
424
+ entrepotAidant : testeurMAC . entrepots . aidants ( ) ,
425
+ constructeurUtilisateur : unUtilisateur ( ) ,
426
+ } ) ;
427
+ testeurMAC . adaptateurDeVerificationDeSession . utilisateurConnecte (
428
+ utilisateur
429
+ ) ;
430
+
431
+ const reponse = await executeRequete (
432
+ donneesServeur . app ,
433
+ 'POST' ,
434
+ `/api/utilisateur/valider-signature-cgu` ,
435
+ donneesServeur . portEcoute ,
436
+ {
437
+ cguValidees : false ,
438
+ }
439
+ ) ;
440
+
441
+ expect ( reponse . statusCode ) . toBe ( 422 ) ;
442
+ expect ( await reponse . json ( ) ) . toStrictEqual < ReponseHATEOASEnErreur > ( {
443
+ message : 'Veuillez valider les CGU' ,
444
+ liens : {
445
+ 'valider-signature-cgu' : {
446
+ url : '/api/utilisateur/valider-signature-cgu' ,
447
+ methode : 'POST' ,
448
+ } ,
449
+ } ,
450
+ } ) ;
451
+ } ) ;
452
+ } ) ;
321
453
} ) ;
0 commit comments