109 lines
3.3 KiB
Python
109 lines
3.3 KiB
Python
from datetime import datetime
|
|
|
|
import dateparser
|
|
import pytz
|
|
from apscheduler.job import Job
|
|
from apscheduler.jobstores.sqlalchemy import SQLAlchemyJobStore
|
|
from apscheduler.schedulers.asyncio import AsyncIOScheduler
|
|
|
|
from discord_reminder_bot.main import send_to_discord
|
|
|
|
|
|
class TestCountdown:
|
|
"""This tests everything.
|
|
|
|
This sets up sqlite database in memory, changes scheduler timezone
|
|
to Europe/Stockholm and creates job that runs January 18 2040 and one that
|
|
runs at 00:00.
|
|
"""
|
|
|
|
jobstores: dict[str, SQLAlchemyJobStore] = {"default": SQLAlchemyJobStore(url="sqlite:///:memory")}
|
|
job_defaults: dict[str, bool] = {"coalesce": True}
|
|
scheduler = AsyncIOScheduler(
|
|
jobstores=jobstores,
|
|
timezone=pytz.timezone("Europe/Stockholm"),
|
|
job_defaults=job_defaults,
|
|
)
|
|
|
|
parsed_date: datetime | None = dateparser.parse(
|
|
"18 January 2040",
|
|
settings={
|
|
"PREFER_DATES_FROM": "future",
|
|
"TO_TIMEZONE": "Europe/Stockholm",
|
|
},
|
|
)
|
|
assert parsed_date
|
|
|
|
run_date: str = parsed_date.strftime("%Y-%m-%d %H:%M:%S")
|
|
job: Job = scheduler.add_job(
|
|
send_to_discord,
|
|
run_date=run_date,
|
|
kwargs={
|
|
"channel_id": 865712621109772329,
|
|
"message": "Running PyTest",
|
|
"author_id": 126462229892694018,
|
|
},
|
|
)
|
|
|
|
timezone_date: datetime | None = dateparser.parse(
|
|
"00:00",
|
|
settings={
|
|
"PREFER_DATES_FROM": "future",
|
|
"TIMEZONE": "Europe/Stockholm",
|
|
"TO_TIMEZONE": "Europe/Stockholm",
|
|
},
|
|
)
|
|
|
|
assert timezone_date
|
|
timezone_run_date: str = timezone_date.strftime("%Y-%m-%d %H:%M:%S")
|
|
timezone_job: Job = scheduler.add_job(
|
|
send_to_discord,
|
|
run_date=timezone_run_date,
|
|
kwargs={
|
|
"channel_id": 865712621109772329,
|
|
"message": "Running PyTest at 00:00",
|
|
"author_id": 126462229892694018,
|
|
},
|
|
)
|
|
|
|
timezone_date2: datetime | None = dateparser.parse(
|
|
"13:37",
|
|
settings={
|
|
"PREFER_DATES_FROM": "future",
|
|
"TIMEZONE": "Europe/Stockholm",
|
|
"TO_TIMEZONE": "Europe/Stockholm",
|
|
},
|
|
)
|
|
|
|
assert timezone_date2
|
|
timezone_run_date2: str = timezone_date2.strftime("%Y-%m-%d %H:%M:%S")
|
|
timezone_job2: Job = scheduler.add_job(
|
|
send_to_discord,
|
|
run_date=timezone_run_date2,
|
|
kwargs={
|
|
"channel_id": 865712621109772329,
|
|
"message": "Running PyTest at 13:37",
|
|
"author_id": 126462229892694018,
|
|
},
|
|
)
|
|
|
|
def test_if_timezones_are_working(self) -> None: # noqa: ANN101
|
|
"""Check if timezones are working.
|
|
|
|
Args:
|
|
self: TestCountdown
|
|
"""
|
|
time_job: Job | None = self.scheduler.get_job(self.timezone_job.id)
|
|
assert time_job
|
|
|
|
assert time_job.trigger.run_date.hour == 0
|
|
assert time_job.trigger.run_date.minute == 0
|
|
assert time_job.trigger.run_date.second == 0
|
|
|
|
time_job2: Job | None = self.scheduler.get_job(self.timezone_job2.id)
|
|
assert time_job2
|
|
|
|
assert time_job2.trigger.run_date.hour == 13 # noqa: PLR2004
|
|
assert time_job2.trigger.run_date.minute == 37 # noqa: PLR2004
|
|
assert time_job2.trigger.run_date.second == 0
|