feat(transport) : modif — onglet Qualimat (actualisation) + certification éditable (déliage Qualimat) (ERP-172)
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Successful in 3m14s
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Has been cancelled

This commit is contained in:
2026-06-17 17:40:05 +02:00
parent e76bd1dd63
commit 76fb01c063
5 changed files with 333 additions and 190 deletions
@@ -975,3 +975,73 @@ describe('useCarrierForm — édition (ERP-170)', () => {
expect(form.main.name).toBe('TRANSPORTS ACME')
})
})
describe('useCarrierForm — modification : Qualimat + certification (ERP-172)', () => {
const QUALIMAT_ROW = {
'@id': '/api/qualimat_carriers/42',
id: '42',
name: 'TRANSPORTS QUALIMAT',
address: '1 rue du Port',
postalCode: '86000',
city: 'Poitiers',
validityDate: '2027-01-15',
status: 'VALIDE',
}
beforeEach(() => {
mockPost.mockReset()
mockPatch.mockReset()
})
it('setCertification : quitter QUALIMAT délie la FK qualimatCarrier', () => {
const form = useCarrierForm()
form.main.qualimatCarrierIri = '/api/qualimat_carriers/42'
form.main.certificationType = 'QUALIMAT'
form.setCertification('GMP_PLUS')
expect(form.main.certificationType).toBe('GMP_PLUS')
expect(form.main.qualimatCarrierIri).toBeNull()
})
it('certificationReadonly : éditable en modification même pour un QUALIMAT', () => {
const form = useCarrierForm()
form.prefillFrom({
'@id': '/api/carriers/7', id: 7, name: 'ACME', certificationType: 'QUALIMAT',
qualimatCarrier: { '@id': '/api/qualimat_carriers/42' },
})
expect(form.isQualimat.value).toBe(true)
expect(form.certificationReadonly.value).toBe(false)
})
it('buildMainPayload : en modification, délie le Qualimat (qualimatCarrier: null) sans lien', () => {
const form = useCarrierForm()
form.prefillFrom({
'@id': '/api/carriers/7', id: 7, name: 'ACME', certificationType: 'QUALIMAT',
qualimatCarrier: { '@id': '/api/qualimat_carriers/42' },
})
form.setCertification('GMP_PLUS')
expect(form.buildMainPayload()).toMatchObject({ certificationType: 'GMP_PLUS', qualimatCarrier: null })
})
it('applyQualimatSelection : en modification, conserve l\'adresse existante (PATCH nom/certif/FK)', async () => {
mockPatch.mockResolvedValueOnce({})
const form = useCarrierForm()
form.prefillFrom({
'@id': '/api/carriers/7', id: 7, name: 'OLD', certificationType: 'GMP_PLUS',
address: { '@id': '/api/carrier_addresses/3', id: 3, city: 'Poitiers', street: 'rue A' },
})
const addressBefore = { ...form.address.value }
const ok = await form.applyQualimatSelection(QUALIMAT_ROW)
expect(ok).toBe(true)
// Décision « conserver » (ERP-172) : l'adresse n'est pas réécrite en modification.
expect(form.address.value).toEqual(addressBefore)
// Nom + certification + FK actualisés via PATCH.
expect(form.main.name).toBe('TRANSPORTS QUALIMAT')
expect(form.main.certificationType).toBe('QUALIMAT')
expect(form.main.qualimatCarrierIri).toBe('/api/qualimat_carriers/42')
})
})