Pytest-набор: валидаторы, БД, интеграционные флоу
tests/ — 19 тестов: validators (телефон/имя/формат), database (услуги, FAQ, вакансии, отклики, админы, лиды, подписчики), интеграция (полный флоу заявки, карьера игрока, анти-флуд не роняет бота, доступ к админке). Работают на временной БД, реальную не трогают. Запуск: python -m pytest tests/ -q Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
import bot
|
||||
|
||||
|
||||
def _state(uid):
|
||||
return bot.db.get_user_data(uid)["state"]
|
||||
|
||||
|
||||
def test_full_lead_flow(app):
|
||||
u = 70001
|
||||
assert (app.handle_message(u, "Заполнить заявку 📝"), _state(u))[1] == "FORM_NAME"
|
||||
app.handle_message(u, "Иван"); assert _state(u) == "FORM_PHONE"
|
||||
app.handle_message(u, "89990001122"); assert _state(u) == "FORM_QUESTION"
|
||||
app.handle_message(u, "кс"); assert _state(u) == "FORM_CALLDATE"
|
||||
app.handle_message(u, "Завтра"); assert _state(u) == "FORM_CALLTIME"
|
||||
app.handle_message(u, "14:00"); assert _state(u) == "FORM_REVIEW"
|
||||
app.handle_message(u, "Да, всё верно! ✅"); assert _state(u) == "FORM_CONSENT_1"
|
||||
app.handle_message(u, "Согласен(а) и подтверждаю ✅"); assert _state(u) == "FORM_CONSENT_2"
|
||||
app.handle_message(u, "Без рассылки ➡️"); assert _state(u) == "FREE_CHAT"
|
||||
stats = bot.db.get_lead_stats()
|
||||
assert stats["total"] == 1 and stats["from_bot"] == 1
|
||||
|
||||
|
||||
def test_career_player_flow(app):
|
||||
u = 70003
|
||||
app.handle_message(u, "Карьера в ИКП 💼"); assert _state(u) == "VAC_CHOOSE"
|
||||
app.handle_message(u, "Игроком в состав 🎮"); assert _state(u) == "VAC_P_DISCIPLINE"
|
||||
app.handle_message(u, "Counter-Strike 2 🔫"); assert _state(u) == "VAC_P_RANK"
|
||||
|
||||
|
||||
def test_flood_does_not_crash(app):
|
||||
u = 70002
|
||||
for _ in range(25):
|
||||
app.handle_message(u, "спам")
|
||||
# бот не падает; пользователь остаётся в FREE_CHAT (флуд/бан только игнорят)
|
||||
assert _state(u) == "FREE_CHAT"
|
||||
|
||||
|
||||
def test_admin_panel_visible_to_super(app):
|
||||
admin = bot.config.SUPER_ADMIN_IDS[0]
|
||||
app._sent.clear()
|
||||
app.handle_message(admin, "Админка ⚙️")
|
||||
assert any("Статистика" in (s["kb"] or "") for s in app._sent)
|
||||
|
||||
|
||||
def test_non_admin_cannot_open_panel(app):
|
||||
app._sent.clear()
|
||||
app.handle_message(424242, "Админка ⚙️")
|
||||
assert not any("Админ-панель" in s["msg"] for s in app._sent)
|
||||
Reference in New Issue
Block a user