Bot & Automation

Activity Reminder Bot

/root/hermes-projects/Activity Reminder Bot

tests/test_alarm_repeat.py text
from datetime import date, datetime, time, timedelta

from activity_reminder_bot.models import Reminder, ReminderRepeat, ReminderStatus
from activity_reminder_bot.services.reminders import ReminderService


def make_notified_reminder(notified_at: datetime, alarm_count: int = 1) -> Reminder:
    return Reminder(
        public_id="REM-TEST",
        user_id=123,
        user_name="Test User",
        activity_name="Test alarm",
        description="Test alarm",
        reminder_date=date(2026, 6, 9),
        reminder_time=time(19, 0),
        repeat=ReminderRepeat.none,
        status=ReminderStatus.notified,
        created_at=datetime(2026, 6, 9, 18, 59),
        updated_at=datetime(2026, 6, 9, 19, 0),
        notified_at=notified_at,
        alarm_message_id=10,
        alarm_count=alarm_count,
    )


def test_should_repeat_alarm_after_interval() -> None:
    service = ReminderService()
    reminder = make_notified_reminder(datetime(2026, 6, 9, 19, 0))

    assert service.should_repeat_alarm(reminder, datetime(2026, 6, 9, 19, 1, 1))


def test_should_not_repeat_alarm_before_interval() -> None:
    service = ReminderService()
    reminder = make_notified_reminder(datetime(2026, 6, 9, 19, 0))

    assert not service.should_repeat_alarm(reminder, datetime(2026, 6, 9, 19, 0, 30))


def test_should_not_repeat_alarm_at_max_count() -> None:
    service = ReminderService()
    reminder = make_notified_reminder(
        datetime(2026, 6, 9, 19, 0) - timedelta(minutes=5),
        alarm_count=service.settings.alarm_repeat_max_count,
    )

    assert not service.should_repeat_alarm(reminder, datetime(2026, 6, 9, 19, 5))