import { describe, expect, it } from 'vitest'; import { ClientAbortedError, InsufficientStorageError, PayloadTooLargeError, ValidationError, } from '../src/errors.js'; import { normalizeStreamError } from '../src/lib/storage.js'; function withCode(code: string): Error { return Object.assign(new Error('boom'), { code }); } describe('normalizeStreamError', () => { it('conserve les AppError telles quelles', () => { const error = new ValidationError('x'); expect(normalizeStreamError(error)).toBe(error); }); it('convertit le dépassement multipart en 413', () => { expect(normalizeStreamError(withCode('FST_REQ_FILE_TOO_LARGE'))).toBeInstanceOf( PayloadTooLargeError, ); }); it.each(['ECONNRESET', 'ECONNABORTED', 'ERR_STREAM_PREMATURE_CLOSE'])( 'convertit %s (client parti) en ClientAbortedError', (code) => { expect(normalizeStreamError(withCode(code))).toBeInstanceOf(ClientAbortedError); }, ); it('convertit ENOSPC en InsufficientStorageError (507)', () => { const result = normalizeStreamError(withCode('ENOSPC')); expect(result).toBeInstanceOf(InsufficientStorageError); expect((result as InsufficientStorageError).statusCode).toBe(507); }); it('laisse passer les autres erreurs et enveloppe les valeurs non-Error', () => { const other = withCode('EACCES'); expect(normalizeStreamError(other)).toBe(other); expect(normalizeStreamError('texte')).toBeInstanceOf(Error); }); });