From bd7f77cabc97837b58261acee6ac5b0f7ccb7770 Mon Sep 17 00:00:00 2001 From: Ornella Ourfi Date: Thu, 19 Sep 2024 20:14:07 +0200 Subject: [PATCH 1/5] bouton confirmation pour l'inscription structure --- src/App.js | 4 +- .../ConfirmationEmailCandidatureStructure.jsx | 41 ++++++ .../PageConfirmationEmailCandidature.test.jsx | 128 ++++++++++++++++++ ...eConfirmationEmailCandidatureStructure.jsx | 12 ++ ...piConfirmationEmailCandidatureStructure.js | 19 +++ 5 files changed, 203 insertions(+), 1 deletion(-) create mode 100644 src/views/confirmation-email-candidature-structure/ConfirmationEmailCandidatureStructure.jsx create mode 100644 src/views/confirmation-email-candidature-structure/PageConfirmationEmailCandidature.test.jsx create mode 100644 src/views/confirmation-email-candidature-structure/PageConfirmationEmailCandidatureStructure.jsx create mode 100644 src/views/confirmation-email-candidature-structure/useApiConfirmationEmailCandidatureStructure.js diff --git a/src/App.js b/src/App.js index 8f5449e..d234077 100644 --- a/src/App.js +++ b/src/App.js @@ -17,6 +17,7 @@ import '@gouvfr/dsfr/dist/component/modal/modal.module.min.js'; import '@gouvfr/dsfr/dist/component/header/header.module.min.js'; import './assets/sass/main.scss'; import '@gouvfr/dsfr/dist/core/core.min.css'; +import PageConfirmationEmailCandidatureStructure from './views/confirmation-email-candidature-structure/PageConfirmationEmailCandidatureStructure'; const RedirectCarto = () => { const { permanence } = useParams(); @@ -52,7 +53,8 @@ function App() { }/> }/> }/> - }/> + }/> + }/> }/> }/> }/> diff --git a/src/views/confirmation-email-candidature-structure/ConfirmationEmailCandidatureStructure.jsx b/src/views/confirmation-email-candidature-structure/ConfirmationEmailCandidatureStructure.jsx new file mode 100644 index 0000000..13ea1ec --- /dev/null +++ b/src/views/confirmation-email-candidature-structure/ConfirmationEmailCandidatureStructure.jsx @@ -0,0 +1,41 @@ +import React, { useEffect, useState } from 'react'; +import { useParams } from 'react-router-dom'; +import { useApiConfirmationEmailCandidatureStructure } from './useApiConfirmationEmailCandidatureStructure'; + + +export default function ConfirmationEmailCandidatureStructure() { + const [reponseStatusConfirmation, setReponseStatusConfirmation] = useState(null); + const { actionConfirmationEmailCandidatureStructure } = useApiConfirmationEmailCandidatureStructure(); + const { token } = useParams(); + + useEffect(() => { + window.scrollTo({ top: 0, behavior: 'smooth' }); + }, []); + const ClickBoutonConfirmer = async () => { + const response = await actionConfirmationEmailCandidatureStructure(token); + setReponseStatusConfirmation(response.status); + }; + return ( +
+

Confirmation de l’enregistrement de votre candidature

