Files
portal/app/tests/Frontend/humanizeCreativeErrors.spec.ts
T
Дмитрий dc654167e5 feat(реклама яндекс): живые проверки и человечные ошибки в форме объявления
Подключил порт-модули лимитов (creativeLimits/urlRule/imageRule/imageMeta)
к CreativeForm.vue: живые счётчики и ошибки длин заголовка/второго
заголовка/текста, живая проверка ссылки, проверка картинки до отправки
(imageError через readImageMeta+checkImage). Текст объявления стал
обязательным (звёздочка в лейбле + блок сабмита пустого текста).

Добавил humanizeCreativeErrors.ts (TDD, тест до кода) — заменяет
технические имена полей (title/title2/text/href/image) в сообщениях 422
от сервера на русские подписи; подключил в CreativeForm через
humanFieldErrors. Баг двоения v-file-input не трогал — отдельная задача.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-25 20:42:19 +03:00

47 lines
2.8 KiB
TypeScript

import { describe, it, expect } from 'vitest';
import { humanizeMessage } from '../../resources/js/lib/advertising/humanizeCreativeErrors';
/**
* humanizeMessage — заменяет технические имена полей (title/title2/text/href/image)
* в сообщениях 422 от сервера (B1 CreativeValidator) на русские подписи полей формы.
*/
describe('humanizeCreativeErrors — humanizeMessage', () => {
it('заменяет "в поле title" на "в поле «Заголовок»"', () => {
const result = humanizeMessage('Количество символов в поле title не может превышать 56.');
expect(result).not.toMatch(/\btitle\b/);
expect(result).toContain('«Заголовок»');
expect(result).toBe('Количество символов в поле «Заголовок» не может превышать 56.');
});
it('заменяет "Поле text" на "Поле «Текст объявления»"', () => {
const result = humanizeMessage('Поле text обязательно для заполнения.');
expect(result).not.toMatch(/\btext\b/);
expect(result).toContain('«Текст объявления»');
expect(result).toBe('Поле «Текст объявления» обязательно для заполнения.');
});
it('заменяет "Поле href" на "Поле «Ссылка на сайт»"', () => {
const result = humanizeMessage('Поле href должно содержать корректный URL.');
expect(result).not.toMatch(/\bhref\b/);
expect(result).toContain('«Ссылка на сайт»');
expect(result).toBe('Поле «Ссылка на сайт» должно содержать корректный URL.');
});
it('заменяет "в поле title2" на "в поле «Второй заголовок»"', () => {
const result = humanizeMessage('Значение в поле title2 некорректно.');
expect(result).not.toMatch(/\btitle2\b/);
expect(result).toContain('«Второй заголовок»');
});
it('заменяет "Поле image" на "Поле «Картинка»"', () => {
const result = humanizeMessage('Поле image обязательно для заполнения.');
expect(result).not.toMatch(/\bimage\b/);
expect(result).toContain('«Картинка»');
});
it('не трогает сообщение без известного технического имени поля', () => {
const result = humanizeMessage('Внутренняя ошибка сервера.');
expect(result).toBe('Внутренняя ошибка сервера.');
});
});