"""Пример cases.py для golden_diff.py — реальный кейс из Gaechkin/Mehant.

Проверяли дедуп шапки истории в gaechkin/bot/formatters.py (fmt_history / fmt_history_full):
    golden_diff.py /Users/cebers/Разработки/Gaechkin gaechkin/bot/formatters.py \
        ~/.claude/skills/bloat-audit/examples/cases_formatters.py

Модуль импортирует `from gaechkin.db.models import Repair, RepairStatus` — тянет sqlalchemy.
Стабим этот импорт, чтобы venv не требовался. Входные объекты (car, repairs) — дакти-фейки
с ровно теми полями, что читают функции.
"""
import enum, datetime

class RepairStatus(str, enum.Enum):
    in_progress = "in_progress"; completed = "completed"; cancelled = "cancelled"

class Repair: ...  # только для стаба типа-аннотации

# импорты, которые надо застабить перед загрузкой модуля: {"модуль": {атрибут: значение}}
STUBS = {"gaechkin.db.models": {"Repair": Repair, "RepairStatus": RepairStatus}}

class _Car:
    make = "Toyota"; model = "Camry"; plate = "А123ВС777"; year = 2015
_CAR = _Car()

class _R:
    def __init__(self, i, kop, mn, notes, status=RepairStatus.completed):
        self.id = i; self.price_total_kopecks = kop; self.duration_min = mn
        self.notes = notes; self.status = status
        self.started_at = datetime.datetime(2026, 3, 4, 15, 30)
        self.car = _CAR; self.works = []; self.parts = []

_typical = [_R(1, 150000, 90, "замена масла"),
            _R(2, 0, 0, None, RepairStatus.in_progress),
            _R(3, 4500000, 300, "капиталка " * 8, RepairStatus.cancelled)]

# (имя_функции, args_tuple) — прогоняются на OLD и NEW, результат сверяется байт-в-байт
CALLS = [
    ("fmt_history",      (_CAR, _typical)),
    ("fmt_history_full", (_CAR, _typical)),
    ("fmt_history",      (_CAR, [])),            # пустой список
    ("fmt_history_full", (_CAR, [])),
    ("fmt_history",      (_CAR, [_R(9, 0, 0, "диагностика")])),  # без итогов
]
