Files
portal/app/tests/Frontend/autopodborErrorMessage.spec.ts
T
Дмитрий df83fa836c feat(автоподбор): Конкурентное поле — финальный проход склейки, вскрыть всё, группы дублей, телефоны, отсев рекламных номеров 2ГИС
Шаг 1 «Конкурентное поле» — чекпоинт:
- Финальный проход «Найти и объединить дубли» на поле и предложениях; клиент решает по каждой группе, ничего не склеиваем молча.
- Тихая склейка только по сайту и коду справочника; телефон и людный номер у более чем 4 фирм — на решение клиента.
- Колонка phones jsonb; телефон-дубли видны уже на «Предложениях».
- Sonar даёт только имя и тип, сайт всегда через EXA; вскрываем все карточки без гейта «есть сайт».
- Яндекс-карточки через локальный Playwright параллельно; рубрика из заголовка идёт в описание.
- Фикс рекламных номеров: 2ГИС-парсер разбирает телефоны пообъектно и выкидывает рекламные кнопки с platforms/caption чужих фирм.

Тесты: автоподбор 224/224 unit, 105/105 feature; фронт-спеки зелёные. Времянки app/scripts/diag-*/probe-* в гит не входят.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 17:34:03 +03:00

45 lines
2.0 KiB
TypeScript

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('неизвестный код → 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');
});
});