fix(transport) : intégration QUALIMAT — copie locale seulement après PATCH réussi (évite un état non persisté) (ERP-166)
This commit is contained in:
@@ -404,6 +404,23 @@ describe('useCarrierForm — copie QUALIMAT (ERP-166)', () => {
|
|||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('après création : PATCH en échec → pas de copie locale (rollback) et retour false', async () => {
|
||||||
|
mockPost.mockResolvedValueOnce({ id: 9, name: 'X', certificationType: 'GMP_PLUS' })
|
||||||
|
mockPatch.mockRejectedValueOnce({ response: { status: 500, _data: {} } })
|
||||||
|
const form = useCarrierForm()
|
||||||
|
form.main.name = 'X'
|
||||||
|
form.main.certificationType = 'GMP_PLUS'
|
||||||
|
await form.submitMain()
|
||||||
|
|
||||||
|
const ok = await form.applyQualimatSelection(QUALIMAT_ROW)
|
||||||
|
|
||||||
|
// Échec serveur : l'UI ne doit pas refléter une intégration QUALIMAT non persistée.
|
||||||
|
expect(ok).toBe(false)
|
||||||
|
expect(form.main.name).toBe('X')
|
||||||
|
expect(form.main.certificationType).toBe('GMP_PLUS')
|
||||||
|
expect(form.main.qualimatCarrierIri).toBeNull()
|
||||||
|
})
|
||||||
|
|
||||||
it('buildMainPayload inclut qualimatCarrier + certificationType QUALIMAT après intégration', async () => {
|
it('buildMainPayload inclut qualimatCarrier + certificationType QUALIMAT après intégration', async () => {
|
||||||
const form = useCarrierForm()
|
const form = useCarrierForm()
|
||||||
form.main.name = 'Acme'
|
form.main.name = 'Acme'
|
||||||
|
|||||||
@@ -260,10 +260,27 @@ export function useCarrierForm() {
|
|||||||
* § 2.5) : copie le nom, force la certification à « QUALIMAT » (lecture seule),
|
* § 2.5) : copie le nom, force la certification à « QUALIMAT » (lecture seule),
|
||||||
* pose la FK `qualimatCarrier` (IRI) et copie l'adresse (pour l'onglet Adresses).
|
* pose la FK `qualimatCarrier` (IRI) et copie l'adresse (pour l'onglet Adresses).
|
||||||
* Si le transporteur existe déjà (post-POST, cas nominal de l'onglet), persiste
|
* Si le transporteur existe déjà (post-POST, cas nominal de l'onglet), persiste
|
||||||
* la copie via un PATCH partiel `carrier:write:main`. La copie locale a lieu
|
* d'abord la copie via un PATCH partiel `carrier:write:main` : la copie locale
|
||||||
* dans tous les cas. Retourne true si l'intégration a abouti.
|
* (nom, certification figée « QUALIMAT », FK, adresse) n'est appliquée qu'en cas
|
||||||
|
* de succès, pour ne pas laisser l'UI dans un état QUALIMAT non sauvegardé si le
|
||||||
|
* PATCH échoue. Retourne true si l'intégration a abouti.
|
||||||
*/
|
*/
|
||||||
async function applyQualimatSelection(row: QualimatCarrierRow): Promise<boolean> {
|
async function applyQualimatSelection(row: QualimatCarrierRow): Promise<boolean> {
|
||||||
|
// Transporteur déjà créé : on persiste avant de refléter localement.
|
||||||
|
if (carrierId.value !== null) {
|
||||||
|
try {
|
||||||
|
await patchCarrier({
|
||||||
|
qualimatCarrier: row['@id'],
|
||||||
|
name: row.name,
|
||||||
|
certificationType: 'QUALIMAT',
|
||||||
|
})
|
||||||
|
}
|
||||||
|
catch (error) {
|
||||||
|
mainErrors.handleApiError(error, { fallbackMessage: t('transport.carriers.toast.error') })
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
main.name = row.name ?? ''
|
main.name = row.name ?? ''
|
||||||
main.certificationType = 'QUALIMAT'
|
main.certificationType = 'QUALIMAT'
|
||||||
main.qualimatCarrierIri = row['@id']
|
main.qualimatCarrierIri = row['@id']
|
||||||
@@ -273,23 +290,7 @@ export function useCarrierForm() {
|
|||||||
city: row.city ?? '',
|
city: row.city ?? '',
|
||||||
street: row.address ?? '',
|
street: row.address ?? '',
|
||||||
}
|
}
|
||||||
|
return true
|
||||||
if (carrierId.value === null) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
await patchCarrier({
|
|
||||||
qualimatCarrier: row['@id'],
|
|
||||||
name: row.name,
|
|
||||||
certificationType: 'QUALIMAT',
|
|
||||||
})
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
catch (error) {
|
|
||||||
mainErrors.handleApiError(error, { fallbackMessage: t('transport.carriers.toast.error') })
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user