Files
transcriber/tasks/items/pipeline-step-tests.md
T
av 8739b18a9f tasks: очередь расставлена от базы к деталям
- порядок беклога и роадмапа назначен слоями: проверки, которым можно
  верить → долги входа → владелец записи и контракт API → конвейер под
  тестами → приложение и возможности поверх; у каждого движения записана
  причина;
- заведены восемь задач под пункты «Завершения», которых не закрывала ни
  одна запись, — цель any-audio-source была без задач вовсе;
- у четырёх задач сняты критерии, требовавшие того, что делает задача ниже
  по очереди; исправлены ссылки на несуществующий repo/sqlite и на
  отменённую разведку об очереди.
2026-08-12 20:48:53 +03:00

45 lines
3.4 KiB
Markdown

# 🧹 Покрыть тестами шаги конвейера и захват задачи
- **Тип:** chore
- **Категория:** Очередь — Шаги конвейера не покрыты ничем, а удаление, уровни текста и резка длинных записей переписывают именно их: дальше без тестов идти вслепую.
- **Зачем:** Тестовых файлов в проекте два, и оба мимо конвейера: потеря ссылки на файл, двойной ответ пользователю и гонка при захвате не поймаются ничем.
- **Теги:** review-2026-08-11
Тестовых файлов в проекте два: приём по HTTP и деление длинного сообщения
Telegram. Шаги конвейера — `FindAndRunConversionJob`, `FindAndRunTranscribeJob`,
`FindAndRunTranscribeCheckJob` — и воркеры, которые их выполняют, не покрыты ничем.
Свойства, названные типовым узлом «Шаг конвейера» в
[review.md](../../docs/review.md), сегодня не проверяет ни одна команда: что
«задач нет» отличается от отказа, что ссылка на файл не теряется, что повтор не
плодит лишних записей, что пользователю отвечают ровно один раз. Три воркера
читают общий `*sql.DB`, и теста с параллельным доступом нет тоже.
Найдено проходом `review-autotests` ревью кода change
`2026-08-11-fix-http-handler-tests`, вопросом темы `autotests`.
## Затрагивает
- `internal/service` — новые тесты шагов конвейера;
- `internal/controller/worker` — тест на одновременную работу трёх воркеров
против одной базы;
- подстановки: `internal/adapter/recognizer/memory.go` уже есть, конвертеру и
источнику метаданных нужны свои.
## Критерии приёмки
- «Задач нет» отличается от отказа и не считается ошибкой. Оракул — тест на
пустой базе: шаг возвращает `NoopJobError`, метрика отказов не растёт.
- Задача, брошенная на середине шага, достаётся снова по истечении захвата и
проходит шаг заново, не плодя вторых файлов. Оракул — тест: прервать шаг,
отмотать время захвата, прогнать снова, сверить число записей в `files`.
- Три воркера против одной базы не выдают одну задачу дважды. Оракул — тест с
параллельным прогоном под `-race`.
## Рамки
Модель очереди решена 2026-08-11 —
[очередь коллекцией PocketBase](../../docs/adr/ADR-2026-08-11-queue-as-pocketbase-collection.md),
— и разведки о ней больше нет. Тесты пишутся под сегодняшний захват.