+ {reponseStatusConfirmation === 200 &&
+

Votre email a été confirmé et votre inscription est maintenant active. + Vous recevrez un mail d’activation de votre espace structure lorsque votre candidature aura été validée.

+
} + {reponseStatusConfirmation === 403 &&
+

Impossible de valider l’email, le lien a expiré ou est invalide.

+
} + {reponseStatusConfirmation >= 400 && reponseStatusConfirmation !== 403 &&
+

Une erreur s’est produite veuillez réessayer plus tard.

+
} + {!reponseStatusConfirmation && <> +

+ Appuyez sur le bouton pour confirmer votre email +

+ + } +
+ ); +} diff --git a/src/views/confirmation-email-candidature-structure/PageConfirmationEmailCandidature.test.jsx b/src/views/confirmation-email-candidature-structure/PageConfirmationEmailCandidature.test.jsx new file mode 100644 index 0000000..2cef85c --- /dev/null +++ b/src/views/confirmation-email-candidature-structure/PageConfirmationEmailCandidature.test.jsx @@ -0,0 +1,128 @@ +import { render, act, screen, fireEvent } from '@testing-library/react'; +import { describe, expect, it, vi } from 'vitest'; +import ConfirmationEmailCandidatureStructure from './ConfirmationEmailCandidatureStructure'; + +vi.mock('react-router-dom', () => ({ + useParams: () => ({ token: '1' }), +})); + +describe('confirmation Email', () => { + it('quand j’affiche la page de confirmation de l’email validée alors le titre et les informations de la page s’affichent', () => { + // WHEN + render(); + vi.spyOn(window, 'scrollTo').mockImplementation(); + + // THEN + const titre = screen.getByRole('heading', { level: 1, name: 'Confirmation de l’enregistrement de votre candidature' }); + expect(titre).toBeInTheDocument(); + + const indication = screen.getByText('Appuyez sur le bouton pour confirmer votre email', + { selector: 'p' } + ); + expect(indication).toBeInTheDocument(); + + const envoyer = screen.getByRole('button', { name: 'Confirmer' }); + expect(envoyer).toBeInTheDocument(); + }); + + it('quand l’utilisateur clique sur le bouton et que le lien est valide alors un message success s’affiche', async () => { + // WHEN + vi.spyOn(window, 'scrollTo').mockImplementation(); + render(); + vi.stubGlobal('fetch', vi.fn( + () => ({ status: 200, json: async () => Promise.resolve({}) })) + ); + + const envoyer = screen.getByRole('button', { name: 'Confirmer' }); + expect(envoyer).toBeInTheDocument(); + // eslint-disable-next-line testing-library/no-unnecessary-act + await act(() => { + fireEvent.click(envoyer); + }); + expect(envoyer).not.toBeInTheDocument(); + // THEN + const titre = screen.getByRole('heading', { level: 1, name: 'Confirmation de l’enregistrement de votre candidature' }); + expect(titre).toBeInTheDocument(); + + const messageSucess = screen.getByText('Votre email a été confirmé et votre inscription est maintenant active.' + + ' Vous recevrez un mail d’activation de votre espace structure lorsque votre candidature aura été validée.', + { selector: 'p' } + ); + expect(messageSucess).toBeInTheDocument(); + + const messageError403 = screen.queryByText('Impossible de valider l’email, le lien a expiré ou est invalide.', { selector: 'p' }); + expect(messageError403).not.toBeInTheDocument(); + + const messageErrorGenerale = screen.queryByText('Une erreur s’est produite veuillez réessayer plus tard.', { selector: 'p' }); + expect(messageErrorGenerale).not.toBeInTheDocument(); + }); + + it('quand l’utilisateur clique sur le bouton et que le lien est invalide alors un message d’erreur s’affiche', async () => { + + // GIVEN + vi.spyOn(window, 'scrollTo').mockImplementation(); + vi.stubGlobal('fetch', vi.fn( + () => ({ status: 403, json: async () => Promise.resolve({}) })) + ); + // WHEN + render(); + + // THEN + const envoyer = screen.getByRole('button', { name: 'Confirmer' }); + expect(envoyer).toBeInTheDocument(); + // eslint-disable-next-line testing-library/no-unnecessary-act + await act(() => { + fireEvent.click(envoyer); + }); + expect(envoyer).not.toBeInTheDocument(); + // THEN + const titre = screen.getByRole('heading', { level: 1, name: 'Confirmation de l’enregistrement de votre candidature' }); + expect(titre).toBeInTheDocument(); + + const messageError = screen.getByText('Impossible de valider l’email, le lien a expiré ou est invalide.', + { selector: 'p' } + ); + expect(messageError).toBeInTheDocument(); + + const messageSuccess = screen.queryByText('Votre email a été confirmé et votre inscription est maintenant active.' + + ' Vous recevrez un mail d’activation de votre espace structure lorsque votre candidature aura été validée.', { selector: 'p' }); + expect(messageSuccess).not.toBeInTheDocument(); + const messageErrorGenerale = screen.queryByText('Une erreur s’est produite veuillez réessayer plus tard.', { selector: 'p' }); + expect(messageErrorGenerale).not.toBeInTheDocument(); + }); + + + it('quand l’utilisateur clique sur le bouton et qu’une erreur innatendu se produit alors un message d’erreur s’affiche', async () => { + // GIVEN + vi.stubGlobal('fetch', vi.fn( + () => ({ status: 500, json: async () => Promise.resolve({}) })) + ); + // WHEN + render(); + + // THEN + const envoyer = screen.getByRole('button', { name: 'Confirmer' }); + expect(envoyer).toBeInTheDocument(); + // eslint-disable-next-line testing-library/no-unnecessary-act + await act(() => { + fireEvent.click(envoyer); + }); + expect(envoyer).not.toBeInTheDocument(); + // THEN + const titre = screen.getByRole('heading', { level: 1, name: 'Confirmation de l’enregistrement de votre candidature' }); + expect(titre).toBeInTheDocument(); + + const messageError = screen.getByText('Une erreur s’est produite veuillez réessayer plus tard.', + { selector: 'p' } + ); + expect(messageError).toBeInTheDocument(); + + const messageError403 = screen.queryByText('Impossible de valider l’email, le lien a expiré ou est invalide.', { selector: 'p' }); + expect(messageError403).not.toBeInTheDocument(); + + const messageSuccess = screen.queryByText('Votre email a été confirmé et votre inscription est maintenant active.' + + ' Vous recevrez un mail d’activation de votre espace structure lorsque votre candidature aura été validée.', { selector: 'p' }); + expect(messageSuccess).not.toBeInTheDocument(); + + }); +}); diff --git a/src/views/confirmation-email-candidature-structure/PageConfirmationEmailCandidatureStructure.jsx b/src/views/confirmation-email-candidature-structure/PageConfirmationEmailCandidatureStructure.jsx new file mode 100644 index 0000000..2baffab --- /dev/null +++ b/src/views/confirmation-email-candidature-structure/PageConfirmationEmailCandidatureStructure.jsx @@ -0,0 +1,12 @@ +import React from 'react'; +import Header from '../../components/Header'; +import ConfirmationEmailCandidatureStructure from './ConfirmationEmailCandidatureStructure'; + +export default function PageConfirmationEmailCandidatureStructure() { + return ( + <> +
+ + + ); +} diff --git a/src/views/confirmation-email-candidature-structure/useApiConfirmationEmailCandidatureStructure.js b/src/views/confirmation-email-candidature-structure/useApiConfirmationEmailCandidatureStructure.js new file mode 100644 index 0000000..8732f71 --- /dev/null +++ b/src/views/confirmation-email-candidature-structure/useApiConfirmationEmailCandidatureStructure.js @@ -0,0 +1,19 @@ + +export const useApiConfirmationEmailCandidatureStructure = () => { + + + const actionConfirmationEmailCandidatureStructure = async token => { + const baseUrl = import.meta.env.VITE_APP_API_URL; + const requestOptions = { + method: 'PATCH', + headers: { 'Content-Type': 'application/json' }, + }; + try { + return await fetch(`${baseUrl}/confirmation-email-inscription-structure/${token}`, requestOptions); + } catch (error) { + return error; + } + }; + + return { actionConfirmationEmailCandidatureStructure }; +}; From 490d48a8d07c1b99efee4e51ec36ca63000285d8 Mon Sep 17 00:00:00 2001 From: Ornella Ourfi Date: Thu, 19 Sep 2024 20:21:34 +0200 Subject: [PATCH 2/5] renommage component pour dissocier avec celle version structure --- src/App.js | 6 +++--- .../ConfirmationEmailCandidatureConseiller.jsx} | 8 ++++---- .../PageConfirmationEmailCandidature.test.jsx | 2 +- .../PageConfirmationEmailCandidatureConseiller.jsx | 12 ++++++++++++ .../useApiConfirmationEmailCandidatureConseiller.js} | 6 +++--- .../PageConfirmationEmailCandidature.jsx | 12 ------------ 6 files changed, 23 insertions(+), 23 deletions(-) rename src/views/{confirmation-email-candidature/ConfirmationEmailCandidature.jsx => confirmation-email-candidature-conseiller/ConfirmationEmailCandidatureConseiller.jsx} (81%) rename src/views/{confirmation-email-candidature => confirmation-email-candidature-conseiller}/PageConfirmationEmailCandidature.test.jsx (99%) create mode 100644 src/views/confirmation-email-candidature-conseiller/PageConfirmationEmailCandidatureConseiller.jsx rename src/views/{confirmation-email-candidature/useApiConfirmationEmailCandidature.js => confirmation-email-candidature-conseiller/useApiConfirmationEmailCandidatureConseiller.js} (62%) delete mode 100644 src/views/confirmation-email-candidature/PageConfirmationEmailCandidature.jsx diff --git a/src/App.js b/src/App.js index d234077..c7c64d9 100644 --- a/src/App.js +++ b/src/App.js @@ -17,7 +17,6 @@ import '@gouvfr/dsfr/dist/component/modal/modal.module.min.js'; import '@gouvfr/dsfr/dist/component/header/header.module.min.js'; import './assets/sass/main.scss'; import '@gouvfr/dsfr/dist/core/core.min.css'; -import PageConfirmationEmailCandidatureStructure from './views/confirmation-email-candidature-structure/PageConfirmationEmailCandidatureStructure'; const RedirectCarto = () => { const { permanence } = useParams(); @@ -41,7 +40,8 @@ function App() { const PageCandidatureStructure = lazy(() => import('./views/candidature-structure/PageCandidatureStructure')); const PageCandidatureCoordinateur = lazy(() => import('./views/candidature-coordinateur/PageCandidatureCoordinateur')); const PageCandidatureValidee = lazy(() => import('./views/candidature-validee/PageCandidatureValidee')); - const PageConfirmationEmailCandidature = lazy(() => import('./views/confirmation-email-candidature/PageConfirmationEmailCandidature')); + const PageConfirmationEmailCandidatureConseiller = lazy(() => import('./views/confirmation-email-candidature/PageConfirmationEmailCandidatureConnseiller')); + const PageConfirmationEmailCandidatureStructure = lazy(() => import('./views/confirmation-email-candidature/PageConfirmationEmailCandidatureStructure')); return (
@@ -53,7 +53,7 @@ function App() { }/> }/> }/> - }/> + }/> }/> }/> }/> diff --git a/src/views/confirmation-email-candidature/ConfirmationEmailCandidature.jsx b/src/views/confirmation-email-candidature-conseiller/ConfirmationEmailCandidatureConseiller.jsx similarity index 81% rename from src/views/confirmation-email-candidature/ConfirmationEmailCandidature.jsx rename to src/views/confirmation-email-candidature-conseiller/ConfirmationEmailCandidatureConseiller.jsx index f9ad381..21a812d 100644 --- a/src/views/confirmation-email-candidature/ConfirmationEmailCandidature.jsx +++ b/src/views/confirmation-email-candidature-conseiller/ConfirmationEmailCandidatureConseiller.jsx @@ -1,18 +1,18 @@ import React, { useEffect, useState } from 'react'; import { useParams } from 'react-router-dom'; -import { useApiConfirmationEmailCandidature } from './useApiConfirmationEmailCandidature'; +import { useApiConfirmationEmailCandidatureConseiller } from './useApiConfirmationEmailCandidatureConseiller'; -export default function CandidatureValidee() { +export default function ConfirmationEmailCandidatureConseiller() { const [reponseStatusConfirmation, setReponseStatusConfirmation] = useState(null); - const { actionConfirmationEmailCandidature } = useApiConfirmationEmailCandidature(); + const { actionConfirmationEmailCandidatureConseiller } = useApiConfirmationEmailCandidatureConseiller(); const { token } = useParams(); useEffect(() => { window.scrollTo({ top: 0, behavior: 'smooth' }); }, []); const ClickBoutonConfirmer = async () => { - const response = await actionConfirmationEmailCandidature(token); + const response = await actionConfirmationEmailCandidatureConseiller(token); setReponseStatusConfirmation(response.status); }; return ( diff --git a/src/views/confirmation-email-candidature/PageConfirmationEmailCandidature.test.jsx b/src/views/confirmation-email-candidature-conseiller/PageConfirmationEmailCandidature.test.jsx similarity index 99% rename from src/views/confirmation-email-candidature/PageConfirmationEmailCandidature.test.jsx rename to src/views/confirmation-email-candidature-conseiller/PageConfirmationEmailCandidature.test.jsx index a390537..a59b82d 100644 --- a/src/views/confirmation-email-candidature/PageConfirmationEmailCandidature.test.jsx +++ b/src/views/confirmation-email-candidature-conseiller/PageConfirmationEmailCandidature.test.jsx @@ -1,6 +1,6 @@ import { render, act, screen, fireEvent } from '@testing-library/react'; import { describe, expect, it, vi } from 'vitest'; -import ConfirmationEmailCandidature from './ConfirmationEmailCandidature'; +import ConfirmationEmailCandidature from './ConfirmationEmailCandidatureConseiller'; vi.mock('react-router-dom', () => ({ useParams: () => ({ token: '1' }), diff --git a/src/views/confirmation-email-candidature-conseiller/PageConfirmationEmailCandidatureConseiller.jsx b/src/views/confirmation-email-candidature-conseiller/PageConfirmationEmailCandidatureConseiller.jsx new file mode 100644 index 0000000..da40ebe --- /dev/null +++ b/src/views/confirmation-email-candidature-conseiller/PageConfirmationEmailCandidatureConseiller.jsx @@ -0,0 +1,12 @@ +import React from 'react'; +import Header from '../../components/Header'; +import ConfirmationEmailCandidatureConseiller from './ConfirmationEmailCandidatureConseiller'; + +export default function PageConfirmationEmailCandidatureConseiller() { + return ( + <> +
+ + + ); +} diff --git a/src/views/confirmation-email-candidature/useApiConfirmationEmailCandidature.js b/src/views/confirmation-email-candidature-conseiller/useApiConfirmationEmailCandidatureConseiller.js similarity index 62% rename from src/views/confirmation-email-candidature/useApiConfirmationEmailCandidature.js rename to src/views/confirmation-email-candidature-conseiller/useApiConfirmationEmailCandidatureConseiller.js index 2115726..fd2a27f 100644 --- a/src/views/confirmation-email-candidature/useApiConfirmationEmailCandidature.js +++ b/src/views/confirmation-email-candidature-conseiller/useApiConfirmationEmailCandidatureConseiller.js @@ -1,8 +1,8 @@ -export const useApiConfirmationEmailCandidature = () => { +export const useApiConfirmationEmailCandidatureConseiller = () => { - const actionConfirmationEmailCandidature = async token => { + const actionConfirmationEmailCandidatureConseiller = async token => { const baseUrl = import.meta.env.VITE_APP_API_URL; const requestOptions = { method: 'PATCH', @@ -15,5 +15,5 @@ export const useApiConfirmationEmailCandidature = () => { } }; - return { actionConfirmationEmailCandidature }; + return { actionConfirmationEmailCandidatureConseiller }; }; diff --git a/src/views/confirmation-email-candidature/PageConfirmationEmailCandidature.jsx b/src/views/confirmation-email-candidature/PageConfirmationEmailCandidature.jsx deleted file mode 100644 index ceedf24..0000000 --- a/src/views/confirmation-email-candidature/PageConfirmationEmailCandidature.jsx +++ /dev/null @@ -1,12 +0,0 @@ -import React from 'react'; -import Header from '../../components/Header'; -import ConfirmationEmailCandidature from './ConfirmationEmailCandidature'; - -export default function PageConfirmationEmailCandidature() { - return ( - <> -
- - - ); -} From ad6ff111b728589289a53c7d166845ca701463ca Mon Sep 17 00:00:00 2001 From: Ornella Ourfi Date: Fri, 20 Sep 2024 15:11:23 +0200 Subject: [PATCH 3/5] fix nommage --- src/App.js | 4 ++-- ...sx => PageConfirmationEmailCandidatureConseiller.test.jsx} | 0 ...jsx => PageConfirmationEmailCandidatureStructure.test.jsx} | 0 3 files changed, 2 insertions(+), 2 deletions(-) rename src/views/confirmation-email-candidature-conseiller/{PageConfirmationEmailCandidature.test.jsx => PageConfirmationEmailCandidatureConseiller.test.jsx} (100%) rename src/views/confirmation-email-candidature-structure/{PageConfirmationEmailCandidature.test.jsx => PageConfirmationEmailCandidatureStructure.test.jsx} (100%) diff --git a/src/App.js b/src/App.js index c7c64d9..832b3db 100644 --- a/src/App.js +++ b/src/App.js @@ -40,8 +40,8 @@ function App() { const PageCandidatureStructure = lazy(() => import('./views/candidature-structure/PageCandidatureStructure')); const PageCandidatureCoordinateur = lazy(() => import('./views/candidature-coordinateur/PageCandidatureCoordinateur')); const PageCandidatureValidee = lazy(() => import('./views/candidature-validee/PageCandidatureValidee')); - const PageConfirmationEmailCandidatureConseiller = lazy(() => import('./views/confirmation-email-candidature/PageConfirmationEmailCandidatureConnseiller')); - const PageConfirmationEmailCandidatureStructure = lazy(() => import('./views/confirmation-email-candidature/PageConfirmationEmailCandidatureStructure')); + const PageConfirmationEmailCandidatureConseiller = lazy(() => import('./views/confirmation-email-candidature-conseiller/PageConfirmationEmailCandidatureConseiller')); + const PageConfirmationEmailCandidatureStructure = lazy(() => import('./views/confirmation-email-candidature-structure/PageConfirmationEmailCandidatureStructure')); return (
diff --git a/src/views/confirmation-email-candidature-conseiller/PageConfirmationEmailCandidature.test.jsx b/src/views/confirmation-email-candidature-conseiller/PageConfirmationEmailCandidatureConseiller.test.jsx similarity index 100% rename from src/views/confirmation-email-candidature-conseiller/PageConfirmationEmailCandidature.test.jsx rename to src/views/confirmation-email-candidature-conseiller/PageConfirmationEmailCandidatureConseiller.test.jsx diff --git a/src/views/confirmation-email-candidature-structure/PageConfirmationEmailCandidature.test.jsx b/src/views/confirmation-email-candidature-structure/PageConfirmationEmailCandidatureStructure.test.jsx similarity index 100% rename from src/views/confirmation-email-candidature-structure/PageConfirmationEmailCandidature.test.jsx rename to src/views/confirmation-email-candidature-structure/PageConfirmationEmailCandidatureStructure.test.jsx From d9b1616dfb4c387d4d19a85c712f3ba59064f610 Mon Sep 17 00:00:00 2001 From: Ornella Ourfi Date: Fri, 20 Sep 2024 15:25:07 +0200 Subject: [PATCH 4/5] retour commentaire --- ...rmationEmailCandidatureConseiller.test.jsx | 19 ++++++++----------- .../ConfirmationEmailCandidatureStructure.jsx | 5 ++--- ...irmationEmailCandidatureStructure.test.jsx | 17 +++++++---------- ...piConfirmationEmailCandidatureStructure.js | 2 -- 4 files changed, 17 insertions(+), 26 deletions(-) diff --git a/src/views/confirmation-email-candidature-conseiller/PageConfirmationEmailCandidatureConseiller.test.jsx b/src/views/confirmation-email-candidature-conseiller/PageConfirmationEmailCandidatureConseiller.test.jsx index a59b82d..1317177 100644 --- a/src/views/confirmation-email-candidature-conseiller/PageConfirmationEmailCandidatureConseiller.test.jsx +++ b/src/views/confirmation-email-candidature-conseiller/PageConfirmationEmailCandidatureConseiller.test.jsx @@ -10,7 +10,6 @@ describe('confirmation Email', () => { it('quand j’affiche la page de confirmation de l’email validée alors le titre et les informations de la page s’affichent', () => { // WHEN render(); - vi.spyOn(window, 'scrollTo').mockImplementation(); // THEN const titre = screen.getByRole('heading', { level: 1, name: 'Confirmation de l’enregistrement de votre candidature' }); @@ -25,13 +24,12 @@ describe('confirmation Email', () => { expect(envoyer).toBeInTheDocument(); }); - it('quand l’utilisateur clique sur le bouton et que le lien est valide alors un message success s’affiche', async () => { + it('quand l’utilisateur clique sur le bouton et que le lien est valide alors un message de succès s’affiche', async () => { // WHEN - vi.spyOn(window, 'scrollTo').mockImplementation(); - render(); vi.stubGlobal('fetch', vi.fn( () => ({ status: 200, json: async () => Promise.resolve({}) })) ); + render(); const envoyer = screen.getByRole('button', { name: 'Confirmer' }); expect(envoyer).toBeInTheDocument(); @@ -39,8 +37,8 @@ describe('confirmation Email', () => { await act(() => { fireEvent.click(envoyer); }); - expect(envoyer).not.toBeInTheDocument(); // THEN + expect(envoyer).not.toBeInTheDocument(); const titre = screen.getByRole('heading', { level: 1, name: 'Confirmation de l’enregistrement de votre candidature' }); expect(titre).toBeInTheDocument(); @@ -53,14 +51,13 @@ describe('confirmation Email', () => { const messageError403 = screen.queryByText('Impossible de valider l’email, le lien a expiré ou est invalide.', { selector: 'p' }); expect(messageError403).not.toBeInTheDocument(); - const messageErrorGenerale = screen.queryByText('Une erreur s’est produite veuillez réessayer plus tard.', { selector: 'p' }); - expect(messageErrorGenerale).not.toBeInTheDocument(); + const messageErreurGenerale = screen.queryByText('Une erreur s’est produite veuillez réessayer plus tard.', { selector: 'p' }); + expect(messageErreurGenerale).not.toBeInTheDocument(); }); it('quand l’utilisateur clique sur le bouton et que le lien est invalide alors un message d’erreur s’affiche', async () => { // GIVEN - vi.spyOn(window, 'scrollTo').mockImplementation(); vi.stubGlobal('fetch', vi.fn( () => ({ status: 403, json: async () => Promise.resolve({}) })) ); @@ -87,12 +84,12 @@ describe('confirmation Email', () => { const messageSuccess = screen.queryByText('Votre email a été confirmé et votre inscription est maintenant active.' + ' Vous serez contacté par mail ou par téléphone si une structure est intéressée par votre profil.', { selector: 'p' }); expect(messageSuccess).not.toBeInTheDocument(); - const messageErrorGenerale = screen.queryByText('Une erreur s’est produite veuillez réessayer plus tard.', { selector: 'p' }); - expect(messageErrorGenerale).not.toBeInTheDocument(); + const messageErreurGenerale = screen.queryByText('Une erreur s’est produite veuillez réessayer plus tard.', { selector: 'p' }); + expect(messageErreurGenerale).not.toBeInTheDocument(); }); - it('quand l’utilisateur clique sur le bouton et qu’une erreur innatendu se produit alors un message d’erreur s’affiche', async () => { + it('quand l’utilisateur clique sur le bouton et qu’une erreur innatendue se produit alors un message d’erreur s’affiche', async () => { // GIVEN vi.stubGlobal('fetch', vi.fn( () => ({ status: 500, json: async () => Promise.resolve({}) })) diff --git a/src/views/confirmation-email-candidature-structure/ConfirmationEmailCandidatureStructure.jsx b/src/views/confirmation-email-candidature-structure/ConfirmationEmailCandidatureStructure.jsx index 13ea1ec..da2ab48 100644 --- a/src/views/confirmation-email-candidature-structure/ConfirmationEmailCandidatureStructure.jsx +++ b/src/views/confirmation-email-candidature-structure/ConfirmationEmailCandidatureStructure.jsx @@ -2,7 +2,6 @@ import React, { useEffect, useState } from 'react'; import { useParams } from 'react-router-dom'; import { useApiConfirmationEmailCandidatureStructure } from './useApiConfirmationEmailCandidatureStructure'; - export default function ConfirmationEmailCandidatureStructure() { const [reponseStatusConfirmation, setReponseStatusConfirmation] = useState(null); const { actionConfirmationEmailCandidatureStructure } = useApiConfirmationEmailCandidatureStructure(); @@ -11,7 +10,7 @@ export default function ConfirmationEmailCandidatureStructure() { useEffect(() => { window.scrollTo({ top: 0, behavior: 'smooth' }); }, []); - const ClickBoutonConfirmer = async () => { + const confirmerEmailCandidatureStructure = async () => { const response = await actionConfirmationEmailCandidatureStructure(token); setReponseStatusConfirmation(response.status); }; @@ -32,7 +31,7 @@ export default function ConfirmationEmailCandidatureStructure() {

Appuyez sur le bouton pour confirmer votre email

- } diff --git a/src/views/confirmation-email-candidature-structure/PageConfirmationEmailCandidatureStructure.test.jsx b/src/views/confirmation-email-candidature-structure/PageConfirmationEmailCandidatureStructure.test.jsx index 2cef85c..f115a3e 100644 --- a/src/views/confirmation-email-candidature-structure/PageConfirmationEmailCandidatureStructure.test.jsx +++ b/src/views/confirmation-email-candidature-structure/PageConfirmationEmailCandidatureStructure.test.jsx @@ -10,7 +10,6 @@ describe('confirmation Email', () => { it('quand j’affiche la page de confirmation de l’email validée alors le titre et les informations de la page s’affichent', () => { // WHEN render(); - vi.spyOn(window, 'scrollTo').mockImplementation(); // THEN const titre = screen.getByRole('heading', { level: 1, name: 'Confirmation de l’enregistrement de votre candidature' }); @@ -25,13 +24,12 @@ describe('confirmation Email', () => { expect(envoyer).toBeInTheDocument(); }); - it('quand l’utilisateur clique sur le bouton et que le lien est valide alors un message success s’affiche', async () => { + it('quand l’utilisateur clique sur le bouton et que le lien est valide alors un message de succès s’affiche', async () => { // WHEN - vi.spyOn(window, 'scrollTo').mockImplementation(); - render(); vi.stubGlobal('fetch', vi.fn( () => ({ status: 200, json: async () => Promise.resolve({}) })) ); + render(); const envoyer = screen.getByRole('button', { name: 'Confirmer' }); expect(envoyer).toBeInTheDocument(); @@ -53,14 +51,13 @@ describe('confirmation Email', () => { const messageError403 = screen.queryByText('Impossible de valider l’email, le lien a expiré ou est invalide.', { selector: 'p' }); expect(messageError403).not.toBeInTheDocument(); - const messageErrorGenerale = screen.queryByText('Une erreur s’est produite veuillez réessayer plus tard.', { selector: 'p' }); - expect(messageErrorGenerale).not.toBeInTheDocument(); + const messageErreurGenerale = screen.queryByText('Une erreur s’est produite veuillez réessayer plus tard.', { selector: 'p' }); + expect(messageErreurGenerale).not.toBeInTheDocument(); }); it('quand l’utilisateur clique sur le bouton et que le lien est invalide alors un message d’erreur s’affiche', async () => { // GIVEN - vi.spyOn(window, 'scrollTo').mockImplementation(); vi.stubGlobal('fetch', vi.fn( () => ({ status: 403, json: async () => Promise.resolve({}) })) ); @@ -87,12 +84,12 @@ describe('confirmation Email', () => { const messageSuccess = screen.queryByText('Votre email a été confirmé et votre inscription est maintenant active.' + ' Vous recevrez un mail d’activation de votre espace structure lorsque votre candidature aura été validée.', { selector: 'p' }); expect(messageSuccess).not.toBeInTheDocument(); - const messageErrorGenerale = screen.queryByText('Une erreur s’est produite veuillez réessayer plus tard.', { selector: 'p' }); - expect(messageErrorGenerale).not.toBeInTheDocument(); + const messageErreurGenerale = screen.queryByText('Une erreur s’est produite veuillez réessayer plus tard.', { selector: 'p' }); + expect(messageErreurGenerale).not.toBeInTheDocument(); }); - it('quand l’utilisateur clique sur le bouton et qu’une erreur innatendu se produit alors un message d’erreur s’affiche', async () => { + it('quand l’utilisateur clique sur le bouton et qu’une erreur innatendue se produit alors un message d’erreur s’affiche', async () => { // GIVEN vi.stubGlobal('fetch', vi.fn( () => ({ status: 500, json: async () => Promise.resolve({}) })) diff --git a/src/views/confirmation-email-candidature-structure/useApiConfirmationEmailCandidatureStructure.js b/src/views/confirmation-email-candidature-structure/useApiConfirmationEmailCandidatureStructure.js index 8732f71..cf445e1 100644 --- a/src/views/confirmation-email-candidature-structure/useApiConfirmationEmailCandidatureStructure.js +++ b/src/views/confirmation-email-candidature-structure/useApiConfirmationEmailCandidatureStructure.js @@ -1,7 +1,5 @@ - export const useApiConfirmationEmailCandidatureStructure = () => { - const actionConfirmationEmailCandidatureStructure = async token => { const baseUrl = import.meta.env.VITE_APP_API_URL; const requestOptions = { From 2bccb3095d66d663e87d6bd2ad87cfa73f0eb7d6 Mon Sep 17 00:00:00 2001 From: Ornella Ourfi Date: Fri, 20 Sep 2024 15:49:04 +0200 Subject: [PATCH 5/5] fix lint --- src/App.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/App.js b/src/App.js index 832b3db..2a179d6 100644 --- a/src/App.js +++ b/src/App.js @@ -40,8 +40,10 @@ function App() { const PageCandidatureStructure = lazy(() => import('./views/candidature-structure/PageCandidatureStructure')); const PageCandidatureCoordinateur = lazy(() => import('./views/candidature-coordinateur/PageCandidatureCoordinateur')); const PageCandidatureValidee = lazy(() => import('./views/candidature-validee/PageCandidatureValidee')); - const PageConfirmationEmailCandidatureConseiller = lazy(() => import('./views/confirmation-email-candidature-conseiller/PageConfirmationEmailCandidatureConseiller')); - const PageConfirmationEmailCandidatureStructure = lazy(() => import('./views/confirmation-email-candidature-structure/PageConfirmationEmailCandidatureStructure')); + const PageConfirmationEmailCandidatureConseiller = + lazy(() => import('./views/confirmation-email-candidature-conseiller/PageConfirmationEmailCandidatureConseiller')); + const PageConfirmationEmailCandidatureStructure = + lazy(() => import('./views/confirmation-email-candidature-structure/PageConfirmationEmailCandidatureStructure')); return (