Files
transcriber/openspec/changes/archive/2026-08-11-fix-http-handler-tests/tasks.md
T
av 6c04c801c9 http: тесты приёма переписаны на подставные адаптеры
- проверки больше не зовут ffprobe и не меняют рабочий каталог процесса;
  добавлены случаи на отказ чтения метаданных и на отсутствие поля audio
- заведена спека intake на приём по HTTP, ADR о подставных адаптерах,
  запись в журнал ревью о проверке, которая не могла упасть
- go test снят из объявленных долгов CLAUDE.md, послабление errcheck
  для _test.go в .golangci.yml убрано
2026-08-11 08:35:11 +03:00

4.1 KiB
Raw Blame History

1. Подстановки в сборке теста

  • 1.1 Завести в тестовом пакете подставной contract.AudioMetaViewer: отдаёт заданную длительность либо заданную ошибку
  • 1.2 Завести подставной contract.AudioFileConverter — конвертацию эти проверки не зовут
  • 1.3 setupTestRouter принимает каталог хранения и источник метаданных снаружи; ffmpegmv и ffmpegconv из импортов пакета уходят
  • 1.4 Каталог хранения каждому случаю даёт t.TempDir(); os.Chdir в файле не остаётся ни одного

2. Сборка запроса

  • 2.1 Вспомогательная функция собирает multipart-запрос из имени файла и байтов, а не из пути на диске
  • 2.2 Ни один случай не создаёт файлов в текущем каталоге

3. Проверки приёма

  • 3.1 Приём записи: код 201, поле job_id непустое, поле status равно created, содержимое целиком лежит в каталоге хранения одним файлом
  • 3.2 Поля audio нет: код 400, сообщение об отсутствии записи
  • 3.3 Запись нулевой длины: код 201
  • 3.4 Расширение из имени отправителя: .m4a, .mp3, .wav, а имя без расширения даёт .audio
  • 3.5 Источник метаданных вернул ошибку: код 500, задача не заведена
  • 3.6 Опрос готовности: найденная задача даёт 200 с полями job_id, status и created_at; неизвестный идентификатор даёт 404
  • 3.7 Поля transcription_text в ответе нет, пока текста нет — проверяется по сырому JSON, а не по разобранной структуре

4. Линтер

  • 4.1 Снять исключение errcheck для _test.go в .golangci.yml
  • 4.2 golangci-lint run не даёт замечаний сверх четырёх объявленных долгом в CLAUDE.md

5. Гейт и приёмка

  • 5.1 go test ./... зелёный
  • 5.2 task gate не краснее объявленного долга: из двух известных отказов остаётся только golangci-lint
  • 5.3 Каждый критерий приёмки проверен своим оракулом, исход записан
  • 5.4 Снять go test ./... из списка объявленных долгов в CLAUDE.md, раздел «Гейт»: долг закрыт, и оставленная запись стала бы оправданием для любого будущего красного go test в этом пакете

Критерии приёмки

Дословно из записи задачи http-handler-tests-never-green:

  • go test ./... зелёный на чистом клоне без ручной подготовки файлов. Оракул — git clone во временный каталог и go test ./....
  • Тест приёма не зависит от установленного ffprobe: метаданные даёт подставной AudioMetaViewer. Оракул — прогон с временно переименованным ffprobe в PATH.
  • Отказ разбора метаданных проверяется отдельным случаем и ожидает 500, а не 201. Оракул — тот же тест на подставном, возвращающем ошибку.
  • Тесты не меняют рабочий каталог процесса. Оракул — grep -n 'os.Chdir' internal/controller/http/transcribe_test.go пуст.