Files
transcriber/tasks/items/pipeline-step-tests.md
T
av 2333e80633 tasks: заведены шесть задач из урожая ревью и переименования образца конфига
- пять из урожая change 2026-08-11-fix-http-handler-tests, тег review-2026-08-11;
  утечка имени файла в журнал поставлена первой строкой очереди
- опечатка transcibe дописана в json-api-for-spa: текст ошибки — часть
  необратимого контракта, и в одиночку он не правится
2026-08-11 08:59:45 +03:00

3.2 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.

Рамки

Задачу лучше брать после разведки job-queue-choice: она может сменить модель очереди целиком, и тесты, написанные под сегодняшний захват, придётся выбросить вместе с ним.