103 lines
3.2 KiB
Python
103 lines
3.2 KiB
Python
from uuid import uuid4
|
|
|
|
import pytest
|
|
from httpx import AsyncClient
|
|
|
|
from lnbits.core.crud.wallets import create_wallet, get_wallet, get_wallets
|
|
from lnbits.core.models import UpdateBalance
|
|
from lnbits.core.models.users import Account
|
|
from lnbits.core.services.users import create_user_account
|
|
from lnbits.core.views.user_api import api_users_create_user_wallet
|
|
from lnbits.settings import settings
|
|
|
|
|
|
@pytest.mark.anyio
|
|
async def test_user_api_toggle_admin_and_update_balance(
|
|
http_client: AsyncClient, superuser_token: str
|
|
):
|
|
user = await create_user_account(
|
|
Account(
|
|
id=uuid4().hex,
|
|
username=f"user_{uuid4().hex[:8]}",
|
|
email=f"user_{uuid4().hex[:8]}@lnbits.com",
|
|
)
|
|
)
|
|
wallet = user.wallets[0]
|
|
|
|
promote = await http_client.put(
|
|
f"/users/api/v1/user/{user.id}/admin",
|
|
headers={"Authorization": f"Bearer {superuser_token}"},
|
|
)
|
|
assert promote.status_code == 200
|
|
assert settings.is_admin_user(user.id) is True
|
|
|
|
demote = await http_client.put(
|
|
f"/users/api/v1/user/{user.id}/admin",
|
|
headers={"Authorization": f"Bearer {superuser_token}"},
|
|
)
|
|
assert demote.status_code == 200
|
|
assert settings.is_admin_user(user.id) is False
|
|
|
|
balance = await http_client.put(
|
|
"/users/api/v1/balance",
|
|
headers={"Authorization": f"Bearer {superuser_token}"},
|
|
json=UpdateBalance(id=wallet.id, amount=7).dict(),
|
|
)
|
|
assert balance.status_code == 200
|
|
assert balance.json()["success"] is True
|
|
|
|
updated_wallet = await get_wallet(wallet.id)
|
|
assert updated_wallet is not None
|
|
assert updated_wallet.balance == 7
|
|
|
|
|
|
@pytest.mark.anyio
|
|
async def test_user_api_get_wallets_and_delete_all_wallets(
|
|
http_client: AsyncClient, superuser_token: str
|
|
):
|
|
user = await create_user_account(
|
|
Account(
|
|
id=uuid4().hex,
|
|
username=f"user_{uuid4().hex[:8]}",
|
|
email=f"user_{uuid4().hex[:8]}@lnbits.com",
|
|
)
|
|
)
|
|
extra_wallet = await create_wallet(user_id=user.id, wallet_name="spare")
|
|
|
|
wallets = await http_client.get(
|
|
f"/users/api/v1/user/{user.id}/wallet",
|
|
headers={"Authorization": f"Bearer {superuser_token}"},
|
|
)
|
|
assert wallets.status_code == 200
|
|
wallet_ids = {wallet["id"] for wallet in wallets.json()}
|
|
assert extra_wallet.id in wallet_ids
|
|
|
|
deleted = await http_client.delete(
|
|
f"/users/api/v1/user/{user.id}/wallets",
|
|
headers={"Authorization": f"Bearer {superuser_token}"},
|
|
)
|
|
assert deleted.status_code == 200
|
|
assert deleted.json()["success"] is True
|
|
|
|
active_wallets = await get_wallets(user.id, deleted=False)
|
|
assert active_wallets == []
|
|
|
|
|
|
@pytest.mark.anyio
|
|
async def test_user_api_create_wallet_validates_currency():
|
|
user = await create_user_account(
|
|
Account(
|
|
id=uuid4().hex,
|
|
username=f"user_{uuid4().hex[:8]}",
|
|
email=f"user_{uuid4().hex[:8]}@lnbits.com",
|
|
)
|
|
)
|
|
|
|
with pytest.raises(ValueError, match="Currency 'INVALID' not allowed."):
|
|
await api_users_create_user_wallet(user.id, name="invalid", currency="INVALID")
|
|
|
|
wallet = await api_users_create_user_wallet(
|
|
user.id, name="eur wallet", currency="EUR"
|
|
)
|
|
assert wallet.currency == "EUR"
|