Implemented the full clean rewrite for Gitea
All checks were successful
Test blackout notifier / test (push) Successful in 3m41s
Hourly blackout check / check (push) Successful in 8s

This commit is contained in:
Meghdad
2026-07-17 04:33:16 +03:30
parent d7f53ba234
commit 4218e4ac36
30 changed files with 1437 additions and 384 deletions

57
tests/test_models.py Normal file
View File

@@ -0,0 +1,57 @@
from __future__ import annotations
from datetime import datetime, timedelta
import pytest
from blackout_notifier.models import TEHRAN, Outage, OutageDataError, jalali_query_window
def test_jalali_query_window_uses_tehran_date() -> None:
utc_near_midnight = datetime.fromisoformat("2026-07-16T20:31:00+00:00")
assert jalali_query_window(utc_near_midnight, 5) == ("1405/04/26", "1405/04/31")
def test_outage_parses_api_payload() -> None:
outage = Outage.from_api(
{
"outage_number": 404992999001,
"outage_date": "1405/04/27",
"outage_start_time": "09:00",
"outage_stop_time": "11:00",
"outage_address": " فیدر آزمایشی ",
"reason_outage": "مدیریت بار",
"is_planned": True,
}
)
assert outage.outage_number == "404992999001"
assert outage.address == "فیدر آزمایشی"
assert outage.start_datetime() == datetime(2026, 7, 18, 9, 0, tzinfo=TEHRAN)
def test_outage_supports_cross_midnight_window() -> None:
outage = Outage(
outage_number="1",
outage_date="1405/04/27",
start_time="23:00",
stop_time="01:00",
address="",
reason="",
is_planned=True,
)
assert outage.stop_datetime() - outage.start_datetime() == timedelta(hours=2)
def test_outage_rejects_invalid_date() -> None:
with pytest.raises(OutageDataError, match="invalid Jalali"):
Outage.from_api(
{
"outage_number": "1",
"outage_date": "not-a-date",
"outage_start_time": "09:00",
"outage_stop_time": "11:00",
}
)