- пять из урожая change 2026-08-11-fix-http-handler-tests, тег review-2026-08-11; утечка имени файла в журнал поставлена первой строкой очереди - опечатка transcibe дописана в json-api-for-spa: текст ошибки — часть необратимого контракта, и в одиночку он не правится
46 lines
3.2 KiB
Markdown
46 lines
3.2 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`.
|
|
|
|
## Рамки
|
|
|
|
Задачу лучше брать **после** разведки
|
|
[job-queue-choice](job-queue-choice.md): она может сменить модель очереди
|
|
целиком, и тесты, написанные под сегодняшний захват, придётся выбросить вместе с
|
|
ним.
|
|
|