diff --git a/tasks/BACKLOG.md b/tasks/BACKLOG.md index cd3f342..e838383 100644 --- a/tasks/BACKLOG.md +++ b/tasks/BACKLOG.md @@ -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 между слоями сломает проверку молча. - [🧹 Задать таймауты обращениям к внешним сервисам](items/external-call-timeouts.md) — Ни у Telegram, ни у Object Storage, ни у SpeechKit нет таймаута: молчащий собеседник держит шаг конвейера до истечения часового захвата. - [🔬 Очередь задач: своя таблица или готовая библиотека](items/job-queue-choice.md) — Очередь написана вручную: захват двумя запросами без транзакции, протухание временем, опрос раз в секунду вхолостую тремя воркерами. diff --git a/tasks/items/http-handler-tests-never-green.md b/tasks/items/http-handler-tests-never-green.md deleted file mode 100644 index b9e14dc..0000000 --- a/tasks/items/http-handler-tests-never-green.md +++ /dev/null @@ -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` на негодный файл — неверный ответ, это отдельная задача про трансляцию -доменной ошибки.