Files
bot_vk_ikp_prodagi/tests/test_flow.py

108 lines
4.1 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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)
def _admin():
return bot.config.SUPER_ADMIN_IDS[0]
def test_admin_services_crud(app):
a = _admin()
app.handle_message(a, "Управление услугами ⚙️")
app.handle_message(a, " Добавить услугу")
app.handle_message(a, "Тест-у | 1 ₽ | описание")
nid = [k for k, v in bot.db.get_services().items() if v["name"] == "Тест-у"]
assert nid
n = nid[0]
app.handle_message(a, "✏️ Изменить услугу"); app.handle_message(a, f"{n}. Тест-у")
app.handle_message(a, "цена | 999 ₽")
assert bot.db.get_services()[n]["price"] == "999 ₽"
app.handle_message(a, "🗑 Удалить услугу"); app.handle_message(a, f"{n}. Тест-у")
assert n not in bot.db.get_services()
def test_admin_faq_crud(app):
a = _admin()
app.handle_message(a, "Быстрые ответы 💬")
app.handle_message(a, " Добавить ответ")
app.handle_message(a, "вопрос | ответ")
assert any(kw == "вопрос" for _, kw, _ in bot.db.get_custom_faq())
def test_admin_vacancy_crud(app):
a = _admin()
app.handle_message(a, "Вакансии 💼")
app.handle_message(a, " Вакансия игрок")
app.handle_message(a, "Valorant 🎯")
assert any(l == "Valorant 🎯" for _, l in bot.db.get_vacancy_options("player"))
def test_admin_add_remove_admin(app):
a = _admin()
app.handle_message(a, "Администраторы 👑")
app.handle_message(a, " Добавить админа")
app.handle_message(a, "888001")
assert 888001 in bot.db.get_admins()
assert app._is_admin(888001)
def test_broadcast_preview_and_cancel(app):
a = _admin()
app.handle_message(a, "рассылка Привет, акция!")
assert a in app._pending_broadcasts
app.handle_message(a, "Отмена ❌")
assert a not in app._pending_broadcasts
def test_stats_runs(app):
a = _admin()
app._sent.clear()
app.handle_message(a, "Статистика 📊")
assert any("Статистика" in s["msg"] for s in app._sent)