# 🐞 Починить тесты 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` на негодный файл — неверный ответ, это отдельная задача про трансляцию доменной ошибки.