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

52 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Проверки не зовут внешних программ
- **Дата:** 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](../review.md), «Перестали проверять
сознательно».
- `` правило распространяется на будущие проверки: узел, чья работа и есть
обращение к внешней программе, придётся проверять иначе, и чем — здесь не
решено.