diff --git a/frontend/src/utils/http/resolveAxiosErrorMessage.spec.ts b/frontend/src/utils/http/resolveAxiosErrorMessage.spec.ts deleted file mode 100644 index fe88b06..0000000 --- a/frontend/src/utils/http/resolveAxiosErrorMessage.spec.ts +++ /dev/null @@ -1,82 +0,0 @@ -import { AxiosError, type InternalAxiosRequestConfig } from 'axios'; -import { describe, expect, it } from 'vitest'; -import { resolveAxiosErrorMessage } from '@/utils/http/resolveAxiosErrorMessage'; - -const fallback = 'Upload failed'; - -const axiosErrorWithResponse = (data: unknown, message = 'Request failed'): AxiosError => { - return new AxiosError( - message, - AxiosError.ERR_BAD_REQUEST, - {} as InternalAxiosRequestConfig, - {}, - { - status: 400, - statusText: 'Bad Request', - headers: {}, - config: {} as InternalAxiosRequestConfig, - data - } - ); -}; - -describe('resolveAxiosErrorMessage', () => { - it('falls back for non-Axios errors', () => { - expect(resolveAxiosErrorMessage(new Error('network'), fallback)).toBe('network'); - expect(resolveAxiosErrorMessage('oops', fallback)).toBe(fallback); - }); - - it('falls back when Axios error has no response', () => { - const error = new AxiosError('timeout', AxiosError.ETIMEDOUT); - - expect(resolveAxiosErrorMessage(error, fallback)).toBe('timeout'); - }); - - it('uses string response data', () => { - const error = axiosErrorWithResponse('Rate limit exceeded'); - - expect(resolveAxiosErrorMessage(error, fallback)).toBe('Rate limit exceeded'); - }); - - it('uses object message string (Nest-style)', () => { - const error = axiosErrorWithResponse({ message: 'Invalid ciphertext' }); - - expect(resolveAxiosErrorMessage(error, fallback)).toBe('Invalid ciphertext'); - }); - - it('uses a single string from message array', () => { - const error = axiosErrorWithResponse({ message: ['iv must be valid base64'] }); - - expect(resolveAxiosErrorMessage(error, fallback)).toBe('iv must be valid base64'); - }); - - it('joins multiple strings in message array', () => { - const error = axiosErrorWithResponse({ - message: ['expiresAt must be a date', 'maxViews must be a number'] - }); - - expect(resolveAxiosErrorMessage(error, fallback)).toBe( - 'expiresAt must be a date, maxViews must be a number' - ); - }); - - it('ignores non-string entries in message array', () => { - const error = axiosErrorWithResponse({ - message: ['valid', 42, null, 'also valid'] - }); - - expect(resolveAxiosErrorMessage(error, fallback)).toBe('valid, also valid'); - }); - - it('falls back when response data has no usable message', () => { - const error = axiosErrorWithResponse({ message: [] }, 'HTTP 400'); - - expect(resolveAxiosErrorMessage(error, fallback)).toBe('HTTP 400'); - }); - - it('falls back when response data is an object without message', () => { - const error = axiosErrorWithResponse({ statusCode: 400 }, 'HTTP 400'); - - expect(resolveAxiosErrorMessage(error, fallback)).toBe('HTTP 400'); - }); -}); diff --git a/frontend/src/utils/http/resolveAxiosErrorMessage.ts b/frontend/src/utils/http/resolveAxiosErrorMessage.ts deleted file mode 100644 index d7e35d2..0000000 --- a/frontend/src/utils/http/resolveAxiosErrorMessage.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { isAxiosError } from 'axios'; -import { resolveErrorMessage } from '@/utils/resolveErrorMessage'; - -const getAxiosErrorResponseMessage = (data: unknown): string | null => { - if (typeof data === 'string') { - return data; - } - - if (typeof data !== 'object' || data === null || !('message' in data)) { - return null; - } - - const { message } = data; - - if (typeof message === 'string') { - return message; - } - - if (Array.isArray(message)) { - const texts = message.filter((item): item is string => typeof item === 'string'); - - if (texts.length === 1) { - return texts[0]; - } - - if (texts.length > 1) { - return texts.join(', '); - } - } - - return null; -}; - -export const resolveAxiosErrorMessage = (error: unknown, fallback: string): string => { - if (!isAxiosError(error) || !error.response) { - return resolveErrorMessage(error, fallback); - } - - return getAxiosErrorResponseMessage(error.response.data) ?? resolveErrorMessage(error, fallback); -};