Skip to content

unit: Debug patches #7

@technocreep

Description

@technocreep

Для блока Debug patches нужно тестировать логику приёма/применения патчей и fallback без реального LLM:

  • Успешное применение патча

    • Исходный код со строками A/B/C.
    • Патч: line_number указывает на строку B, old_content совпадает, new_content другое. Ожидание: итоговый код содержит A/new/B/C или просто заменённая строка; предупреждений/исключений нет.
  • Несовпадение строки

    • Исходный код другой, old_content не совпадает с фактической строкой.
    • Ожидание: патч либо пропускается с предупреждением, либо возвращается код с неизменённой строкой; не должно быть исключения.
  • Несколько патчей

    • Два патча на разные строки, применяются в правильном порядке.
    • Проверка: оба изменения в итоговом коде; порядок применения не ломает индексацию (особенно если строки удаляются/добавляются).
  • Исключение при применении → fallback

    • Смоделировать ошибку в процессе применения (например, patch.line_number за пределами длины файла).
    • Ожидание: фиксируется ошибка и вызывается fallback на full rewrite (можно замокать метод debug и проверить вызов).
  • Пустой список патчей

    • Входной код и пустые patches.
    • Ожидание: возвращается исходный код без изменений, без исключений.
  • Схемная валидация ответа

    • Некорректный JSON для патчей (нет line_number, строка вместо списка) → тест, что выбрасывается ожидаемая ошибка или срабатывает fallback.
  • Логирование/предупреждения

    • Проверить, что при пропуске патча из-за несоответствия строки логируется предупреждение (можно замокать logger).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions