56 lines
1.9 KiB
TypeScript
56 lines
1.9 KiB
TypeScript
import { beforeEach, describe, expect, it, vi } from 'vitest'
|
|
|
|
/**
|
|
* Tests de la saisie assistée QUALIMAT (M4 Transport, ERP-166 — RG-4.01).
|
|
*
|
|
* `useQualimatSearch` interroge `GET /api/qualimat_carriers?search=`. On vérifie le
|
|
* CONTRAT (pas le timing du debounce, couvert par `debounce.test.ts`) via `fetchNow` :
|
|
* - ressource ciblée + paramètre `search` (trimé) + header `Accept: application/ld+json` ;
|
|
* - consommation de l'enveloppe Hydra (`member`) ;
|
|
* - échec réseau → résultats vidés, pas de throw (recherche non bloquante).
|
|
*/
|
|
|
|
const mockGet = vi.hoisted(() => vi.fn())
|
|
vi.stubGlobal('useApi', () => ({
|
|
get: mockGet,
|
|
post: vi.fn(),
|
|
put: vi.fn(),
|
|
patch: vi.fn(),
|
|
delete: vi.fn(),
|
|
}))
|
|
|
|
const { useQualimatSearch } = await import('../useQualimatSearch')
|
|
|
|
describe('useQualimatSearch', () => {
|
|
beforeEach(() => {
|
|
mockGet.mockReset()
|
|
})
|
|
|
|
it('fetchNow cible /qualimat_carriers (search trimé, ld+json) et consomme member', async () => {
|
|
mockGet.mockResolvedValueOnce({
|
|
member: [{ '@id': '/api/qualimat_carriers/1', id: '1', name: 'ACME', validityDate: '2027-01-01' }],
|
|
})
|
|
const q = useQualimatSearch()
|
|
|
|
await q.fetchNow(' acme ')
|
|
|
|
expect(mockGet).toHaveBeenCalledWith(
|
|
'/qualimat_carriers',
|
|
{ search: 'acme' },
|
|
{ headers: { Accept: 'application/ld+json' }, toast: false },
|
|
)
|
|
expect(q.results.value).toHaveLength(1)
|
|
expect(q.results.value[0]?.name).toBe('ACME')
|
|
expect(q.loading.value).toBe(false)
|
|
})
|
|
|
|
it('échec réseau : résultats vidés, pas de throw', async () => {
|
|
mockGet.mockRejectedValueOnce(new Error('network'))
|
|
const q = useQualimatSearch()
|
|
|
|
await expect(q.fetchNow('x')).resolves.toBeUndefined()
|
|
expect(q.results.value).toEqual([])
|
|
expect(q.loading.value).toBe(false)
|
|
})
|
|
})
|