Проведи меня по циклу red-green-refactor для одной функции: маленькими шагами, где каждый шаг заканчивается запускаемым тестом.
Что пишем: [ЗАДАЧА: функция, которая по списку сделок считает выручку за период и отдаёт сумму по месяцам, пропуская отменённые сделки]
Стек: [СТЕК: Python 3.11, pytest]
Что уже известно про данные: [ДАННЫЕ: у сделки есть дата, сумма и статус; статусы — paid, cancelled, pending; даты приходят строками в ISO]
Дай до 5 итераций, в каждой:
1. RED — один тест, который сейчас падает, и точное сообщение, которым он падает.
2. GREEN — минимальный код, чтобы тест прошёл. Именно минимальный: заглушка на этом шаге нормальна.
3. REFACTOR — что улучшаем или явное «оставляем как есть» с причиной.
4. Какое новое поведение проверит следующий тест и почему именно оно следующее.
Отсечка. Не пиши в первой же итерации полную реализацию — тогда это не TDD, а обычное написание кода
с тестами после. Не добавляй в GREEN то, чего не требует текущий тест: обработка pending появляется
в той итерации, где для неё есть тест, а не «на будущее». Не переходи к следующей итерации, пока
предыдущий тест не зелёный. Порядок итераций объясняй риском: сначала то, где ошибка дороже
(пропуск отменённых сделок), а не то, что проще.
Проверка перед выдачей: по каждой итерации сверь, что код из GREEN действительно проходит свой тест
и НЕ проходит тест следующей итерации. Если проходит оба — шаг был слишком большой, разбей его.
Собрать под себя — поля заполнены рабочими значениями, меняйте их и промпт выше обновится сам