fix(transport) : bloc prix par défaut (CLIENT), sens seul en ligne 1, payload omet scalaires vides (422 inline au lieu de 400) (ERP-169)

This commit is contained in:
2026-06-17 10:24:32 +02:00
parent a26bb09ee1
commit 6ff5b13ce2
5 changed files with 63 additions and 46 deletions
@@ -761,6 +761,8 @@ describe('carrierPrice (util) — bascule CLIENT/FOURNISSEUR + champs requis par
it('isCarrierPriceValid : faux si branche incomplète, vrai si branche complète + communs', () => {
const base = { ...emptyCarrierPrice(), containerType: 'BENNE', pricingUnit: 'FORFAIT', price: '10', priceState: 'EN_COURS' }
// Direction non choisie → invalide.
expect(isCarrierPriceValid({ ...base, direction: null })).toBe(false)
// Sens CLIENT par défaut mais branche incomplète → invalide.
expect(isCarrierPriceValid(base)).toBe(false)
// CLIENT sans adresse/site → invalide.
expect(isCarrierPriceValid({ ...base, direction: 'CLIENT', clientIri: CLIENT })).toBe(false)
@@ -786,17 +788,28 @@ describe('useCarrierForm — onglet Prix (ERP-169)', () => {
return form
}
it('démarre vide ; « + Nouveau prix » autorisé sur liste vide, bloqué si dernier bloc incomplet', () => {
it('démarre avec un bloc CLIENT par défaut ; « + Nouveau prix » bloqué tant qu\'il est incomplet', () => {
const form = createdForm()
expect(form.prices.value).toHaveLength(0)
expect(form.canAddPrice.value).toBe(true)
form.addPrice()
// Un bloc présent d'office, sens CLIENT pré-sélectionné.
expect(form.prices.value).toHaveLength(1)
// Bloc vide → on ne peut pas en ajouter un autre.
expect(form.prices.value[0]?.direction).toBe('CLIENT')
// Bloc incomplet → on ne peut pas en ajouter un autre.
expect(form.canAddPrice.value).toBe(false)
form.addPrice()
expect(form.prices.value).toHaveLength(1)
// Une fois le bloc complété, l'ajout est autorisé.
const p = form.prices.value[0]
if (p) {
p.clientIri = '/api/clients/3'
p.clientDeliveryAddressIri = '/api/client_addresses/8'
p.departureSiteIri = '/api/sites/1'
p.price = '120'
p.priceState = 'EN_COURS'
}
expect(form.canAddPrice.value).toBe(true)
form.addPrice()
expect(form.prices.value).toHaveLength(2)
})
it('submitPrices : POST des nouveaux prix (branche CLIENT), capture l\'id, finalise', async () => {
@@ -469,8 +469,9 @@ export function useCarrierForm() {
}
// ── Onglet Prix (ERP-169) ─────────────────────────────────────────────────
// Démarre VIDE : aucun bloc auto, l'utilisateur ajoute via « + Nouveau prix ».
const prices = ref<CarrierPriceFormDraft[]>([])
// Un bloc présent par défaut (sens CLIENT pré-sélectionné). L'utilisateur ajoute
// les suivants via « + Nouveau prix ».
const prices = ref<CarrierPriceFormDraft[]>([emptyCarrierPrice()])
// Erreurs 422 par ligne (alignées sur l'index du v-for), peuplées par submitRows.
const priceErrors = ref<Record<string, string>[]>([])