Skip to content

Commit

Permalink
reset captcha en cas d'erreur
Browse files Browse the repository at this point in the history
  • Loading branch information
Ornella452 committed Oct 4, 2024
1 parent 8d02a3a commit f40c2da
Show file tree
Hide file tree
Showing 6 changed files with 45 additions and 6 deletions.
2 changes: 2 additions & 0 deletions src/views/candidature-conseiller/CandidatureConseiller.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -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');
Expand Down
15 changes: 13 additions & 2 deletions src/views/candidature-conseiller/CandidatureConseiller.test.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -431,14 +431,19 @@ 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));

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(<CandidatureConseiller />);
const prenom = screen.getByLabelText('Prénom *');
Expand Down Expand Up @@ -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' });
Expand Down Expand Up @@ -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));
Expand All @@ -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(<CandidatureConseiller />);
const prenom = screen.getByLabelText('Prénom *');
Expand Down Expand Up @@ -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();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -247,14 +247,19 @@ 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));

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(<CandidatureCoordinateur />);
const siret = screen.getByLabelText('SIRET / RIDET *');
Expand Down Expand Up @@ -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' });
Expand Down Expand Up @@ -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));
Expand All @@ -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(<CandidatureCoordinateur />);
const siret = screen.getByLabelText('SIRET / RIDET *');
Expand Down Expand Up @@ -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();

Expand Down
2 changes: 2 additions & 0 deletions src/views/candidature-structure/CandidatureStructure.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -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');
Expand Down
15 changes: 13 additions & 2 deletions src/views/candidature-structure/CandidatureStructure.test.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -339,14 +339,19 @@ 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));

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(<CandidatureStructure />);
const siret = screen.getByLabelText('SIRET / RIDET *');
Expand Down Expand Up @@ -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' });
Expand Down Expand Up @@ -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));
Expand All @@ -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(<CandidatureStructure />);
const siret = screen.getByLabelText('SIRET / RIDET *');
Expand Down Expand Up @@ -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();

Expand Down

0 comments on commit f40c2da

Please sign in to comment.