- пять из урожая change 2026-08-11-fix-http-handler-tests, тег review-2026-08-11; утечка имени файла в журнал поставлена первой строкой очереди - опечатка transcibe дописана в json-api-for-spa: текст ошибки — часть необратимого контракта, и в одиночку он не правится
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: она может сменить модель очереди целиком, и тесты, написанные под сегодняшний захват, придётся выбросить вместе с ним.