Напоминалки: сквозные тесты мастера создания и удаления
This commit is contained in:
@@ -351,3 +351,69 @@ def test_stats_runs(app):
|
||||
app._sent.clear()
|
||||
app.handle_message(a, "Статистика 📊")
|
||||
assert any("Статистика" in s["msg"] for s in app._sent)
|
||||
|
||||
|
||||
def test_admin_reminder_wizard_creates_reminder(app, monkeypatch):
|
||||
admin = 80001
|
||||
monkeypatch.setattr(bot.config, "ADMIN_IDS", [admin])
|
||||
|
||||
app.handle_message(admin, "Админка ⚙️")
|
||||
app.handle_message(admin, "⏰ Напоминалки")
|
||||
app.handle_message(admin, "➕ Добавить")
|
||||
assert _state(admin) == "ADMIN_REMINDER_DATE"
|
||||
|
||||
app.handle_message(admin, "не дата") # невалидный формат — остаёмся на шаге
|
||||
assert _state(admin) == "ADMIN_REMINDER_DATE"
|
||||
|
||||
app.handle_message(admin, "01.01.2099 09:00")
|
||||
assert _state(admin) == "ADMIN_REMINDER_TEXT"
|
||||
|
||||
app.handle_message(admin, "Продлить домен")
|
||||
assert _state(admin) == "ADMIN_REMINDER_RECIPIENTS"
|
||||
|
||||
app.handle_message(admin, "0") # все админы
|
||||
assert _state(admin) == "ADMIN_REMINDER_PERIOD"
|
||||
|
||||
app.handle_message(admin, "Каждый год")
|
||||
assert _state(admin) == "FREE_CHAT"
|
||||
|
||||
rows = bot.db.get_active_reminders()
|
||||
assert len(rows) == 1
|
||||
assert rows[0]["recipients"] == "all"
|
||||
assert rows[0]["recurrence"] == "yearly"
|
||||
assert rows[0]["text"] == "Продлить домен"
|
||||
|
||||
|
||||
def test_admin_reminder_wizard_specific_recipients(app, monkeypatch):
|
||||
admin, other = 80003, 80004
|
||||
monkeypatch.setattr(bot.config, "ADMIN_IDS", [admin, other])
|
||||
|
||||
app.handle_message(admin, "⏰ Напоминалки")
|
||||
app.handle_message(admin, "➕ Добавить")
|
||||
app.handle_message(admin, "01.01.2099 09:00")
|
||||
app.handle_message(admin, "Оплатить сервер")
|
||||
app.handle_message(admin, "9") # номер вне списка (только 2 админа)
|
||||
assert _state(admin) == "ADMIN_REMINDER_RECIPIENTS"
|
||||
app.handle_message(admin, "1") # первый по сортировке id
|
||||
assert _state(admin) == "ADMIN_REMINDER_PERIOD"
|
||||
app.handle_message(admin, "Разово")
|
||||
|
||||
rows = bot.db.get_active_reminders()
|
||||
assert rows[0]["recipients"] == [min(admin, other)]
|
||||
assert rows[0]["recurrence"] == "once"
|
||||
|
||||
|
||||
def test_admin_reminder_delete(app, monkeypatch):
|
||||
admin = 80002
|
||||
monkeypatch.setattr(bot.config, "ADMIN_IDS", [admin])
|
||||
rid = bot.db.add_reminder("Тест", "2099-01-01 09:00:00", "once", [admin], created_by=admin)
|
||||
|
||||
app.handle_message(admin, f"напоминалка удалить {rid}")
|
||||
assert not bot.db.get_active_reminders()
|
||||
|
||||
before = len(app._sent)
|
||||
app.handle_message(admin, f"напоминалка удалить {rid}") # повторно — не найдено
|
||||
# _handle_reminder_delete шлёт результат, а затем обновлённую панель «Напоминалки»,
|
||||
# поэтому проверяем все сообщения этого шага, а не только последнее.
|
||||
new_msgs = [s["msg"] for s in app._sent[before:]]
|
||||
assert any("не найдено" in m for m in new_msgs)
|
||||
|
||||
Reference in New Issue
Block a user