Умный пропуск шагов воронки при уже сохранённых данных (§15)

- _baza_advance: воронка переходит к первому НЕзаполненному шагу, пропуская роль/
  возраст/игру/уровень, если они уже известны; формат (выбор действия) спрашивается всегда.
- На повторном входе — короткая подсказка, что известные ответы не переспрашиваются
  и их можно изменить кнопкой «Назад» (back-навигация остаётся линейной = override).
- Интенсив: известный возраст (из подбора) не переспрашивается — сразу уровень CS2.
- Данные из ветки «лето» сохраняются и переиспользуются в подборе, и наоборот.

Тесты: test_baza_smart_skip_known_fields, test_baza_intensive_skips_known_age. pytest 33 passed.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Kenik
2026-07-23 20:10:15 +03:00
parent 4095b2ec61
commit 12ce9c0807
2 changed files with 76 additions and 17 deletions
+26
View File
@@ -62,6 +62,32 @@ def test_baza_other_game_goes_to_manager(app):
assert "Valorant" in _prof(u)["game"]
def test_baza_smart_skip_known_fields(app):
"""§15: уже сохранённые ответы не переспрашиваются."""
u = 70020
bot.db.set_profile_field(u, "role", "Игрок (пишет сам)")
bot.db.set_profile_field(u, "age", "16 лет и старше")
# роль и возраст известны → воронка стартует сразу с игры
app.handle_message(u, "Подобрать тренировку 🎯")
assert _state(u) == "BAZA_GAME"
# уровень известен → после игры сразу формат (пропуская уровень)
bot.db.set_profile_field(u, "level", "Играет для себя")
app.handle_message(u, "CS2")
assert _state(u) == "BAZA_FORMAT"
# «Назад» позволяет переопределить пропущенный уровень
app.handle_message(u, "Назад ⬅️")
assert _state(u) == "BAZA_LEVEL"
def test_baza_intensive_skips_known_age(app):
"""§15: в интенсиве известный возраст не переспрашивается."""
u = 70021
bot.db.set_profile_field(u, "age", "1415 лет")
app.handle_message(u, "Летний интенсив CS2 🔥")
app.handle_message(u, "Хочу участвовать 🔥")
assert _state(u) == "BAZA_INT_LEVEL" # возраст пропущен
def test_baza_intensive_by_keyword(app):
"""Кодовое слово «лето» запускает интенсив; ветка доходит до оплаты."""
u = 70014