Files
transcriber/docs/adr/ADR-2026-08-11-stub-adapters-in-tests.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

3.8 KiB
Raw Blame History

Проверки не зовут внешних программ

  • Дата: 2026-08-11
  • Источник: openspec/changes/archive/2026-08-11-fix-http-handler-tests/design.md

Решение

Тесты приёма получают длительность записи от подставного источника метаданных, а не от ffprobe. Годность содержимого судит адаптер, тест судит наш код.

Почему

Цитата из источника, раздел Decisions:

проверять приём сквозь настоящий ffprobe. Отвергнуто: это проверка внешней программы, а не нашего кода. Она найдёт отказ ffprobe и не найдёт ошибку в приёме — ровно наоборот тому, зачем эти тесты писались.

Отвергнуты там же два очевидных пути, и оба по записанным правилам проекта, а не по вкусу:

положить настоящую запись в testdata. Отвергнуто дважды: .gitignore строкой *.m4a её не пустит, а CLAUDE.md прямо говорит, что testdata в проекте нет и тесты создают нужное во временном каталоге. Снимать запрет ради теста — менять правило проекта под удобство одного файла;

порождать запись ffmpeg прямо в тесте. Отвергнуто: проверка приёма начинает требовать установленных ffmpeg и ffprobe, а критерий приёмки требует обратного — прогона с ffprobe, убранным из PATH.

Решение попадает в журнал как намеренный отказ от очевидного подхода: файл с настоящей записью в testdata — первое, что сделал бы человек, и отказ от него из кода не виден.

Последствия

  • + прогон проверок на чистом клоне зелёный без подготовки файлов руками и без установленных внешних программ. Проверено сборкой тестового бинарника и прогоном под env -i PATH=<пустой каталог>.
  • + ветка отказа чтения метаданных впервые проверяема: подставной источник умеет вернуть ошибку, настоящий ffprobe по заказу не отказывает.
  • + проверки не держат состояния процесса: каталог хранения задаётся снаружи, os.Chdir ушёл, и параллельный прогон перестал быть запрещённым.
  • разбор вывода настоящего ffprobe не проверяется ничем: своего теста у internal/adapter/metaviewer/ffmpeg нет. Формально покрытие не потеряно — прежние проверки звали его так, что он всегда отказывал, — но дыра теперь наша и записана в ../review.md, «Перестали проверять сознательно».
  • правило распространяется на будущие проверки: узел, чья работа и есть обращение к внешней программе, придётся проверять иначе, и чем — здесь не решено.