mirror of
https://github.com/BEDOLAGA-DEV/remnawave-bedolaga-telegram-bot.git
synced 2026-02-27 23:00:53 +00:00
Merge pull request #1399 from Fr1ngg/m7z0jw-bedolaga/fix-datetime-error-in-payment-processing
Fix WATA datetime timezone handling
This commit is contained in:
@@ -102,8 +102,11 @@ class WataService:
|
||||
|
||||
@staticmethod
|
||||
def _format_datetime(value: datetime) -> str:
|
||||
aware = value.astimezone(timezone.utc)
|
||||
return aware.replace(tzinfo=timezone.utc).isoformat().replace("+00:00", "Z")
|
||||
if value.tzinfo is None:
|
||||
aware = value.replace(tzinfo=timezone.utc)
|
||||
else:
|
||||
aware = value.astimezone(timezone.utc)
|
||||
return aware.isoformat().replace("+00:00", "Z")
|
||||
|
||||
@staticmethod
|
||||
def _parse_datetime(raw: Optional[str]) -> Optional[datetime]:
|
||||
@@ -111,7 +114,10 @@ class WataService:
|
||||
return None
|
||||
try:
|
||||
normalized = raw.replace("Z", "+00:00")
|
||||
return datetime.fromisoformat(normalized)
|
||||
parsed = datetime.fromisoformat(normalized)
|
||||
if parsed.tzinfo is None:
|
||||
return parsed
|
||||
return parsed.astimezone(timezone.utc).replace(tzinfo=None)
|
||||
except (ValueError, TypeError):
|
||||
logger.debug("Failed to parse WATA datetime: %s", raw)
|
||||
return None
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from datetime import datetime
|
||||
from datetime import datetime, timezone
|
||||
from pathlib import Path
|
||||
import sys
|
||||
from typing import Any, Dict, Optional
|
||||
@@ -16,6 +16,7 @@ if str(ROOT_DIR) not in sys.path:
|
||||
import app.services.payment_service as payment_service_module # noqa: E402
|
||||
from app.config import settings # noqa: E402
|
||||
from app.services.payment_service import PaymentService # noqa: E402
|
||||
from app.services.wata_service import WataService # noqa: E402
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
@@ -76,6 +77,22 @@ def _make_service(stub: Optional[StubWataService]) -> PaymentService:
|
||||
return service
|
||||
|
||||
|
||||
def test_wata_service_format_datetime_accepts_naive_utc() -> None:
|
||||
value = datetime(2024, 5, 20, 12, 30, 0)
|
||||
formatted = WataService._format_datetime(value)
|
||||
assert formatted == "2024-05-20T12:30:00Z"
|
||||
|
||||
|
||||
def test_wata_service_parse_datetime_returns_naive_utc() -> None:
|
||||
parsed = WataService._parse_datetime("2024-05-20T12:30:00Z")
|
||||
assert parsed == datetime(2024, 5, 20, 12, 30, 0)
|
||||
assert parsed.tzinfo is None
|
||||
|
||||
parsed_with_offset = WataService._parse_datetime("2024-05-20T15:30:00+03:00")
|
||||
assert parsed_with_offset == datetime(2024, 5, 20, 12, 30, 0)
|
||||
assert parsed_with_offset.tzinfo is None
|
||||
|
||||
|
||||
@pytest.mark.anyio("asyncio")
|
||||
async def test_create_wata_payment_success(monkeypatch: pytest.MonkeyPatch) -> None:
|
||||
response = {
|
||||
|
||||
Reference in New Issue
Block a user