Files
transcriber/openspec/changes/archive/2026-08-11-fix-http-handler-tests/tasks.md
T
av 6c04c801c9 http: тесты приёма переписаны на подставные адаптеры
- проверки больше не зовут ffprobe и не меняют рабочий каталог процесса;
  добавлены случаи на отказ чтения метаданных и на отсутствие поля audio
- заведена спека intake на приём по HTTP, ADR о подставных адаптерах,
  запись в журнал ревью о проверке, которая не могла упасть
- go test снят из объявленных долгов CLAUDE.md, послабление errcheck
  для _test.go в .golangci.yml убрано
2026-08-11 08:35:11 +03:00

61 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## 1. Подстановки в сборке теста
- [x] 1.1 Завести в тестовом пакете подставной `contract.AudioMetaViewer`: отдаёт
заданную длительность либо заданную ошибку
- [x] 1.2 Завести подставной `contract.AudioFileConverter` — конвертацию эти
проверки не зовут
- [x] 1.3 `setupTestRouter` принимает каталог хранения и источник метаданных
снаружи; `ffmpegmv` и `ffmpegconv` из импортов пакета уходят
- [x] 1.4 Каталог хранения каждому случаю даёт `t.TempDir()`; `os.Chdir` в файле
не остаётся ни одного
## 2. Сборка запроса
- [x] 2.1 Вспомогательная функция собирает `multipart`-запрос из имени файла и
байтов, а не из пути на диске
- [x] 2.2 Ни один случай не создаёт файлов в текущем каталоге
## 3. Проверки приёма
- [x] 3.1 Приём записи: код `201`, поле `job_id` непустое, поле `status` равно
`created`, содержимое целиком лежит в каталоге хранения одним файлом
- [x] 3.2 Поля `audio` нет: код `400`, сообщение об отсутствии записи
- [x] 3.3 Запись нулевой длины: код `201`
- [x] 3.4 Расширение из имени отправителя: `.m4a`, `.mp3`, `.wav`, а имя без
расширения даёт `.audio`
- [x] 3.5 Источник метаданных вернул ошибку: код `500`, задача не заведена
- [x] 3.6 Опрос готовности: найденная задача даёт `200` с полями `job_id`,
`status` и `created_at`; неизвестный идентификатор даёт `404`
- [x] 3.7 Поля `transcription_text` в ответе нет, пока текста нет — проверяется
по сырому JSON, а не по разобранной структуре
## 4. Линтер
- [x] 4.1 Снять исключение `errcheck` для `_test.go` в `.golangci.yml`
- [x] 4.2 `golangci-lint run` не даёт замечаний сверх четырёх объявленных долгом
в `CLAUDE.md`
## 5. Гейт и приёмка
- [x] 5.1 `go test ./...` зелёный
- [x] 5.2 `task gate` не краснее объявленного долга: из двух известных отказов
остаётся только `golangci-lint`
- [x] 5.3 Каждый критерий приёмки проверен своим оракулом, исход записан
- [x] 5.4 Снять `go test ./...` из списка объявленных долгов в `CLAUDE.md`,
раздел «Гейт»: долг закрыт, и оставленная запись стала бы оправданием для
любого будущего красного `go test` в этом пакете
## Критерии приёмки
Дословно из записи задачи `http-handler-tests-never-green`:
- `go test ./...` зелёный на чистом клоне без ручной подготовки файлов. Оракул —
`git clone` во временный каталог и `go test ./...`.
- Тест приёма не зависит от установленного `ffprobe`: метаданные даёт подставной
`AudioMetaViewer`. Оракул — прогон с временно переименованным `ffprobe` в
`PATH`.
- Отказ разбора метаданных проверяется отдельным случаем и ожидает `500`, а не
`201`. Оракул — тот же тест на подставном, возвращающем ошибку.
- Тесты не меняют рабочий каталог процесса. Оракул — `grep -n 'os.Chdir'
internal/controller/http/transcribe_test.go` пуст.