test: add download mime, quality verification

This commit is contained in:
2026-09-26 03:33:09 +05:00
parent 746d6a6c8f
commit 712fd3cb2e
10 changed files with 181 additions and 33 deletions
+4 -4
View File
@@ -51,17 +51,17 @@
только если темы нет в существующем документе; иначе обновляется источник
истины.
## Текущий baseline Q6b
## Текущий baseline Q6c
На момент фиксации Q6b:
На момент фиксации Q6c:
- production registry содержит 122 инструмента;
- `pnpm --dir web check` проходит без ошибок и предупреждений;
- `pnpm --dir web test` — 42 test files / 449 tests;
- `pnpm --dir web test` — 42 test files / 455 tests;
- `pnpm --dir web test:rules` — 4 test files / 74 tests;
- `pnpm --dir web lint:all` — 0 errors и 0 i18n warnings; остаются 4 unused
design tokens от token audit;
- `pnpm verify` проходит; production E2E — 110 passed, 0 skipped.
- `pnpm verify` проходит; production E2E — 112 passed, 0 skipped.
Baseline и следующий шаг поддерживаются в `docs/plan-codebase-quality.md`.
+3 -1
View File
@@ -154,7 +154,9 @@ Q5 закрывает известные preview-проблемы; активн
механическая часть реализована в preview — `ToolEntry.output`
(`OutputFormat`: mime/ext/qualityParamId) в `web/src/lib/registry/types.ts`;
`SchemaToolView.download()` кодирует по `output` (jpg/webp/bmp уже настроены;
`png-to-bmp` переведён сюда же). **Осталось (UX-райз «Download»):**
`png-to-bmp` переведён сюда же). Q6c покрывает этот фиксированный контракт
unit/E2E-проверками; переключатель форматов и quality остаётся отдельным
UX-райзом. **Осталось (UX-райз «Download»):**
- выбор формата/качества прямо в кнопке/диалоге Download для любого
результата (не отдельными конвертерами);
- экспорт с лимитом размера → закрывает отложенный `reduce-to-size-png`
+5 -3
View File
@@ -95,10 +95,10 @@
корректный (не «кракозябры»).
- [ ] remove-background на сложной полупрозрачности — края не «звенят».
## G. Закрытые Q5/Q6b-проблемы
## G. Закрытые Q5/Q6b/Q6c-проблемы
> Q5/Q6b-проблемы закрыты автоматическими тестами; для ручной проверки остаются
> субъективные сценарии разделов A–F.
> Q5/Q6b/Q6c-проблемы закрыты автоматическими тестами; для ручной проверки
> остаются субъективные сценарии разделов A–F.
- [x] **Генераторы:** auto-run по дефолтам, результат и изменение параметра без
кнопки Generate. `web/e2e/generators.spec.ts`.
@@ -112,6 +112,8 @@
`split-into-parts-png.zip` с именованными PNG-частями; содержимое и
сигнатуры проверяются `web/src/lib/zip.test.ts` и
`web/e2e/pipeline.spec.ts`.
- [x] **Output MIME/quality:** JPG/WebP/BMP имеют ожидаемые расширения и
сигнатуры, quality 10/90 меняет размер файла; `web/e2e/pipeline.spec.ts`.
## Как долго
+17 -4
View File
@@ -1,9 +1,9 @@
# План: линтеры, тесты и качество кодовой базы
> Статус: **draft — Q0–Q5, Q6a и Q6b готовы к ревью; Q6c — следующий этап**.
> Статус: **draft — Q0–Q5 и Q6a–Q6c готовы к ревью; Q6d — следующий этап**.
>
> Источник: `docs/backlog.md`, аудит конфигурации `web/`, e2e-тестов и
> инфраструктурных скриптов. Q0–Q5, Q6a и Q6b выполнены; Q6c–Q8 выполняются
> инфраструктурных скриптов. Q0–Q5 и Q6a–Q6c выполнены; Q6d–Q8 выполняются
> отдельными атомарными шагами.
>
> Цель: сделать качество кодовой базы воспроизводимым, убрать ложную «зелёность»
@@ -229,9 +229,22 @@ seam, unit round-trip для `FileResult`, защиту пустого резу
- E2E использует `downloadResultFile` и `unzipSync`, не добавляя новые
`data-testid`; files-инструменты не проходят через image-smoke.
#### Q6c–Q6f. Оставшиеся направления
#### Q6c. Output MIME/quality
**Статус:** выполнен. Q6c покрывает текущий фиксированный output-контракт
JPG/WebP/BMP, не превращаясь в UX-райз кнопки Download. Registry проверяет
согласованность MIME/extension/quality-поля, unit — границы quality, browser —
реальные сигнатуры файлов и разницу размера при изменении quality.
- `ToolEntry.output` остаётся декларативным описанием формата; новый селектор
форматов не добавляется.
- `validateOutputQuality` отделяет проверку 0..1 от DOM-рендеринга; JPEG/WebP
используют quality `1..100` из schema, BMP не имеет quality-параметра.
- E2E проверяет JPEG `FF D8 FF`, WebP `RIFF/WEBP`, BMP `BM` и PNG-фолбэк.
- Ошибки кодирования и unsupported MIME используют существующие i18n-ключи.
#### Q6d–Q6f. Оставшиеся направления
- output MIME/quality;
- malformed и special PNG fixtures: CRC, truncated, palette, 16-bit;
- smoke всех типов инструментов из registry;
- component-тесты `SchemaToolView`, `SchemaPreview` и schema fields;
+4 -4
View File
@@ -61,10 +61,10 @@ CSS-классы и конкретный формат временного URL
`web/e2e/helpers/page.ts` владеет общими операциями `openTool`, `uploadImage`,
`resultImage`, `sourceImage`, `verdictStatus`, `textResult`, `errorAlert`,
`emptyState`, `rangeInput`, `downloadResult` и `downloadResultFile`. Специфика
должна вызывать эти helpers, а не повторять raw-селекторы. Инструменты с
`result: "files"` проверяются отдельным ZIP-сценарием: общий image-smoke не
применяется к ним.
`emptyState`, `rangeInput`, `downloadResult`, `downloadResultFile` и
`downloadResultBytes`. Специфика должна вызывать эти helpers, а не повторять
raw-селекторы. Инструменты с `result: "files"` проверяются отдельным
ZIP-сценарием: общий image-smoke не применяется к ним.
`test.fixme` допускается только для зарегистрированной проблемы в backlog или
checklist. В комментарии указывается ссылка на неё. После исправления тест и