diff --git a/tests/test_flow.py b/tests/test_flow.py index dc55b79..34216e9 100644 --- a/tests/test_flow.py +++ b/tests/test_flow.py @@ -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)