randomayzer/tests/ui-error-parser.test.ts

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('Пользовательский фоллбэк');
});
});