Files
remnawave-bedolaga-telegram…/tests/services/test_payment_service_tribute.py
2025-10-21 10:59:19 +03:00

81 lines
2.4 KiB
Python

"""Тесты Tribute-платежей PaymentService."""
from pathlib import Path
import sys
import hmac
import hashlib
import pytest
ROOT_DIR = Path(__file__).resolve().parents[2]
if str(ROOT_DIR) not in sys.path:
sys.path.insert(0, str(ROOT_DIR))
from app.services.payment_service import PaymentService # noqa: E402
from app.config import settings # noqa: E402
@pytest.fixture
def anyio_backend() -> str:
return "asyncio"
def _make_service() -> PaymentService:
service = PaymentService.__new__(PaymentService) # type: ignore[call-arg]
service.bot = None
service.yookassa_service = None
service.mulenpay_service = None
service.pal24_service = None
service.cryptobot_service = None
service.stars_service = None
service.heleket_service = None
return service
@pytest.mark.anyio("asyncio")
async def test_create_tribute_payment_requires_enabled(monkeypatch: pytest.MonkeyPatch) -> None:
service = _make_service()
monkeypatch.setattr(settings, "TRIBUTE_ENABLED", False, raising=False)
with pytest.raises(ValueError):
await service.create_tribute_payment(1000, 1, "Пополнение")
@pytest.mark.anyio("asyncio")
async def test_create_tribute_payment_success(monkeypatch: pytest.MonkeyPatch) -> None:
service = _make_service()
monkeypatch.setattr(settings, "TRIBUTE_ENABLED", True, raising=False)
monkeypatch.setattr(settings, "WEBHOOK_URL", "https://example.com", raising=False)
result = await service.create_tribute_payment(
amount_kopeks=15000,
user_id=5,
description="Оплата подписки",
)
assert "https://tribute.ru/pay" in result
assert "amount=15000" in result
assert "user=5" in result
def test_verify_tribute_webhook_signature(monkeypatch: pytest.MonkeyPatch) -> None:
service = _make_service()
monkeypatch.setattr(settings, "TRIBUTE_API_KEY", "secret", raising=False)
payload = {"payment": "ok"}
signature = hmac.new(
b"secret",
str(payload).encode(),
hashlib.sha256,
).hexdigest()
assert service.verify_tribute_webhook(payload, signature) is True
assert service.verify_tribute_webhook(payload, "invalid") is False
def test_verify_tribute_webhook_returns_false_without_key(monkeypatch: pytest.MonkeyPatch) -> None:
service = _make_service()
monkeypatch.setattr(settings, "TRIBUTE_API_KEY", "", raising=False)
assert service.verify_tribute_webhook({}, "signature") is False