mirror of
https://github.com/Ku6epXBOCTuK/easy-png-tools.git
synced 2026-09-14 13:36:36 +00:00
test: add e2e test, add manual test checklist
This commit is contained in:
@@ -1,8 +1,11 @@
|
||||
# План: тестирование preview перед промоушеном в главную
|
||||
|
||||
> Статус: план тестирования ветки preview (`web/src/routes/preview/**`,
|
||||
> регистр `lib/registry-new/`, 121 инструмент) перед шагом C17 из
|
||||
> `docs/plan-redesign.md` (переезд preview → реальные маршруты).
|
||||
> Статус: **реализация завершена**. Playwright-набор в `web/e2e/`
|
||||
> (108 тестов: 104 прошли, 4 `test.fixme` — известные баги №1–4 ниже),
|
||||
> ручной чек-лист — `docs/checklist-manual-testing.md`. План ветки preview
|
||||
> (`web/src/routes/preview/**`, регистр `lib/registry-new/`, 121 инструмент)
|
||||
> перед шагом C17 из `docs/plan-redesign.md` (переезд preview → реальные
|
||||
> маршруты).
|
||||
>
|
||||
> Охват: **документация плана** — реализация тестов (Playwright-раннер,
|
||||
> сами тесты) делается отдельными задачами после ревью этого документа.
|
||||
@@ -13,6 +16,7 @@
|
||||
> Команды для проверки в процессе:
|
||||
>
|
||||
> - `pnpm --dir web test` — существующий Vitest (42 файла, 121 инструмент частично покрыт юнит-тестами).
|
||||
> - `pnpm --dir web test:e2e` — Playwright (`web/e2e/`), сборка + `scripts/serve-static.mjs` на 4173.
|
||||
> - `pnpm --dir web exec svelte-check --tsconfig ./tsconfig.json` — проверка типов.
|
||||
> - `pnpm --dir web lint:all` — ESLint + stylelint + токен-аудит.
|
||||
> - `pnpm --dir web build` — статическая сборка (adapter-static).
|
||||
@@ -158,10 +162,30 @@ GEOMETRY / FILTERS / TEXT / ANALYZE / GENERATE. Режимы инструмен
|
||||
|
||||
## 6. Шаги реализации (после ревью)
|
||||
|
||||
1. Playwright-раннер: `web/playwright.config.ts` (webServer на `pnpm build +
|
||||
preview`, baseURL), папка `web/e2e/`, npm-скрипт `test:e2e`.
|
||||
2. Фикстуры PNG: с альфой, без альфы, 1×1, большой, повреждённый.
|
||||
3. Написать e2e по блокам A–D и секции 3 (авто-часть).
|
||||
4. Ручной чек-лист из секции 3 (ручная часть) — отдельный прогон.
|
||||
5. Найденные баги — отдельными атомарными задачами; исправления по конвенции
|
||||
AGENTS.md (lint:all после правок).
|
||||
1. ✅ Playwright-раннер: `web/playwright.config.ts` (webServer на `pnpm build +
|
||||
`scripts/serve-static.mjs` `--port 4173`), папка `web/e2e/`, npm-скрипт
|
||||
`test:e2e`.
|
||||
2. ✅ Фикстуры PNG (генерируются в рантайме, `web/e2e/helpers/fixtures.ts`):
|
||||
с альфой, без альфы, 1×1, большой, повреждённый, ландшафт.
|
||||
3. ✅ E2E по блокам A–D и секции 3 (авто-часть): `navigation.spec.ts`,
|
||||
`catalog.spec.ts`, `pipeline.spec.ts`, `text-and-verdicts.spec.ts`,
|
||||
`tools-smoke.spec.ts` (матрица ~71 инструмента), `generators.spec.ts`,
|
||||
`known-issues.spec.ts` (fixme).
|
||||
4. ✅ Ручной чек-лист из секции 3 (ручная часть) —
|
||||
`docs/checklist-manual-testing.md` (разделы A–G, включая известные баги).
|
||||
5. ✅ Найденные баги (зафиксированы как `test.fixme` + чек-лист §G):
|
||||
1. генераторы (21/121) не имеют кнопки «Generate» и полей схемы —
|
||||
результат через UI недостижим;
|
||||
2. `resize-png` с дефолтом 0×0 → `errors.resizeSize` при любом входе;
|
||||
3. `crop-png` с дефолтом 0×0 → `errors.cropSize` при любом входе;
|
||||
4. ключи ошибок показываются сырыми (`errors.*`) вместо переведённого
|
||||
текста из `en.ts`/`ru.ts`.
|
||||
Исправления — отдельными атомарными задачами по конвенции AGENTS.md
|
||||
(после правок: `lint:all`, `test:e2e`).
|
||||
|
||||
## 7. Итоговое состояние на момент сдачи
|
||||
|
||||
- `pnpm --dir web test:e2e` — **104 passed, 4 skipped (fixme), 0 failed**.
|
||||
- `pnpm --dir web lint:all` и `svelte-check` — зелёные.
|
||||
- Визуальный слой, краевые PNG/параметры, кросс-браузеры — остаются на ручной
|
||||
прогон по `docs/checklist-manual-testing.md`.
|
||||
@@ -1,5 +1,32 @@
|
||||
# Backlog
|
||||
|
||||
## Баги preview
|
||||
|
||||
Зарегистрированы при написании e2e (`web/e2e/`, `pnpm --dir web test:e2e`) и
|
||||
ручного чек-листа — см. `docs/checklist-manual-testing.md` (раздел G). Каждый
|
||||
зафиксирован как `test.fixme`. После фикса бага: убрать соответствующий
|
||||
`test.fixme` и отметить пункт G в чек-листе как пройденный.
|
||||
|
||||
1. **Генераторы без кнопки «Generate»** — все 21 инструмент категории GENERATE
|
||||
открываются, но в UI нет кнопки Generate и полей схемы (только RU/EN/Reset);
|
||||
результат через UI недостижим. В `SchemaToolView.svelte` `isGenerator`
|
||||
определяется как `tool.generate && !tool.run`, кнопка рисуется только если
|
||||
`ongenerate` прокинут, а для генераторов с дефолтным `input: "file"` — нет.
|
||||
Ожидание: поля схемы + кнопка «Generate», результат-картинка по дефолтам.
|
||||
Fixme: `web/e2e/generators.spec.ts`.
|
||||
2. **resize-png с дефолтами падает** — схема по умолчанию `size: 0×0` +
|
||||
`keepAspect: true` → при загрузке ЛЮБОГО PNG сразу `errors.resizeSize` (alert),
|
||||
результата нет. `registry-new/geometry.ts`. Ожидание: осмысленный дефолт-размер
|
||||
(например, исходный) либо кнопка, а не авто-ошибка.
|
||||
3. **crop-png с дефолтами падает** — аналогично: `width: 0, height: 0` → сразу
|
||||
`errors.cropSize`. `registry-new/geometry.ts`. Ожидание: базовый кроп по
|
||||
умолчанию либо внятное предзаполнение.
|
||||
4. **Сырые ключи ошибок в UI** — alert на tool-странице показывает сырой ключ
|
||||
i18n (`errors.resizeSize`), а не сообщение из `en.ts` / `ru.ts` (там
|
||||
`resizeSize: "Width and/or height must be positive"`). Проверяется на
|
||||
resize-png / crop-png. Ожидание: человекочитаемое сообщение на текущем языке.
|
||||
Fixme: `web/e2e/known-issues.spec.ts` (тест «error message localized»).
|
||||
|
||||
## Идеи
|
||||
|
||||
1. **Менять первый инструмент цепочки** — оценка M.
|
||||
|
||||
@@ -0,0 +1,76 @@
|
||||
# Чек-лист ручного тестирования preview
|
||||
|
||||
> Вспомогательный документ к `docs/archive/plan-testing-preview.md` и e2e-тестам
|
||||
> (`web/e2e/`, `pnpm --dir web test:e2e`). Автоматизированная часть закрывает
|
||||
> «нет падений/ошибок»; здесь — то, что руками, и что Playwright не покрывает.
|
||||
>
|
||||
> Перед прогоном: `pnpm --dir web build`, поднять локально `web/` (dev или
|
||||
> build → `node scripts/serve-static.mjs`).
|
||||
>
|
||||
> Критерий приёмки большинства пунктов: **нет зависит, нет «залипания»,
|
||||
> сообщения об ошибках человекочитаемые**.
|
||||
|
||||
## A. Краевые PNG-файлы
|
||||
|
||||
- [ ] Огромное изображение (мегапиксели) — загрузка не висит, прогресс есть.
|
||||
- [ ] PNG 1×1 — инструменты не падают (проверено авто: flip-png, см. suite).
|
||||
- [ ] PNG с полупрозрачностью/чётким альфа-краёв (чёрно-белая шахматка) —
|
||||
remove-background, feather-edges, clean-edges дают корректные края.
|
||||
- [ ] Палитровый PNG (индексированные цвета) — конвертируется/анализируется.
|
||||
- [ ] Анимированный/APNG, если попадётся — не ломает конвейер.
|
||||
- [ ] Повреждённый/не-PNG файл — понятная ошибка, нет краша (авто-чека в
|
||||
pipeline.spec.ts).
|
||||
- [ ] PNG с битой CRCh / 16-bit — как ведут себя анализаторы (ориентация,
|
||||
размер, прозрачность).
|
||||
|
||||
## B. Края параметров
|
||||
|
||||
- [ ] Экстремальные значения слайдеров (0 и max) в blur/sharpen/pixelate —
|
||||
не «залипает» running.
|
||||
- [ ] Пустые/NaN поля (напр. width/height) — санитизация (silent repair), нет
|
||||
красного alert-текста в виде `errors.*`.
|
||||
- [ ] Невалидные цвета в плашках/градиентах (мисс-спелл `#xyz`, короткие hex,
|
||||
именные цвета) — silent repair или понятная ошибка.
|
||||
- [ ] Пустой text-source на text-инструменте — run пропускается, ошибок нет
|
||||
(кейс из плана п.14).
|
||||
- [ ] Смена параметра после Reset — авто-перезапуск работает (Debounce 200 мс).
|
||||
|
||||
## C. Буфер обмена и drag-n-drop
|
||||
|
||||
- [ ] В реальном браузере кнопка copy на текстовом результате (png-to-base64
|
||||
и т.п.) кладёт текст в буфер (в Playwright не тестируем из-за permissions).
|
||||
- [ ] Drag-n-drop файла на dropzone страницы инструмента (не только
|
||||
файл-диалог) — UX-ощущения и корректность.
|
||||
|
||||
## D. Производительность и отзывчивость
|
||||
|
||||
- [ ] Долгие авто-рераны на больших картинках (jpeg-artifacts, dithering,
|
||||
quantize на 4К) — UI не фризит, канселяция/дебаунс срабатывает.
|
||||
- [ ] Скролл страницы при длинных настройках (например, text-инструменты) —
|
||||
нет залипаний, панели не прыгают.
|
||||
- [ ] Вкладка не «съедает» память при 10+ повторах blur/sharpen на мегапикселе
|
||||
(утечек blob-URL/bitmap быть не должно).
|
||||
|
||||
## E. Визуальный слой (доделываем по ходу)
|
||||
|
||||
- [ ] Сетки/выравнивание на брейкпоинтах 640 / 800 / 1100 (mobile/tablet/
|
||||
desktop) на всех 4 маршрутах.
|
||||
- [ ] Тема light/dark: контраст вердиктов (Yes/No), статус «LIVE PREVIEW»,
|
||||
мета-инфо бликов не даёт.
|
||||
- [ ] Иконки в каталоге на всех категориях — не «бьются» (missing icon).
|
||||
- [ ] Язык RU/EN на превью-страницах — переключение без регресса рендера.
|
||||
|
||||
## F. Субъективная корректность
|
||||
|
||||
- [ ] dithering / two-colors / quantize — результат «по ощущениям» соответствует
|
||||
описанию.
|
||||
- [ ] watermark-tile / add-text / date-stamp на кириллице — рендер текста
|
||||
корректный (не «кракозябры»).
|
||||
- [ ] remove-background на сложной полупрозрачности — края не «звенят».
|
||||
|
||||
## Как долго
|
||||
|
||||
- Полный прогон: ~40 минут (все разделы, включая мегапиксели и 4К) в двух
|
||||
браузерах.
|
||||
- Быстрый смоук (< 15 мин): A (кроме мегапикселей), B (выборочно), C, F
|
||||
выборочно, G обязательно.
|
||||
Reference in New Issue
Block a user