diff --git a/src/views/candidature-conseiller/AddressChooser.jsx b/src/views/candidature-conseiller/AddressChooser.jsx index 7f054f1..9594c76 100644 --- a/src/views/candidature-conseiller/AddressChooser.jsx +++ b/src/views/candidature-conseiller/AddressChooser.jsx @@ -14,8 +14,10 @@ export default function AddressChooser() { id="lieuHabitation" list="resultatsRecherche" onChange={debounce(async event => { - searchByName(event.target.value); - const codeCommune = await villes.find(({ codesPostaux, nom }) => + if (event.target.value.length >= 3) { + searchByName(event.target.value); + } + const codeCommune = await villes?.find(({ codesPostaux, nom }) => (`${codesPostaux[0]} ${nom}`).toUpperCase() === (event.target.value).toUpperCase())?.code; setCodeCommune(codeCommune); })} diff --git a/src/views/candidature-conseiller/CandidatureConseiller.test.jsx b/src/views/candidature-conseiller/CandidatureConseiller.test.jsx index 1c1dfdf..eb21b5d 100644 --- a/src/views/candidature-conseiller/CandidatureConseiller.test.jsx +++ b/src/views/candidature-conseiller/CandidatureConseiller.test.jsx @@ -4,6 +4,7 @@ import CandidatureConseiller from './CandidatureConseiller'; import { textMatcher, dateDujour } from '../../../test/test-utils'; import * as ReactRouterDom from 'react-router-dom'; import * as useApiAdmin from './useApiAdmin'; +import * as useGeoApi from './useGeoApi'; vi.mock('react-router-dom', () => ({ useLocation: () => ({ hash: '' }), @@ -723,4 +724,33 @@ describe('candidature conseiller', () => { vi.useRealTimers(); }); + + it('quand je remplis le formulaire et que je saisi mon lieu d’habitation alors la recherche est lancer à partir de 3 caractères', async () => { + // GIVEN + vi.useFakeTimers(); + const searchByNameSpy = vi.fn(); + vi.spyOn(useGeoApi, 'useGeoApi').mockImplementation(() => ({ + searchByName: searchByNameSpy, + })); + + // WHEN + render(); + const adresse = screen.getByLabelText('Votre lieu d’habitation * Saississez le nom ou le code postal de votre commune.'); + + // THEN + fireEvent.change(adresse, { target: { value: '9' } }); + vi.advanceTimersByTime(300); + expect(searchByNameSpy).toHaveBeenCalledTimes(0); + fireEvent.change(adresse, { target: { value: '93' } }); + vi.advanceTimersByTime(300); + expect(searchByNameSpy).toHaveBeenCalledTimes(0); + fireEvent.change(adresse, { target: { value: '931' } }); + vi.advanceTimersByTime(300); + expect(searchByNameSpy).toHaveBeenCalledTimes(1); + fireEvent.change(adresse, { target: { value: '93100' } }); + vi.advanceTimersByTime(300); + expect(searchByNameSpy).toHaveBeenCalledTimes(2); + + vi.useRealTimers(); + }); });