Умный пропуск шагов воронки при уже сохранённых данных (§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:
@@ -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", "14–15 лет")
|
||||
app.handle_message(u, "Летний интенсив CS2 🔥")
|
||||
app.handle_message(u, "Хочу участвовать 🔥")
|
||||
assert _state(u) == "BAZA_INT_LEVEL" # возраст пропущен
|
||||
|
||||
|
||||
def test_baza_intensive_by_keyword(app):
|
||||
"""Кодовое слово «лето» запускает интенсив; ветка доходит до оплаты."""
|
||||
u = 70014
|
||||
|
||||
Reference in New Issue
Block a user