feat: enhance message handling with content pattern matching and update environment configuration
This commit is contained in:
@@ -23,3 +23,101 @@ def test_get_next_scheduled_event():
|
||||
nxt = main.get_next_scheduled_event(now)
|
||||
assert nxt["type"] == "reminder"
|
||||
assert nxt["at"].hour == 11 and nxt["at"].minute == 15
|
||||
|
||||
|
||||
def test_schedule_startup_test_cleanup_when_sent(monkeypatch):
|
||||
captured: dict[str, object] = {}
|
||||
delete_calls: list[tuple[int, str | None]] = []
|
||||
|
||||
class FakeEvery:
|
||||
@property
|
||||
def minutes(self):
|
||||
return self
|
||||
|
||||
def do(self, fn, *args, **kwargs):
|
||||
captured["job"] = lambda: fn(*args, **kwargs)
|
||||
return object()
|
||||
|
||||
monkeypatch.setattr(main.schedule, "every", lambda n: FakeEvery())
|
||||
monkeypatch.setattr(
|
||||
main,
|
||||
"delete_old_messages",
|
||||
lambda minutes, content_pattern=None: delete_calls.append(
|
||||
(minutes, content_pattern)),
|
||||
)
|
||||
|
||||
main._schedule_startup_test_cleanup(True)
|
||||
|
||||
assert "job" in captured
|
||||
result = captured["job"]()
|
||||
assert result == main.schedule.CancelJob
|
||||
assert delete_calls == [(1, main.TEST_MESSAGE_DELETE_PATTERN)]
|
||||
|
||||
|
||||
def test_schedule_startup_test_cleanup_skips_when_not_sent(monkeypatch):
|
||||
called = {"value": False}
|
||||
|
||||
class FakeEvery:
|
||||
@property
|
||||
def minutes(self):
|
||||
return self
|
||||
|
||||
def do(self, fn, *args, **kwargs):
|
||||
called["value"] = True
|
||||
return object()
|
||||
|
||||
monkeypatch.setattr(main.schedule, "every", lambda n: FakeEvery())
|
||||
|
||||
main._schedule_startup_test_cleanup(False)
|
||||
|
||||
assert called["value"] is False
|
||||
|
||||
|
||||
def test_main_sends_startup_test_and_deletes_it(monkeypatch):
|
||||
send_calls: list[str] = []
|
||||
delete_calls: list[tuple[int, str | None]] = []
|
||||
scheduled_jobs: dict[int, list[object]] = {1: [], 5: []}
|
||||
|
||||
monkeypatch.setattr(main, "start_dashboard", lambda: None)
|
||||
monkeypatch.setattr(main, "schedule_notification",
|
||||
lambda interval, at, type: None)
|
||||
|
||||
class FakeEvery:
|
||||
def __init__(self, minutes_value: int):
|
||||
self.minutes_value = minutes_value
|
||||
|
||||
@property
|
||||
def minutes(self):
|
||||
return self
|
||||
|
||||
def do(self, fn, *args, **kwargs):
|
||||
scheduled_jobs.setdefault(self.minutes_value, []).append(
|
||||
lambda: fn(*args, **kwargs)
|
||||
)
|
||||
return object()
|
||||
|
||||
monkeypatch.setattr(main.schedule, "every", lambda n: FakeEvery(n))
|
||||
|
||||
def fake_send_notification(message: str) -> bool:
|
||||
send_calls.append(message)
|
||||
return True
|
||||
|
||||
def fake_delete_old_messages(minutes: int = 6, content_pattern: str | None = None):
|
||||
delete_calls.append((minutes, content_pattern))
|
||||
|
||||
def fake_run_pending():
|
||||
for job in scheduled_jobs.get(1, []):
|
||||
job()
|
||||
raise KeyboardInterrupt()
|
||||
|
||||
monkeypatch.setattr(main, "send_notification", fake_send_notification)
|
||||
monkeypatch.setattr(main, "delete_old_messages", fake_delete_old_messages)
|
||||
monkeypatch.setattr(main.schedule, "run_pending", fake_run_pending)
|
||||
monkeypatch.setattr(main.time, "sleep", lambda s: None)
|
||||
monkeypatch.setenv("DISCORD_WEBHOOK_URL", "http://example.com/webhook")
|
||||
main.WEBHOOK_URL = "http://example.com/webhook"
|
||||
|
||||
main.main()
|
||||
|
||||
assert send_calls == ["test"]
|
||||
assert delete_calls == [(1, main.TEST_MESSAGE_DELETE_PATTERN)]
|
||||
|
||||
Reference in New Issue
Block a user