закрыта задача http-handler-tests-never-green
This commit is contained in:
@@ -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` на негодный файл — неверный ответ, это отдельная задача про трансляцию
|
||||
доменной ошибки.
|
||||
Reference in New Issue
Block a user