From 77f314be3f3ef73663ed6cce452f8b2d2571936a Mon Sep 17 00:00:00 2001 From: Kenik Date: Wed, 2 Sep 2026 21:53:31 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9D=D0=B0=D0=BF=D0=BE=D0=BC=D0=B8=D0=BD?= =?UTF-8?q?=D0=B0=D0=BB=D0=BA=D0=B8:=20=D1=81=D0=BA=D0=B2=D0=BE=D0=B7?= =?UTF-8?q?=D0=BD=D1=8B=D0=B5=20=D1=82=D0=B5=D1=81=D1=82=D1=8B=20=D0=BC?= =?UTF-8?q?=D0=B0=D1=81=D1=82=D0=B5=D1=80=D0=B0=20=D1=81=D0=BE=D0=B7=D0=B4?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=B8=20=D1=83=D0=B4=D0=B0=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/test_flow.py | 66 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) 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)