998368f1f6
Le tableau des tickets démarre désormais à 25 items/page (au lieu de 10) via defaultItemsPerPage de usePaginatedList. 25 fait partie des options [10, 25, 50] et reste sous le max serveur (50) ; l'utilisateur peut toujours rebasculer via le sélecteur. Test de contrat du repository ajouté.
59 lines
2.2 KiB
TypeScript
59 lines
2.2 KiB
TypeScript
import { describe, it, expect, vi, beforeEach } from 'vitest'
|
|
import { useWeighingTicketsRepository, type WeighingTicket } from '../useWeighingTicketsRepository'
|
|
|
|
const mockApiGet = vi.hoisted(() => vi.fn())
|
|
vi.stubGlobal('useApi', () => ({ get: mockApiGet }))
|
|
|
|
/**
|
|
* Tests du repertoire des tickets de pesee (M5, ERP-188).
|
|
*
|
|
* `useWeighingTicketsRepository` est une fine enveloppe de
|
|
* `usePaginatedList<WeighingTicket>` sur `/weighing_tickets`. Les invariants
|
|
* generiques de pagination sont deja couverts par `usePaginatedList.test.ts` ;
|
|
* on verifie ici le CONTRAT propre au repertoire :
|
|
* - la ressource ciblee est bien `/weighing_tickets` ;
|
|
* - le header `Accept: application/ld+json` est envoye (sinon API Platform 4
|
|
* renvoie un tableau plat sans pagination) ;
|
|
* - DEFAUT 25 ITEMS/PAGE : la liste etant consultee en volume, le premier
|
|
* fetch demande 25 items (et non le defaut 10) — l'utilisateur peut toujours
|
|
* rebasculer via le selecteur.
|
|
*/
|
|
describe('useWeighingTicketsRepository', () => {
|
|
beforeEach(() => {
|
|
mockApiGet.mockReset()
|
|
})
|
|
|
|
/** Une page de tickets Hydra minimale. */
|
|
const PAGE: WeighingTicket[] = [
|
|
{
|
|
id: 1,
|
|
status: 'VALIDATED',
|
|
number: '86-TP-0001',
|
|
client: { id: 7, companyName: 'ACME' },
|
|
supplier: null,
|
|
otherLabel: null,
|
|
displayDate: '2026-06-17T09:12:00+02:00',
|
|
netWeight: 7150,
|
|
},
|
|
]
|
|
|
|
it('cible /weighing_tickets en Hydra avec 25 items/page par defaut', async () => {
|
|
mockApiGet.mockResolvedValueOnce({ member: PAGE, totalItems: 1 })
|
|
const repo = useWeighingTicketsRepository()
|
|
|
|
await repo.fetch()
|
|
|
|
expect(mockApiGet).toHaveBeenCalledTimes(1)
|
|
const [url, query, opts] = mockApiGet.mock.calls[0]
|
|
expect(url).toBe('/weighing_tickets')
|
|
expect(query).toMatchObject({ page: 1, itemsPerPage: 25 })
|
|
expect(opts).toMatchObject({
|
|
toast: false,
|
|
headers: { Accept: 'application/ld+json' },
|
|
})
|
|
expect(repo.itemsPerPage.value).toBe(25)
|
|
expect(repo.items.value).toEqual(PAGE)
|
|
expect(repo.totalItems.value).toBe(1)
|
|
})
|
|
})
|