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

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

3.6 KiB
Raw Blame History

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