df83fa836c
Шаг 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>
41 lines
2.0 KiB
TypeScript
41 lines
2.0 KiB
TypeScript
import { describe, it, expect, vi } from 'vitest';
|
|
import { useOverlayDismiss } from '../../resources/js/composables/useOverlayDismiss';
|
|
|
|
// Метод читает только e.target и e.currentTarget — моделируем событие вручную.
|
|
function ev(target: unknown, currentTarget: unknown): MouseEvent {
|
|
return { target, currentTarget } as unknown as MouseEvent;
|
|
}
|
|
|
|
describe('useOverlayDismiss — не закрывать при выделении текста', () => {
|
|
it('mousedown И mouseup на подложке → закрываем', () => {
|
|
const { onOverlayMousedown, onOverlayMouseup } = useOverlayDismiss();
|
|
const close = vi.fn();
|
|
const ovl = {};
|
|
onOverlayMousedown(ev(ovl, ovl));
|
|
onOverlayMouseup(ev(ovl, ovl), close);
|
|
expect(close).toHaveBeenCalledTimes(1);
|
|
});
|
|
|
|
it('mousedown внутри окна, mouseup на подложке (выделение текста) → НЕ закрываем', () => {
|
|
const { onOverlayMousedown, onOverlayMouseup } = useOverlayDismiss();
|
|
const close = vi.fn();
|
|
const ovl = {};
|
|
const child = {};
|
|
onOverlayMousedown(ev(child, ovl)); // target ≠ currentTarget — жмём внутри окна
|
|
onOverlayMouseup(ev(ovl, ovl), close); // отпустили на подложке
|
|
expect(close).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it('после НЕ-self mousedown следующий self-mouseup не закрывает (флаг сброшен)', () => {
|
|
const { onOverlayMousedown, onOverlayMouseup } = useOverlayDismiss();
|
|
const close = vi.fn();
|
|
const ovl = {};
|
|
const child = {};
|
|
onOverlayMousedown(ev(child, ovl));
|
|
onOverlayMouseup(ev(ovl, ovl), close);
|
|
// второй mouseup на подложке без свежего mousedown — тоже не должен закрыть
|
|
onOverlayMouseup(ev(ovl, ovl), close);
|
|
expect(close).not.toHaveBeenCalled();
|
|
});
|
|
});
|