import { describe, it, expect } from 'vitest'; import { AxiosError } from 'axios'; import { autopodborErrorMessage } from '../../resources/js/api/autopodbor'; function axErr(status: number, body: unknown): AxiosError { const e = new AxiosError('err'); // @ts-expect-error — минимальный мок ответа e.response = { status, data: body, statusText: '', headers: {}, config: {} }; return e; } describe('autopodborErrorMessage — адресные сообщения по коду ответа', () => { it('balance_insufficient → про деньги/пополнение', () => { const m = autopodborErrorMessage(axErr(409, { error: 'balance_insufficient' }), 'fallback'); expect(m.toLowerCase()).toContain('баланс'); expect(m).not.toBe('fallback'); }); it('run_in_flight → «подбор уже идёт»', () => { const m = autopodborErrorMessage(axErr(409, { error: 'run_in_flight' }), 'fallback'); expect(m.toLowerCase()).toContain('уже идёт'); }); it('name_or_site_required → про название/сайт', () => { const m = autopodborErrorMessage(axErr(422, { error: 'name_or_site_required' }), 'fallback'); expect(m.toLowerCase()).toContain('назван'); }); it('requisites_required → про реквизиты компании', () => { const m = autopodborErrorMessage(axErr(422, { error: 'requisites_required' }), 'fallback'); expect(m.toLowerCase()).toContain('реквизит'); expect(m).not.toBe('fallback'); }); it('дубль источника (errors.signal_identifier) → показываем причину бэкенда, не fallback', () => { const m = autopodborErrorMessage( axErr(422, { errors: { signal_identifier: ['У вас уже есть проект с этим источником: «ДСК ✓».'] } }), 'Не удалось создать проект.', ); expect(m).toContain('уже есть проект с этим источником'); expect(m).not.toBe('Не удалось создать проект.'); }); it('бэкенд-message без кода → показываем message', () => { const m = autopodborErrorMessage(axErr(422, { message: 'Так нельзя.' }), 'fallback'); expect(m).toBe('Так нельзя.'); }); it('неизвестный код без message/errors → fallback', () => { const m = autopodborErrorMessage(axErr(500, { error: 'boom' }), 'мой fallback'); expect(m).toBe('мой fallback'); }); it('не-axios ошибка → fallback', () => { const m = autopodborErrorMessage(new Error('x'), 'мой fallback'); expect(m).toBe('мой fallback'); }); });