feat(front) : onglet contact prestataire
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Successful in 2m41s
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Successful in 1m20s

This commit is contained in:
2026-06-15 09:22:38 +02:00
parent a6f01400ba
commit 564114b265
9 changed files with 709 additions and 6 deletions
@@ -0,0 +1,79 @@
import { describe, it, expect } from 'vitest'
import {
buildProviderContactPayload,
hasAtLeastOneFilledContact,
isProviderContactBlank,
} from '../providerContact'
import { emptyProviderContact } from '~/modules/technique/types/providerForm'
/**
* Helpers purs de l'onglet Contact prestataire (ERP-142). On verifie la
* definition de « bloc vide » (RG-3.04, alignee sur le back) et la construction
* du payload de sous-ressource.
*/
describe('providerContact helpers', () => {
describe('isProviderContactBlank (RG-3.04)', () => {
it('un bloc vierge est vide', () => {
expect(isProviderContactBlank(emptyProviderContact())).toBe(true)
})
it('un seul champ rempli parmi nom/prenom/fonction/tel/email suffit a le rendre non vide', () => {
for (const field of ['firstName', 'lastName', 'jobTitle', 'phonePrimary', 'email'] as const) {
const contact = { ...emptyProviderContact(), [field]: 'x' }
expect(isProviderContactBlank(contact)).toBe(false)
}
})
it('ignore les espaces (trim) — un champ blanc ne compte pas', () => {
expect(isProviderContactBlank({ ...emptyProviderContact(), lastName: ' ' })).toBe(true)
})
it('un 2e telephone seul NE suffit PAS (exclu, comme le back)', () => {
const contact = { ...emptyProviderContact(), hasSecondaryPhone: true, phoneSecondary: '0102030405' }
expect(isProviderContactBlank(contact)).toBe(true)
})
})
describe('hasAtLeastOneFilledContact (RG-3.12)', () => {
it('false si tous les blocs sont vides', () => {
expect(hasAtLeastOneFilledContact([emptyProviderContact(), emptyProviderContact()])).toBe(false)
})
it('true des qu\'un bloc porte une donnee', () => {
expect(hasAtLeastOneFilledContact([
emptyProviderContact(),
{ ...emptyProviderContact(), email: 'a@b.fr' },
])).toBe(true)
})
})
describe('buildProviderContactPayload', () => {
it('mappe les champs et envoie null pour les vides', () => {
const payload = buildProviderContactPayload({ ...emptyProviderContact(), lastName: 'Doe' })
expect(payload).toEqual({
firstName: null,
lastName: 'Doe',
jobTitle: null,
phonePrimary: null,
phoneSecondary: null,
email: null,
})
})
it('n\'envoie le 2e telephone que si revele (max 2)', () => {
const masque = buildProviderContactPayload({
...emptyProviderContact(),
phoneSecondary: '0102030405',
hasSecondaryPhone: false,
})
expect(masque.phoneSecondary).toBeNull()
const revele = buildProviderContactPayload({
...emptyProviderContact(),
phoneSecondary: '0102030405',
hasSecondaryPhone: true,
})
expect(revele.phoneSecondary).toBe('0102030405')
})
})
})