Что не покрыто
Найдено мутационным тестированием при проверке PR #50. Дыра предсуществующая — воспроизводится и на main (813243e), рефакторинг её не вносил.
collector.py, ветка --resume-dir:
if manifest.granularity is not granularity or manifest.requested_period != requested_period:
raise InvalidRequestError(
"--resume-dir was created with a different dynamics granularity or requested period"
)
Замена условия на if False: не роняет ни одного из 190 тестов.
Почему это важно
Это защита от порчи данных, а не косметика. --resume-dir дозаписывает виды в существующий каталог прогона. Если пользователь возобновит прогон с другой гранулярностью или другим окном дат, в один каталог лягут parquet-файлы от разных запросов, а manifest.json опишет их одним набором метаданных. Молча — потому что каждый отдельный файл будет корректен.
Соседняя проверка того же класса (prepare_resume_directory, отказ при несовпадении фразы/региона) покрыта тестами; эта — нет.
Второе, поменьше
Ранний возврат «полный прогон не переписываем»:
if not pending_views:
return _PreparedRun(..., resumed=True) # на main: return CollectionResult(...)
Его удаление тоже не роняет тесты. Комментарий рядом объясняет назначение: у завершённого прогона source_url и updated_at должны описывать последнюю фактическую запись, а не факт повторного запуска.
Что нужно
- Тест:
--resume-dir на каталог, созданный с другой гранулярностью → InvalidRequestError. Отдельно — с другим requested_period.
- Тест: повторный
--resume-dir на завершённый прогон не переписывает manifest.json (сверить updated_at до и после).
- Обе мутации (
if False: на проверке; удаление раннего возврата) обязаны краснеть.
Оба сценария — про --resume-dir, поэтому логично закрыть одним PR.
Что не покрыто
Найдено мутационным тестированием при проверке PR #50. Дыра предсуществующая — воспроизводится и на
main(813243e), рефакторинг её не вносил.collector.py, ветка--resume-dir:Замена условия на
if False:не роняет ни одного из 190 тестов.Почему это важно
Это защита от порчи данных, а не косметика.
--resume-dirдозаписывает виды в существующий каталог прогона. Если пользователь возобновит прогон с другой гранулярностью или другим окном дат, в один каталог лягут parquet-файлы от разных запросов, аmanifest.jsonопишет их одним набором метаданных. Молча — потому что каждый отдельный файл будет корректен.Соседняя проверка того же класса (
prepare_resume_directory, отказ при несовпадении фразы/региона) покрыта тестами; эта — нет.Второе, поменьше
Ранний возврат «полный прогон не переписываем»:
Его удаление тоже не роняет тесты. Комментарий рядом объясняет назначение: у завершённого прогона
source_urlиupdated_atдолжны описывать последнюю фактическую запись, а не факт повторного запуска.Что нужно
--resume-dirна каталог, созданный с другой гранулярностью →InvalidRequestError. Отдельно — с другимrequested_period.--resume-dirна завершённый прогон не переписываетmanifest.json(сверитьupdated_atдо и после).if False:на проверке; удаление раннего возврата) обязаны краснеть.Оба сценария — про
--resume-dir, поэтому логично закрыть одним PR.