mirror of
https://github.com/bohd4nx/FragmentAPI.git
synced 2026-07-25 14:24:31 +00:00
ebd45d2991
- Implement tests for Stars methods: purchase_stars and giveaway_stars, including validation and success scenarios. - Add tests for Premium methods: purchase_premium and giveaway_premium, covering validation and success cases. - Create tests for topup_ton functionality, validating input and mocking successful operations. - Introduce wallet tests to verify get_wallet() functionality, ensuring correct wallet info retrieval. - Add tests for FragmentClient.call() method, validating API response handling and data merging. - Implement tests for anonymous number methods, including login codes and session management. - Create recharge_ads tests for self-service Telegram Ads recharge, validating input and success scenarios. - Add username search tests for the Fragment marketplace, ensuring correct result parsing and parameter forwarding. - Implement number search tests for the Fragment marketplace, validating result parsing and parameter handling. - Create gift search tests for the Fragment gifts marketplace, ensuring correct result parsing and parameter forwarding. - Add cookie extraction tests for get_cookies_from_browser(), validating successful extraction and error handling.
123 lines
4.2 KiB
Python
123 lines
4.2 KiB
Python
"""Unit tests for Premium methods — purchase_premium and giveaway_premium."""
|
|
|
|
from unittest.mock import AsyncMock, patch
|
|
|
|
import pytest
|
|
|
|
from pyfragment import FragmentClient
|
|
from pyfragment.types import ConfigurationError, PremiumGiveawayResult, PremiumResult, UserNotFoundError
|
|
from tests.shared import FAKE_ACCOUNT, FAKE_RECIPIENT, FAKE_REQ_ID, FAKE_TRANSACTION, FAKE_TX_HASH
|
|
|
|
# Premium purchase validation tests
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_purchase_premium_invalid_months(client: FragmentClient) -> None:
|
|
with pytest.raises(ConfigurationError):
|
|
await client.purchase_premium("@user", months=5)
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_purchase_premium_months_zero(client: FragmentClient) -> None:
|
|
with pytest.raises(ConfigurationError):
|
|
await client.purchase_premium("@user", months=0)
|
|
|
|
|
|
# Premium purchase mocked tests
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_purchase_premium_success(client: FragmentClient) -> None:
|
|
with (
|
|
patch.object(
|
|
client,
|
|
"call",
|
|
AsyncMock(
|
|
side_effect=[
|
|
{"found": {"recipient": FAKE_RECIPIENT}},
|
|
{}, # updatePremiumState
|
|
{"req_id": FAKE_REQ_ID},
|
|
FAKE_TRANSACTION,
|
|
]
|
|
),
|
|
),
|
|
patch("pyfragment.methods.purchase_premium.get_account_info", AsyncMock(return_value=FAKE_ACCOUNT)),
|
|
patch("pyfragment.methods.purchase_premium.process_transaction", AsyncMock(return_value=FAKE_TX_HASH)),
|
|
):
|
|
result = await client.purchase_premium("@user", months=3)
|
|
|
|
assert isinstance(result, PremiumResult)
|
|
assert result.transaction_id == FAKE_TX_HASH
|
|
assert result.username == "@user"
|
|
assert result.amount == 3
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_purchase_premium_user_not_found(client: FragmentClient) -> None:
|
|
with patch.object(client, "call", AsyncMock(return_value={"found": {}})):
|
|
with pytest.raises(UserNotFoundError):
|
|
await client.purchase_premium("@ghost", months=3)
|
|
|
|
|
|
# Premium giveaway validation tests
|
|
|
|
|
|
@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)
|
|
|
|
|
|
@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)
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_giveaway_premium_float_winners(client: FragmentClient) -> None:
|
|
with pytest.raises(ConfigurationError):
|
|
await client.giveaway_premium("@channel", winners=2.5, months=3) # type: ignore[arg-type]
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_giveaway_premium_invalid_months(client: FragmentClient) -> None:
|
|
with pytest.raises(ConfigurationError):
|
|
await client.giveaway_premium("@channel", winners=10, months=5)
|
|
|
|
|
|
# Premium giveaway mocked tests
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_giveaway_premium_success(client: FragmentClient) -> None:
|
|
with (
|
|
patch.object(
|
|
client,
|
|
"call",
|
|
AsyncMock(
|
|
side_effect=[
|
|
{"found": {"recipient": FAKE_RECIPIENT}},
|
|
{"req_id": FAKE_REQ_ID},
|
|
FAKE_TRANSACTION,
|
|
]
|
|
),
|
|
),
|
|
patch("pyfragment.methods.giveaway_premium.get_account_info", AsyncMock(return_value=FAKE_ACCOUNT)),
|
|
patch("pyfragment.methods.giveaway_premium.process_transaction", AsyncMock(return_value=FAKE_TX_HASH)),
|
|
):
|
|
result = await client.giveaway_premium("@channel", winners=10, months=3)
|
|
|
|
assert isinstance(result, PremiumGiveawayResult)
|
|
assert result.transaction_id == FAKE_TX_HASH
|
|
assert result.channel == "@channel"
|
|
assert result.winners == 10
|
|
assert result.amount == 3
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_giveaway_premium_channel_not_found(client: FragmentClient) -> None:
|
|
with patch.object(client, "call", AsyncMock(return_value={"found": {}})):
|
|
with pytest.raises(UserNotFoundError):
|
|
await client.giveaway_premium("@ghost", winners=1, months=3)
|