mirror of
https://github.com/bohd4nx/FragmentAPI.git
synced 2026-07-25 14:24:31 +00:00
145 lines
4.7 KiB
Python
145 lines
4.7 KiB
Python
"""Validate FragmentClient setup, cookie parsing, and wallet version checks."""
|
|
|
|
import json
|
|
|
|
import pytest
|
|
|
|
from pyfragment import ConfigurationError, CookieError, FragmentClient
|
|
from pyfragment.core.constants import MNEMONIC_WORD_COUNTS_VALID
|
|
from tests.shared import VALID_API_KEY, VALID_COOKIES, VALID_SEED
|
|
|
|
# Client init tests
|
|
|
|
|
|
def test_valid_init() -> None:
|
|
client = FragmentClient(seed=VALID_SEED, api_key=VALID_API_KEY, cookies=VALID_COOKIES)
|
|
assert client.seed == VALID_SEED.strip()
|
|
assert client.api_key == VALID_API_KEY
|
|
assert client.wallet_version == "V5R1"
|
|
assert client.api_provider == "tonapi"
|
|
|
|
|
|
# API provider tests
|
|
|
|
|
|
def test_api_provider_default_is_tonapi() -> None:
|
|
client = FragmentClient(seed=VALID_SEED, api_key=VALID_API_KEY, cookies=VALID_COOKIES)
|
|
assert client.api_provider == "tonapi"
|
|
|
|
|
|
def test_api_provider_toncenter() -> None:
|
|
client = FragmentClient(seed=VALID_SEED, api_key=VALID_API_KEY, cookies=VALID_COOKIES, api_provider="toncenter")
|
|
assert client.api_provider == "toncenter"
|
|
|
|
|
|
def test_api_provider_is_case_insensitive() -> None:
|
|
client = FragmentClient(seed=VALID_SEED, api_key=VALID_API_KEY, cookies=VALID_COOKIES, api_provider="TONAPI")
|
|
assert client.api_provider == "tonapi"
|
|
|
|
|
|
def test_unsupported_api_provider_raises() -> None:
|
|
with pytest.raises(ConfigurationError):
|
|
FragmentClient(seed=VALID_SEED, api_key=VALID_API_KEY, cookies=VALID_COOKIES, api_provider="infura")
|
|
|
|
|
|
# Wallet version tests
|
|
|
|
|
|
def test_wallet_version_v4r2() -> None:
|
|
client = FragmentClient(seed=VALID_SEED, api_key=VALID_API_KEY, cookies=VALID_COOKIES, wallet_version="V4R2")
|
|
assert client.wallet_version == "V4R2"
|
|
|
|
|
|
def test_wallet_version_is_case_insensitive() -> None:
|
|
client = FragmentClient(seed=VALID_SEED, api_key=VALID_API_KEY, cookies=VALID_COOKIES, wallet_version="v5r1")
|
|
assert client.wallet_version == "V5R1"
|
|
|
|
|
|
def test_unsupported_wallet_version_raises() -> None:
|
|
with pytest.raises(ConfigurationError):
|
|
FragmentClient(seed=VALID_SEED, api_key=VALID_API_KEY, cookies=VALID_COOKIES, wallet_version="V3R2")
|
|
|
|
|
|
# Seed and mnemonic validation tests
|
|
|
|
|
|
def test_missing_seed_raises() -> None:
|
|
with pytest.raises(ConfigurationError):
|
|
FragmentClient(seed="", api_key=VALID_API_KEY, cookies=VALID_COOKIES)
|
|
|
|
|
|
def test_both_seed_and_api_key_missing_raises() -> None:
|
|
with pytest.raises(ConfigurationError):
|
|
FragmentClient(seed="", api_key="", cookies=VALID_COOKIES)
|
|
|
|
|
|
def test_whitespace_only_seed_raises() -> None:
|
|
with pytest.raises(ConfigurationError):
|
|
FragmentClient(seed=" ", api_key=VALID_API_KEY, cookies=VALID_COOKIES)
|
|
|
|
|
|
def test_invalid_mnemonic_length_raises() -> None:
|
|
bad_seed = " ".join(["word"] * 23)
|
|
with pytest.raises(ConfigurationError):
|
|
FragmentClient(seed=bad_seed, api_key=VALID_API_KEY, cookies=VALID_COOKIES)
|
|
|
|
|
|
def test_valid_mnemonic_lengths() -> None:
|
|
for length in sorted(MNEMONIC_WORD_COUNTS_VALID):
|
|
seed = " ".join(["abandon"] * (length - 1) + ["about"])
|
|
client = FragmentClient(seed=seed, api_key=VALID_API_KEY, cookies=VALID_COOKIES)
|
|
assert len(client.seed.split()) == length
|
|
|
|
|
|
# API key validation tests
|
|
|
|
|
|
def test_missing_api_key_raises() -> None:
|
|
with pytest.raises(ConfigurationError):
|
|
FragmentClient(seed=VALID_SEED, api_key="", cookies=VALID_COOKIES)
|
|
|
|
|
|
# Cookie validation tests
|
|
|
|
|
|
def test_cookies_as_json_string() -> None:
|
|
client = FragmentClient(seed=VALID_SEED, api_key=VALID_API_KEY, cookies=json.dumps(VALID_COOKIES))
|
|
assert client.cookies == VALID_COOKIES
|
|
|
|
|
|
def test_invalid_cookies_json_raises() -> None:
|
|
with pytest.raises(CookieError):
|
|
FragmentClient(seed=VALID_SEED, api_key=VALID_API_KEY, cookies="{not valid json}")
|
|
|
|
|
|
def test_missing_cookie_key_raises() -> None:
|
|
with pytest.raises(CookieError):
|
|
FragmentClient(seed=VALID_SEED, api_key=VALID_API_KEY, cookies={"stel_ssid": "x"})
|
|
|
|
|
|
def test_empty_cookie_value_raises() -> None:
|
|
bad = {**VALID_COOKIES, "stel_token": ""}
|
|
with pytest.raises(CookieError):
|
|
FragmentClient(seed=VALID_SEED, api_key=VALID_API_KEY, cookies=bad)
|
|
|
|
|
|
def test_whitespace_cookie_value_raises() -> None:
|
|
bad = {**VALID_COOKIES, "stel_ton_token": " "}
|
|
with pytest.raises(CookieError):
|
|
FragmentClient(seed=VALID_SEED, api_key=VALID_API_KEY, cookies=bad)
|
|
|
|
|
|
def test_repr() -> None:
|
|
client = FragmentClient(seed=VALID_SEED, api_key=VALID_API_KEY, cookies=VALID_COOKIES)
|
|
r = repr(client)
|
|
assert "FragmentClient" in r
|
|
assert "V5R1" in r
|
|
assert "tonapi" in r
|
|
assert "4 keys" in r
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_async_context_manager() -> None:
|
|
async with FragmentClient(seed=VALID_SEED, api_key=VALID_API_KEY, cookies=VALID_COOKIES) as client:
|
|
assert isinstance(client, FragmentClient)
|