9e2206a7d6
En pesée manuelle, le serveur incrémentait automatiquement le DSD et ignorait la saisie de l'opérateur. Désormais l'opérateur saisit le poids ET le DSD (le numéro du pont réellement utilisé), conservés tels quels — plus d'auto-incrément. Le champ « Numéro de pesée » séparé (manualNumber) est supprimé : pour le client c'est la même chose que le DSD. Pas de contrainte d'unicité sur le DSD (doublons autorisés). Colonnes empty_manual_number/full_manual_number droppées.
62 lines
2.5 KiB
TypeScript
62 lines
2.5 KiB
TypeScript
import { describe, it, expect, vi, beforeEach } from 'vitest'
|
|
|
|
// useApi / useI18n sont des auto-imports Nuxt : on les expose en globals.
|
|
const mockPost = vi.hoisted(() => vi.fn())
|
|
vi.stubGlobal('useApi', () => ({ post: mockPost }))
|
|
vi.stubGlobal('useI18n', () => ({ t: (key: string) => key }))
|
|
|
|
const { useWeighbridge } = await import('../useWeighbridge')
|
|
|
|
describe('useWeighbridge', () => {
|
|
beforeEach(() => {
|
|
mockPost.mockReset()
|
|
})
|
|
|
|
it('AUTO : POST { mode: AUTO } sans toast et renvoie la lecture', async () => {
|
|
mockPost.mockResolvedValue({ weight: 23187, dsd: 42, mode: 'AUTO' })
|
|
const { triggerAuto } = useWeighbridge()
|
|
|
|
const reading = await triggerAuto()
|
|
|
|
expect(mockPost).toHaveBeenCalledWith(
|
|
'/weighbridge_readings',
|
|
{ mode: 'AUTO' },
|
|
expect.objectContaining({ toast: false }),
|
|
)
|
|
expect(reading).toEqual({ weight: 23187, dsd: 42, mode: 'AUTO' })
|
|
})
|
|
|
|
it('MANUAL : POST { mode: MANUAL, weight, dsd } et renvoie la lecture', async () => {
|
|
// Le DSD est saisi par l'opérateur et conservé tel quel (ERP-193).
|
|
mockPost.mockResolvedValue({ weight: 5000, dsd: 16619, mode: 'MANUAL' })
|
|
const { triggerManual } = useWeighbridge()
|
|
|
|
const reading = await triggerManual(5000, 16619)
|
|
|
|
expect(mockPost).toHaveBeenCalledWith(
|
|
'/weighbridge_readings',
|
|
{ mode: 'MANUAL', weight: 5000, dsd: 16619 },
|
|
expect.objectContaining({ toast: false }),
|
|
)
|
|
expect(reading.dsd).toBe(16619)
|
|
})
|
|
|
|
it('erreur (RG-5.06) : extractWeighbridgeError privilégie le detail du 503', () => {
|
|
const { extractWeighbridgeError } = useWeighbridge()
|
|
const error = { response: { status: 503, _data: { title: 'Pont bascule indisponible', detail: 'Passez en pesée manuelle.' } } }
|
|
expect(extractWeighbridgeError(error)).toBe('Passez en pesée manuelle.')
|
|
})
|
|
|
|
it('erreur sans payload exploitable : retombe sur le libellé i18n générique', () => {
|
|
const { extractWeighbridgeError } = useWeighbridge()
|
|
expect(extractWeighbridgeError(new Error('network')))
|
|
.toBe('logistique.weighingTickets.form.weighbridge.unavailable')
|
|
})
|
|
|
|
it('triggerAuto propage l\'erreur API (gestion par l\'écran)', async () => {
|
|
mockPost.mockRejectedValue({ response: { status: 503 } })
|
|
const { triggerAuto } = useWeighbridge()
|
|
await expect(triggerAuto()).rejects.toBeDefined()
|
|
})
|
|
})
|