- проверки больше не зовут ffprobe и не меняют рабочий каталог процесса; добавлены случаи на отказ чтения метаданных и на отсутствие поля audio - заведена спека intake на приём по HTTP, ADR о подставных адаптерах, запись в журнал ревью о проверке, которая не могла упасть - go test снят из объявленных долгов CLAUDE.md, послабление errcheck для _test.go в .golangci.yml убрано
4.1 KiB
4.1 KiB
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пуст.