Files
transcriber/tasks/items/http-tests-repo-failure-injection.md
T
av 75c6f0168a учёт: закрыт переезд хранилища, заведён урожай его ревью
- storage-without-pocketbase закрыта как реализованная: приёмка сошлась по всем
  пяти критериям записи и по двенадцати приёмочным свойствам рубрики ревью
  дизайна, работа лежит коммитом c9b7765
- урожай триажа ревью развёрнут в одиннадцать записей с тегом партии
  review-2026-08-23 и расставлен по зависимости, а не в конец списка
- находка про признак живости воркера слита в stalled-pipeline-metric: у неё та
  же причина — вставший конвейер неотличим от простоя
2026-08-23 08:41:49 +03:00

45 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🧹 Проверять ответ обработчика на отказ репозитория
- **Тип:** chore
- **Категория:** Очередь — Подставной репозиторий заводится там же, где тесты конвейера: одна сборка теста на два слоя
- **Зачем:** Тесты обработчиков идут по настоящему sqlite без управляемых отказов: класс «база недоступна во время запроса» не проверен нигде.
- **Теги:** review-2026-08-23
Тесты обработчиков ходят по настоящему sqlite во временном каталоге. Управляемых
отказов у него нет, поэтому весь класс «база недоступна во время запроса» не
проверен нигде: что отвечает обработчик, когда репозиторий отказал, известно
только чтением кода.
Проверять надо не отказ базы, а ответ на него: код, тело единой формы и то, что
причина не попала в ответ пользователю. Для этого репозиторию нужна подставная
реализация, отказывающая по требованию.
Гипотеза прохода `review-autotests` (A4) ревью change
`2026-08-23-storage-without-pocketbase`, понижённая триажем до наблюдения:
оракула у неё нет ровно потому, что управляемых отказов не существует. Сам пробел
проверен — `grep` по тестам пакета пуст.
## Затрагивает
- тесты `internal/controller/http` — сборка теста и способ подставить
репозиторий;
- договор ядра с хранилищем `internal/contract` — интерфейсы, по которым
подставляется отказ;
- единая форма ответа об отказе `internal/controller/http/errors.go`.
## Критерии приёмки
- Тест подставляет отказ репозитория. **Оракул:** тест — подставной
репозиторий отдаёт ошибку на названном методе, и обработчик её получает.
- Ответ на отказ идёт единой формой и не несёт причины. **Оракул:** тест на
каждом читающем обработчике — код `500`, тело эталонной формы, текста ошибки
базы в теле нет.
- Отказ виден владельцу сервиса. **Оракул:** тот же тест с перехваченным
журналом — строка уровня `ERROR` с причиной есть.
## Рамки
Настоящую базу из тестов не убираем: подставной репозиторий нужен для отказов, а
не вместо неё. Формы ответов и коды не меняем — задача проверяет то, что уже
объявлено.