закрыта задача http-handler-tests-never-green

This commit is contained in:
av
2026-08-11 08:35:37 +03:00
parent 6c04c801c9
commit 1bd6d03188
2 changed files with 0 additions and 58 deletions
-1
View File
@@ -20,7 +20,6 @@
## Очередь ## Очередь
- [🐞 Починить тесты http-обработчика, ни разу не бывшие зелёными](items/http-handler-tests-never-green.md) — go test ./... падает на master: тесты требуют файла, которого нет в репозитории, и ждут 201 от ffprobe, которому скормили строку.
- [🧹 Сравнивать доменные ошибки через errors.As](items/errors-as-instead-of-typecast.md) — NoopJobError и JobNotFoundError проверяются приведением типа: первая же обёртка %w между слоями сломает проверку молча. - [🧹 Сравнивать доменные ошибки через errors.As](items/errors-as-instead-of-typecast.md) — NoopJobError и JobNotFoundError проверяются приведением типа: первая же обёртка %w между слоями сломает проверку молча.
- [🧹 Задать таймауты обращениям к внешним сервисам](items/external-call-timeouts.md) — Ни у Telegram, ни у Object Storage, ни у SpeechKit нет таймаута: молчащий собеседник держит шаг конвейера до истечения часового захвата. - [🧹 Задать таймауты обращениям к внешним сервисам](items/external-call-timeouts.md) — Ни у Telegram, ни у Object Storage, ни у SpeechKit нет таймаута: молчащий собеседник держит шаг конвейера до истечения часового захвата.
- [🔬 Очередь задач: своя таблица или готовая библиотека](items/job-queue-choice.md) — Очередь написана вручную: захват двумя запросами без транзакции, протухание временем, опрос раз в секунду вхолостую тремя воркерами. - [🔬 Очередь задач: своя таблица или готовая библиотека](items/job-queue-choice.md) — Очередь написана вручную: захват двумя запросами без транзакции, протухание временем, опрос раз в секунду вхолостую тремя воркерами.
@@ -1,57 +0,0 @@
# 🐞 Починить тесты 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` на негодный файл — неверный ответ, это отдельная задача про трансляцию
доменной ошибки.