diff --git a/src/views/candidature-conseiller/CandidatureConseiller.jsx b/src/views/candidature-conseiller/CandidatureConseiller.jsx index ed0f3a6..d2c4c54 100644 --- a/src/views/candidature-conseiller/CandidatureConseiller.jsx +++ b/src/views/candidature-conseiller/CandidatureConseiller.jsx @@ -57,9 +57,11 @@ export default function CandidatureConseiller() { if (resultatCreation?.status >= 400) { const error = await resultatCreation.json(); setValidationError(error.message); + window.hcaptcha.reset(); window.scrollTo({ top: 0, behavior: 'smooth' }); } else if (!resultatCreation.status) { setValidationError(resultatCreation.message); + window.hcaptcha.reset(); window.scrollTo({ top: 0, behavior: 'smooth' }); } else { navigate('/candidature-validee-conseiller'); diff --git a/src/views/candidature-conseiller/CandidatureConseiller.test.jsx b/src/views/candidature-conseiller/CandidatureConseiller.test.jsx index ee73c21..47ad729 100644 --- a/src/views/candidature-conseiller/CandidatureConseiller.test.jsx +++ b/src/views/candidature-conseiller/CandidatureConseiller.test.jsx @@ -431,7 +431,8 @@ describe('candidature conseiller', () => { vi.useRealTimers(); }); - it('quand je remplis le formulaire, que je l’envoie et que le serveur me renvoie une erreur, alors elle s’affiche sur la page', async () => { + // eslint-disable-next-line max-len + it('quand je remplis le formulaire, que je l’envoie et que le serveur me renvoie une erreur, alors elle s’affiche sur la page et le captcha est rénitialiser', async () => { // GIVEN vi.useFakeTimers(); vi.setSystemTime(new Date(2023, 11, 12, 13)); @@ -439,6 +440,10 @@ describe('candidature conseiller', () => { vi.stubGlobal('fetch', vi.fn( () => ({ status: 400, json: async () => Promise.resolve({ message: 'Cette adresse mail est déjà utilisée' }) })) ); + vi.stubGlobal('hcaptcha', { + reset: vi.fn(), + render: vi.fn() + }); render(); const prenom = screen.getByLabelText('Prénom *'); @@ -469,6 +474,7 @@ describe('candidature conseiller', () => { }); // THEN + expect(window.hcaptcha.reset).toHaveBeenCalledTimes(1); const titreErreurValidation = screen.getByRole('heading', { level: 3, name: 'Erreur de validation' }); expect(titreErreurValidation).toBeInTheDocument(); const contenuErreurValidation = screen.getByText('Cette adresse mail est déjà utilisée', { selector: 'p' }); @@ -662,7 +668,7 @@ describe('candidature conseiller', () => { vi.useRealTimers(); }); - it('quand je remplis le formulaire et qu’une erreur se produit alors un message d’erreur s’affiche', async () => { + it('quand je remplis le formulaire et qu’une erreur se produit alors un message d’erreur s’affiche et le captcha est rénitialiser', async () => { // GIVEN vi.useFakeTimers(); vi.setSystemTime(new Date(2023, 11, 12, 13)); @@ -671,6 +677,10 @@ describe('candidature conseiller', () => { creerCandidatureConseiller: vi.fn().mockReturnValue({ message: 'Failed to fetch' }), buildConseillerData: vi.fn(), })); + vi.stubGlobal('hcaptcha', { + reset: vi.fn(), + render: vi.fn() + }); render(); const prenom = screen.getByLabelText('Prénom *'); @@ -703,6 +713,7 @@ describe('candidature conseiller', () => { }); // THEN + expect(window.hcaptcha.reset).toHaveBeenCalledTimes(1); const contenuErreurValidation = screen.getByText('Failed to fetch', { selector: 'p' }); expect(contenuErreurValidation).toBeInTheDocument(); diff --git a/src/views/candidature-coordinateur/CandidatureCoordinateur.jsx b/src/views/candidature-coordinateur/CandidatureCoordinateur.jsx index b1a72b6..542ebb1 100644 --- a/src/views/candidature-coordinateur/CandidatureCoordinateur.jsx +++ b/src/views/candidature-coordinateur/CandidatureCoordinateur.jsx @@ -42,9 +42,11 @@ export default function CandidatureCoordinateur() { if (resultatCreation?.status >= 400) { const error = await resultatCreation.json(); setValidationError(error.message); + window.hcaptcha.reset(); window.scrollTo({ top: 0, behavior: 'smooth' }); } else if (!resultatCreation.status) { setValidationError(resultatCreation.message); + window.hcaptcha.reset(); window.scrollTo({ top: 0, behavior: 'smooth' }); } else { navigate('/candidature-validee-structure'); diff --git a/src/views/candidature-coordinateur/CandidatureCoordinateur.test.jsx b/src/views/candidature-coordinateur/CandidatureCoordinateur.test.jsx index f166a49..164200a 100644 --- a/src/views/candidature-coordinateur/CandidatureCoordinateur.test.jsx +++ b/src/views/candidature-coordinateur/CandidatureCoordinateur.test.jsx @@ -247,7 +247,8 @@ describe('candidature coordinateur', () => { within(formulaire).getByRole('button', { name: 'Envoyer votre candidature' }); }); - it('quand je remplis le formulaire, que je l’envoie et que le serveur me renvoie une erreur, alors elle s’affiche sur la page', async () => { + // eslint-disable-next-line max-len + it('quand je remplis le formulaire, que je l’envoie et que le serveur me renvoie une erreur, alors elle s’affiche sur la page et le captcha est rénitialiser', async () => { // GIVEN vi.useFakeTimers(); vi.setSystemTime(new Date(2023, 11, 12, 13)); @@ -255,6 +256,10 @@ describe('candidature coordinateur', () => { vi.stubGlobal('fetch', vi.fn( () => ({ status: 400, json: async () => Promise.resolve({ message: 'Cette adresse mail est déjà utilisée' }) })) ); + vi.stubGlobal('hcaptcha', { + reset: vi.fn(), + render: vi.fn() + }); render(); const siret = screen.getByLabelText('SIRET / RIDET *'); @@ -295,6 +300,7 @@ describe('candidature coordinateur', () => { }); // THEN + expect(window.hcaptcha.reset).toHaveBeenCalledTimes(1); const titreErreurValidation = screen.getByRole('heading', { level: 3, name: 'Erreur de validation' }); expect(titreErreurValidation).toBeInTheDocument(); const contenuErreurValidation = screen.getByText('Cette adresse mail est déjà utilisée', { selector: 'p' }); @@ -463,7 +469,7 @@ describe('candidature coordinateur', () => { vi.useRealTimers(); }); - it('quand je remplis le formulaire et qu’une erreur se produit alors un message d’erreur s’affiche', async () => { + it('quand je remplis le formulaire et qu’une erreur se produit alors un message d’erreur s’affiche et le captcha est rénitialiser', async () => { // GIVEN vi.useFakeTimers(); vi.setSystemTime(new Date(2023, 11, 12, 13)); @@ -472,6 +478,10 @@ describe('candidature coordinateur', () => { creerCandidatureCoordinateur: vi.fn().mockReturnValue({ message: 'Failed to fetch' }), buildCoordinateurData: vi.fn(), })); + vi.stubGlobal('hcaptcha', { + reset: vi.fn(), + render: vi.fn() + }); render(); const siret = screen.getByLabelText('SIRET / RIDET *'); @@ -513,6 +523,7 @@ describe('candidature coordinateur', () => { // THEN + expect(window.hcaptcha.reset).toHaveBeenCalledTimes(1); const contenuErreurValidation = screen.getByText('Failed to fetch', { selector: 'p' }); expect(contenuErreurValidation).toBeInTheDocument(); diff --git a/src/views/candidature-structure/CandidatureStructure.jsx b/src/views/candidature-structure/CandidatureStructure.jsx index 9208e5c..f69348d 100644 --- a/src/views/candidature-structure/CandidatureStructure.jsx +++ b/src/views/candidature-structure/CandidatureStructure.jsx @@ -43,9 +43,11 @@ export default function CandidatureStructure() { if (resultatCreation?.status >= 400) { const error = await resultatCreation.json(); setValidationError(error.message); + window.hcaptcha.reset(); window.scrollTo({ top: 0, behavior: 'smooth' }); } else if (!resultatCreation.status) { setValidationError(resultatCreation.message); + window.hcaptcha.reset(); window.scrollTo({ top: 0, behavior: 'smooth' }); } else { navigate('/candidature-validee-structure'); diff --git a/src/views/candidature-structure/CandidatureStructure.test.jsx b/src/views/candidature-structure/CandidatureStructure.test.jsx index de05cdd..7fa5306 100644 --- a/src/views/candidature-structure/CandidatureStructure.test.jsx +++ b/src/views/candidature-structure/CandidatureStructure.test.jsx @@ -339,7 +339,8 @@ describe('candidature structure', () => { }); }); - it('quand je remplis le formulaire, que je l’envoie et que le serveur me renvoie une erreur, alors elle s’affiche sur la page', async () => { + // eslint-disable-next-line max-len + it('quand je remplis le formulaire, que je l’envoie et que le serveur me renvoie une erreur de doublon, alors elle s’affiche sur la page et le captcha est rénitialiser', async () => { // GIVEN vi.useFakeTimers(); vi.setSystemTime(new Date(2023, 11, 12, 13)); @@ -347,6 +348,10 @@ describe('candidature structure', () => { vi.stubGlobal('fetch', vi.fn( () => ({ status: 400, json: async () => Promise.resolve({ message: 'Cette adresse mail est déjà utilisée' }) })) ); + vi.stubGlobal('hcaptcha', { + reset: vi.fn(), + render: vi.fn() + }); render(); const siret = screen.getByLabelText('SIRET / RIDET *'); @@ -387,6 +392,7 @@ describe('candidature structure', () => { }); // THEN + expect(window.hcaptcha.reset).toHaveBeenCalledTimes(1); const titreErreurValidation = screen.getByRole('heading', { level: 3, name: 'Erreur de validation' }); expect(titreErreurValidation).toBeInTheDocument(); const contenuErreurValidation = screen.getByText('Cette adresse mail est déjà utilisée', { selector: 'p' }); @@ -556,7 +562,7 @@ describe('candidature structure', () => { vi.useRealTimers(); }); - it('quand je remplis le formulaire et qu’une erreur se produit alors un message d’erreur s’affiche', async () => { + it('quand je candidate et q’une erreur server survient, alors le message d’erreur s’affiche et le captcha est rénitialiser', async () => { // GIVEN vi.useFakeTimers(); vi.setSystemTime(new Date(2023, 11, 12, 13)); @@ -565,6 +571,10 @@ describe('candidature structure', () => { creerCandidatureStructure: vi.fn().mockReturnValue({ message: 'Failed to fetch' }), buildStructureData: vi.fn(), })); + vi.stubGlobal('hcaptcha', { + reset: vi.fn(), + render: vi.fn() + }); render(); const siret = screen.getByLabelText('SIRET / RIDET *'); @@ -606,6 +616,7 @@ describe('candidature structure', () => { // THEN + expect(window.hcaptcha.reset).toHaveBeenCalledTimes(1); const contenuErreurValidation = screen.getByText('Failed to fetch', { selector: 'p' }); expect(contenuErreurValidation).toBeInTheDocument();