61 lines
2.5 KiB
TypeScript
61 lines
2.5 KiB
TypeScript
import { describe, it, expect } from 'vitest';
|
|
import { extractApiErrorMessage } from '../src/lib/api-error-parser';
|
|
|
|
describe('Task 10: extractApiErrorMessage helper', () => {
|
|
it('extracts message from structured error payload { error: { message, code } }', () => {
|
|
const payload = {
|
|
success: false,
|
|
error: {
|
|
code: 'CONFLICT',
|
|
message: 'Розыгрыш уже находится в статусе SNAPSHOT_LOCKED',
|
|
},
|
|
};
|
|
expect(extractApiErrorMessage(payload)).toBe('Розыгрыш уже находится в статусе SNAPSHOT_LOCKED');
|
|
});
|
|
|
|
it('never returns "[object Object]" when error is a structured object without message but with code', () => {
|
|
const payload = {
|
|
success: false,
|
|
error: {
|
|
code: 'UNAUTHORIZED',
|
|
},
|
|
};
|
|
const result = extractApiErrorMessage(payload);
|
|
expect(result).toBe('Ошибка: UNAUTHORIZED');
|
|
expect(result).not.toContain('[object Object]');
|
|
});
|
|
|
|
it('extracts legacy string error { error: "Custom string" }', () => {
|
|
const payload = {
|
|
success: false,
|
|
error: 'Неверный формат URL',
|
|
};
|
|
expect(extractApiErrorMessage(payload)).toBe('Неверный формат URL');
|
|
});
|
|
|
|
it('extracts message from { message: "Some message" }', () => {
|
|
const payload = {
|
|
message: 'Network timeout',
|
|
};
|
|
expect(extractApiErrorMessage(payload)).toBe('Network timeout');
|
|
});
|
|
|
|
it('extracts plain string payload', () => {
|
|
expect(extractApiErrorMessage('Bad Gateway')).toBe('Bad Gateway');
|
|
});
|
|
|
|
it('uses HTTP status code fallbacks when body has no message', () => {
|
|
expect(extractApiErrorMessage({}, 'Default', 400)).toContain('400');
|
|
expect(extractApiErrorMessage(null, 'Default', 401)).toContain('401');
|
|
expect(extractApiErrorMessage(undefined, 'Default', 403)).toContain('403');
|
|
expect(extractApiErrorMessage({}, 'Default', 404)).toContain('404');
|
|
expect(extractApiErrorMessage({}, 'Default', 409)).toContain('409');
|
|
expect(extractApiErrorMessage({}, 'Default', 429)).toContain('429');
|
|
expect(extractApiErrorMessage({}, 'Default', 500)).toContain('500');
|
|
});
|
|
|
|
it('falls back to custom fallback message when data is empty and no status code provided', () => {
|
|
expect(extractApiErrorMessage(null, 'Пользовательский фоллбэк')).toBe('Пользовательский фоллбэк');
|
|
expect(extractApiErrorMessage({}, 'Пользовательский фоллбэк')).toBe('Пользовательский фоллбэк');
|
|
});
|
|
});
|