Remove unused resolveAxiosErrorMessage helper.
Upload UI uses predefined queue messages only; surfacing API response text is out of scope for this PR.
This commit is contained in:
@@ -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');
|
||||
});
|
||||
});
|
||||
@@ -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);
|
||||
};
|
||||
Reference in New Issue
Block a user