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

3.4 KiB

🧹 Покрыть тестами шаги конвейера и захват задачи

  • Тип: chore
  • Категория: Очередь — Шаги конвейера не покрыты ничем, а удаление, уровни текста и резка длинных записей переписывают именно их: дальше без тестов идти вслепую.
  • Зачем: Тестовых файлов в проекте два, и оба мимо конвейера: потеря ссылки на файл, двойной ответ пользователю и гонка при захвате не поймаются ничем.
  • Теги: review-2026-08-11

Тестовых файлов в проекте два: приём по HTTP и деление длинного сообщения Telegram. Шаги конвейера — FindAndRunConversionJob, FindAndRunTranscribeJob, FindAndRunTranscribeCheckJob — и воркеры, которые их выполняют, не покрыты ничем.

Свойства, названные типовым узлом «Шаг конвейера» в 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, — и разведки о ней больше нет. Тесты пишутся под сегодняшний захват.