http: тесты приёма переписаны на подставные адаптеры
- проверки больше не зовут ffprobe и не меняют рабочий каталог процесса; добавлены случаи на отказ чтения метаданных и на отсутствие поля audio - заведена спека intake на приём по HTTP, ADR о подставных адаптерах, запись в журнал ревью о проверке, которая не могла упасть - go test снят из объявленных долгов CLAUDE.md, послабление errcheck для _test.go в .golangci.yml убрано
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
## 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` пуст.
|
||||
Reference in New Issue
Block a user