912280d24e
Auto Tag Develop / tag (push) Successful in 7s
## ERP-66 — Utilitaires adresse/téléphone + autocomplétion BAN ### feat - **httpExternal** : client dédié aux API publiques externes (URL absolue, sans cookie de session, timeout). Seul point d'entrée autorisé pour un `$fetch` externe (règle frontend n°4). - **useAddressAutocomplete** : implémentation BAN (api-adresse.data.gouv.fr) — recherche ville (`type=municipality`) et adresse, mapping GeoJSON, throw en cas d'erreur/timeout (mode dégradé côté composant). La recherche d'adresse n'impose **pas** `type=housenumber` (sinon 0 résultat tant qu'aucun numéro n'est saisi) — spec-front mise à jour. - Tests Vitest : httpExternal, useAddressAutocomplete, cas limites `formatPhoneFR`. ### fix - **ClientAddressBlock** : la rue courante est toujours réinjectée dans les options de `MalioInputAutocomplete` (computed, miroir de `cityOptions`). Corrige le champ Adresse qui se vidait après validation / à l'édition d'une adresse existante (valeur pourtant persistée). Test de montage ajouté. - **useClientReferentials** : libellé des sites = numéro de département (2 premiers chiffres du code postal, déjà exposé par `/sites`) au lieu du nom. ### Vérifs - ESLint ✅ · Vitest 196/196 ✅ - Changements 100% frontend (+ doc spec). Reviewed-on: #52 Co-authored-by: tristan <tristan@yuno.malio.fr> Co-committed-by: tristan <tristan@yuno.malio.fr>
47 lines
1.8 KiB
TypeScript
47 lines
1.8 KiB
TypeScript
import { describe, it, expect } from 'vitest'
|
|
import { formatPhoneFR } from '../phone'
|
|
|
|
describe('formatPhoneFR', () => {
|
|
it('formate un numero 10 chiffres en XX XX XX XX XX', () => {
|
|
expect(formatPhoneFR('0612345678')).toBe('06 12 34 56 78')
|
|
})
|
|
|
|
it('tolere une saisie deja pointee ou espacee', () => {
|
|
expect(formatPhoneFR('06.12.34.56.78')).toBe('06 12 34 56 78')
|
|
expect(formatPhoneFR('06 12 34 56 78')).toBe('06 12 34 56 78')
|
|
})
|
|
|
|
it('retourne une chaine vide pour une valeur vide ou nulle', () => {
|
|
expect(formatPhoneFR('')).toBe('')
|
|
expect(formatPhoneFR(null)).toBe('')
|
|
expect(formatPhoneFR(undefined)).toBe('')
|
|
})
|
|
|
|
it('groupe par 2 meme un nombre impair de chiffres (dernier groupe seul)', () => {
|
|
expect(formatPhoneFR('123')).toBe('12 3')
|
|
})
|
|
|
|
it('formate une saisie courte (<= 4 chiffres) sans planter', () => {
|
|
expect(formatPhoneFR('1')).toBe('1')
|
|
expect(formatPhoneFR('12')).toBe('12')
|
|
expect(formatPhoneFR('1234')).toBe('12 34')
|
|
})
|
|
|
|
it('strip les caracteres non numeriques (lettres, espaces, ponctuation)', () => {
|
|
expect(formatPhoneFR('abc')).toBe('')
|
|
expect(formatPhoneFR('Tel : 06.12')).toBe('06 12')
|
|
expect(formatPhoneFR(' 06 12 ')).toBe('06 12')
|
|
})
|
|
|
|
it('conserve l\'indicatif international (+33) sans le transformer', () => {
|
|
// Comportement fige : on retire seulement le `+`, on ne deduit pas le
|
|
// prefixe pays. Le `+33...` est donc groupe brut par paquets de 2.
|
|
expect(formatPhoneFR('+33612345678')).toBe('33 61 23 45 67 8')
|
|
})
|
|
|
|
it('groupe sans tronquer une saisie plus longue que 10 chiffres', () => {
|
|
// Aucune troncature silencieuse : on figure tous les chiffres groupes par 2.
|
|
expect(formatPhoneFR('061234567899')).toBe('06 12 34 56 78 99')
|
|
})
|
|
})
|