[fix] user sorting performance (#3561)
This commit is contained in:
parent
148ba9d275
commit
d55e2a0e1f
10 changed files with 164 additions and 39 deletions
|
|
@ -1,10 +1,12 @@
|
|||
from typing import Any
|
||||
from uuid import uuid4
|
||||
|
||||
import pytest
|
||||
import shortuuid
|
||||
from httpx import AsyncClient
|
||||
|
||||
from lnbits.core.models.users import User
|
||||
from lnbits.core.models.users import Account, User
|
||||
from lnbits.core.services.users import create_user_account
|
||||
from lnbits.settings import Settings
|
||||
from lnbits.utils.nostr import generate_keypair, hex_to_npub
|
||||
|
||||
|
|
@ -465,3 +467,46 @@ async def test_create_user_invalid_npub(
|
|||
headers={"Authorization": f"Bearer {superuser_token}"},
|
||||
)
|
||||
assert create_resp.status_code == 400
|
||||
|
||||
|
||||
@pytest.mark.anyio
|
||||
async def test_search_users(http_client: AsyncClient, superuser_token):
|
||||
namespace_id = shortuuid.uuid()[:8]
|
||||
users = []
|
||||
user_count = 15
|
||||
for index in range(user_count):
|
||||
username = f"u_{namespace_id}_{index:03d}"
|
||||
user = await create_user_account(
|
||||
Account(
|
||||
id=uuid4().hex,
|
||||
username=username,
|
||||
email=f"{username}@lnbits.com",
|
||||
pubkey="",
|
||||
external_id=None,
|
||||
)
|
||||
)
|
||||
users.append(user)
|
||||
|
||||
create_resp = await http_client.get(
|
||||
"/users/api/v1/user?sortby=id&direction=desc",
|
||||
headers={"Authorization": f"Bearer {superuser_token}"},
|
||||
)
|
||||
assert create_resp.status_code == 200
|
||||
create_resp = await http_client.get(
|
||||
"/users/api/v1/user"
|
||||
f"?sortby=username&direction=desc&username[like]=u_{namespace_id}",
|
||||
headers={"Authorization": f"Bearer {superuser_token}"},
|
||||
)
|
||||
assert create_resp.status_code == 200
|
||||
data = create_resp.json()
|
||||
assert data["total"] == user_count
|
||||
assert data["data"][0]["username"] == users[user_count - 1].username
|
||||
|
||||
create_resp = await http_client.get(
|
||||
"/users/api/v1/user" f"?sortby=username&direction=desc&id={users[0].id}",
|
||||
headers={"Authorization": f"Bearer {superuser_token}"},
|
||||
)
|
||||
assert create_resp.status_code == 200
|
||||
data = create_resp.json()
|
||||
assert data["total"] == 1
|
||||
assert data["data"][0]["username"] == users[0].username
|
||||
|
|
|
|||
|
|
@ -36,37 +36,42 @@ async def test_crud_get_payments(app):
|
|||
await update_wallet_balance(wallet, -10)
|
||||
wallet.balance_msat += -10 * 1000
|
||||
|
||||
payments = await get_payments(wallet_id=wallet.id)
|
||||
filters = Filters(limit=100)
|
||||
payments = await get_payments(wallet_id=wallet.id, filters=filters)
|
||||
assert len(payments) == 22, "should return 22 successful payments"
|
||||
|
||||
payments = await get_payments(wallet_id=wallet.id, incoming=True)
|
||||
payments = await get_payments(wallet_id=wallet.id, incoming=True, filters=filters)
|
||||
assert len(payments) == 11, "should return 11 successful incoming payments"
|
||||
await update_payments(payments)
|
||||
|
||||
payments = await get_payments(wallet_id=wallet.id, outgoing=True)
|
||||
payments = await get_payments(wallet_id=wallet.id, outgoing=True, filters=filters)
|
||||
assert len(payments) == 11, "should return 11 successful outgoing payments"
|
||||
await update_payments(payments)
|
||||
|
||||
payments = await get_payments(wallet_id=wallet.id, pending=True)
|
||||
payments = await get_payments(wallet_id=wallet.id, pending=True, filters=filters)
|
||||
assert len(payments) == 4, "should return 4 pending payments"
|
||||
|
||||
# function signature should have Optional[bool] for complete and pending to make
|
||||
# this distinction possible
|
||||
payments = await get_payments(wallet_id=wallet.id, pending=False)
|
||||
payments = await get_payments(wallet_id=wallet.id, pending=False, filters=filters)
|
||||
assert len(payments) == 22, "should return all payments"
|
||||
|
||||
payments = await get_payments(wallet_id=wallet.id, complete=True, pending=True)
|
||||
payments = await get_payments(
|
||||
wallet_id=wallet.id, complete=True, pending=True, filters=filters
|
||||
)
|
||||
assert len(payments) == 20, "should return 4 pending and 16 complete payments"
|
||||
|
||||
payments = await get_payments(wallet_id=wallet.id, complete=True, outgoing=True)
|
||||
payments = await get_payments(
|
||||
wallet_id=wallet.id, complete=True, outgoing=True, filters=filters
|
||||
)
|
||||
assert (
|
||||
len(payments) == 10
|
||||
), "should return 8 complete outgoing payments and 2 pending outgoing payments"
|
||||
|
||||
payments = await get_payments(wallet_id=wallet.id)
|
||||
payments = await get_payments(wallet_id=wallet.id, filters=filters)
|
||||
assert len(payments) == 22, "should return all payments"
|
||||
|
||||
payments = await get_payments(wallet_id=wallet.id, complete=True)
|
||||
payments = await get_payments(wallet_id=wallet.id, complete=True, filters=filters)
|
||||
assert (
|
||||
len(payments) == 18
|
||||
), "should return 14 successful payment and 4 pending payments"
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ from lnbits.core.crud.wallets import (
|
|||
get_wallets,
|
||||
update_wallet,
|
||||
)
|
||||
from lnbits.core.models.payments import PaymentFilters
|
||||
from lnbits.core.models.users import User
|
||||
from lnbits.core.models.wallets import (
|
||||
Wallet,
|
||||
|
|
@ -29,6 +30,7 @@ from lnbits.core.services.wallets import (
|
|||
reject_wallet_invitation,
|
||||
update_wallet_share_permissions,
|
||||
)
|
||||
from lnbits.db import Filters
|
||||
from lnbits.exceptions import InvoiceError, PaymentError
|
||||
from tests.conftest import new_user
|
||||
|
||||
|
|
@ -563,7 +565,10 @@ async def test_shared_wallet_view_permissions(from_wallet: Wallet):
|
|||
await pay_invoice(wallet_id=from_wallet.id, payment_request=payment.bolt11)
|
||||
wallet_balance += payment.sat
|
||||
|
||||
shared_wallet_payments = await get_payments(wallet_id=mirror_wallet.id)
|
||||
filters = Filters(limit=100, model=PaymentFilters)
|
||||
shared_wallet_payments = await get_payments(
|
||||
wallet_id=mirror_wallet.id, filters=filters
|
||||
)
|
||||
assert len(shared_wallet_payments) == payment_count
|
||||
mirror_wallet = await get_wallet(mirror_wallet.id)
|
||||
assert mirror_wallet is not None
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue