mirror of
https://github.com/bohd4nx/FragmentAPI.git
synced 2026-07-25 06:14:29 +00:00
feat: update payment method options and validation across purchase and giveaway examples; add AlreadySubscribedError exception handling
This commit is contained in:
@@ -7,6 +7,8 @@ import pytest
|
||||
import pyfragment.domains.giveaways.giveaway as _giveaway_premium_mod
|
||||
import pyfragment.domains.purchases.purchase as _purchase_premium_mod
|
||||
from pyfragment import ConfigurationError, FragmentClient, PremiumGiveawayResult, PremiumResult, UserNotFoundError
|
||||
from pyfragment.core.constants.limits import PREMIUM_MONTHS_VALID, PREMIUM_WINNERS_MAX, PREMIUM_WINNERS_MIN
|
||||
from pyfragment.exceptions import AlreadySubscribedError
|
||||
from pyfragment.models.enums import PaymentMethod
|
||||
from tests.shared import FAKE_ACCOUNT, FAKE_RECIPIENT, FAKE_REQ_ID, FAKE_TRANSACTION, FAKE_TX_HASH
|
||||
|
||||
@@ -22,7 +24,7 @@ async def test_purchase_premium_invalid_months(client: FragmentClient) -> None:
|
||||
@pytest.mark.asyncio
|
||||
async def test_purchase_premium_months_zero(client: FragmentClient) -> None:
|
||||
with pytest.raises(ConfigurationError):
|
||||
await client.purchase_premium("@user", months=0)
|
||||
await client.purchase_premium("@user", months=min(PREMIUM_MONTHS_VALID) - 1)
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
@@ -85,6 +87,25 @@ async def test_purchase_premium_passes_payment_method(client: FragmentClient) ->
|
||||
assert proc_mock.await_args.kwargs["payment_method"] == "usdt_ton"
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_purchase_premium_already_subscribed_raises(client: FragmentClient) -> None:
|
||||
with (
|
||||
patch.object(
|
||||
client,
|
||||
"call",
|
||||
AsyncMock(
|
||||
side_effect=[
|
||||
{"found": {"recipient": FAKE_RECIPIENT}},
|
||||
{}, # updatePremiumState
|
||||
{"error": "This account is already subscribed to Telegram Premium."},
|
||||
]
|
||||
),
|
||||
),
|
||||
):
|
||||
with pytest.raises(AlreadySubscribedError):
|
||||
await client.purchase_premium("@user", months=6)
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
@pytest.mark.parametrize("query", ["@user", "monk", "https://t.me/monk"])
|
||||
async def test_purchase_premium_accepts_query_formats(client: FragmentClient, query: str) -> None:
|
||||
@@ -111,13 +132,13 @@ async def test_purchase_premium_user_not_found(client: FragmentClient) -> None:
|
||||
@pytest.mark.asyncio
|
||||
async def test_giveaway_premium_winners_too_low(client: FragmentClient) -> None:
|
||||
with pytest.raises(ConfigurationError):
|
||||
await client.giveaway_premium("@channel", winners=0, months=3)
|
||||
await client.giveaway_premium("@channel", winners=PREMIUM_WINNERS_MIN - 1, months=3)
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_giveaway_premium_winners_too_high(client: FragmentClient) -> None:
|
||||
with pytest.raises(ConfigurationError):
|
||||
await client.giveaway_premium("@channel", winners=24_001, months=3)
|
||||
await client.giveaway_premium("@channel", winners=PREMIUM_WINNERS_MAX + 1, months=3)
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
@@ -151,6 +172,7 @@ async def test_giveaway_premium_success(client: FragmentClient) -> None:
|
||||
side_effect=[
|
||||
{"found": {"recipient": FAKE_RECIPIENT}},
|
||||
{},
|
||||
{},
|
||||
{"req_id": FAKE_REQ_ID},
|
||||
FAKE_TRANSACTION,
|
||||
]
|
||||
@@ -174,6 +196,7 @@ async def test_giveaway_premium_passes_payment_method(client: FragmentClient) ->
|
||||
side_effect=[
|
||||
{"found": {"recipient": FAKE_RECIPIENT}},
|
||||
{},
|
||||
{},
|
||||
{"req_id": FAKE_REQ_ID},
|
||||
FAKE_TRANSACTION,
|
||||
]
|
||||
@@ -186,7 +209,7 @@ async def test_giveaway_premium_passes_payment_method(client: FragmentClient) ->
|
||||
):
|
||||
await client.giveaway_premium("@channel", winners=10, months=6, payment_method=PaymentMethod.USDT_TON)
|
||||
|
||||
init_call = call_mock.await_args_list[2]
|
||||
init_call = call_mock.await_args_list[3]
|
||||
assert init_call.args[0] == "initGiveawayPremiumRequest"
|
||||
assert init_call.args[1]["payment_method"] == "usdt_ton"
|
||||
assert proc_mock.await_args is not None
|
||||
|
||||
Reference in New Issue
Block a user