58 lines
1.7 KiB
Python
58 lines
1.7 KiB
Python
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",
|
|
}
|
|
)
|