/** * Tuyau type strictement chaque code de statut possible d'une route. Quand * on `assertStatus(...)` puis on lit `.body()`, TS ne narrow pas — il garde * l'union. * * Ce helper sert juste à caster `.body()` vers la forme attendue dans le * contexte du test, sans perdre la lisibilité du `.data` / `.errors`. */ export function body(response: { body(): unknown }): T { return response.body() as T } export type ApiOk = { data: T } export type ApiOkPaged = { data: T; meta: { total: number; page: number } } export type ApiError = { errors: Array<{ code: string; message: string; field?: string }> } export type ApiConflict = ApiError & { existing: T }