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` 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) }) })