Напоминалки: сквозные тесты мастера создания и удаления

This commit is contained in:
Kenik
2026-09-02 21:53:31 +03:00
parent 5d88b8899e
commit 77f314be3f
+66
View File
@@ -351,3 +351,69 @@ def test_stats_runs(app):
app._sent.clear() app._sent.clear()
app.handle_message(a, "Статистика 📊") app.handle_message(a, "Статистика 📊")
assert any("Статистика" in s["msg"] for s in app._sent) 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)