Files
transcriber/tasks/items/http-handler-tests-never-green.md
T
av d21da8575c Единый список задач вместо двух секций, порядок по выполнению
Секции «Ядро» и «Инфра» слиты в одну «Очередь»: полок домена у проекта
нет, а две секции держали два независимых порядка вместо одного.

Порядок: красный гейт, потом долги, задевающие интерфейсы, потом
хранилище, вход, разграничение, приложение. Разведка потолков SpeechKit
последней — она обслуживает направление, а не очередь.
2026-08-10 21:39:55 +03:00

58 lines
3.6 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.
# 🐞 Починить тесты http-обработчика, ни разу не бывшие зелёными
- **Тип:** fix
- **Категория:** Очередь
- **Зачем:** go test ./... падает на master: тесты требуют файла, которого нет в репозитории, и ждут 201 от ffprobe, которому скормили строку.
Тесты заведены коммитом `87d8b05` и с тех пор ни разу не проходили: файл
`internal/controller/http/testdata/sample.m4a` в git не попадал никогда, а
`.gitignore` строкой `*.m4a` и не даст его закоммитить. Остальные случаи
записывают в файл строку `test audio content` и ждут `201`, тогда как обработчик
зовёт настоящий `ffprobe`, который такой вход отвергает, — получается `500`.
Отсюда следствие важнее самих тестов: **красный `go test` перестал что-либо
значить**, и любой настоящий отказ в этом пакете теперь неотличим от привычного
шума.
Заодно тесты зовут `os.Chdir`, то есть меняют состояние всего процесса: гонять
их параллельно нельзя, а `errcheck` на этих вызовах молчит только потому, что
`_test.go` вынесен в исключения `.golangci.yml`.
## Воспроизведение
```
go test ./internal/controller/http/
```
Отказов четыре: `TestCreateTranscribeJob_Success` не находит
`testdata/sample.m4a`; `TestCreateTranscribeJob_EmptyFile` и три случая
`TestCreateTranscribeJob_DifferentFileExtensions` получают `500` вместо `201` с
`ffprobe execution failed: exit status 1` в логе.
## Затрагивает
- `internal/controller/http/transcribe_test.go` целиком;
- `.gitignore`, строка `*.m4a` — она же мешает положить настоящую запись в
`testdata`;
- `internal/contract`, `AudioMetaViewer` — подставной вместо настоящего
`ffprobe` в тестах;
- `.golangci.yml`, исключение `errcheck` для `_test.go`, если `os.Chdir` уйдёт.
## Критерии приёмки
- `go test ./...` зелёный на чистом клоне без ручной подготовки файлов. Оракул —
`git clone` во временный каталог и `go test ./...`.
- Тест приёма не зависит от установленного `ffprobe`: метаданные даёт подставной
`AudioMetaViewer`. Оракул — прогон с временно переименованным `ffprobe` в
`PATH`.
- Отказ разбора метаданных проверяется отдельным случаем и ожидает `500`, а не
`201`. Оракул — тот же тест на подставном, возвращающем ошибку.
- Тесты не меняют рабочий каталог процесса. Оракул — `grep -n 'os.Chdir'
internal/controller/http/transcribe_test.go` пуст.
## Рамки
Поведение обработчика не меняем: задача про тесты. Если по ходу выяснится, что
`500` на негодный файл — неверный ответ, это отдельная задача про трансляцию
доменной ошибки.