diff --git a/lnbits/core/crud/users.py b/lnbits/core/crud/users.py index 0620c2a1..df3ef97f 100644 --- a/lnbits/core/crud/users.py +++ b/lnbits/core/crud/users.py @@ -4,7 +4,7 @@ from typing import Any from uuid import uuid4 from lnbits.core.crud.extensions import get_user_active_extensions_ids -from lnbits.core.crud.wallets import get_wallets +from lnbits.core.crud.wallets import create_wallet, get_wallets from lnbits.core.db import db from lnbits.core.models import UserAcls from lnbits.db import Connection, Filters, Page @@ -180,8 +180,13 @@ async def get_user(user_id: str, conn: Connection | None = None) -> User | None: async def get_user_from_account( account: Account, conn: Connection | None = None ) -> User | None: - extensions = await get_user_active_extensions_ids(account.id, conn) - wallets = await get_wallets(account.id, False, conn=conn) + extensions = await get_user_active_extensions_ids(account.id, conn=conn) + wallets = await get_wallets(account.id, deleted=False, conn=conn) + + if len(wallets) == 0: + wallet = await create_wallet(user_id=account.id, conn=conn) + wallets.append(wallet) + return User( id=account.id, email=account.email, diff --git a/tests/unit/test_crud_users.py b/tests/unit/test_crud_users.py new file mode 100644 index 00000000..6427ce61 --- /dev/null +++ b/tests/unit/test_crud_users.py @@ -0,0 +1,38 @@ +from uuid import uuid4 + +import pytest + +from lnbits.core.crud.users import get_user_from_account +from lnbits.core.crud.wallets import delete_wallet, get_wallets +from lnbits.core.models.users import Account +from lnbits.core.services.users import create_user_account + + +@pytest.mark.anyio +async def test_get_user_from_account_is_wallet_created(): + + username = f"user_{uuid4().hex[:8]}" + account = Account( + id=uuid4().hex, + username=username, + email=f"{username}@lnbits.com", + ) + account.hash_password("secret1234") + user = await create_user_account(account) + + assert user is not None + assert ( + len(user.wallets) == 1 + ), "A wallet should be created for the user if none exist" + + await delete_wallet(user_id=account.id, wallet_id=user.wallets[0].id) + + wallets = await get_wallets(account.id, deleted=False) + assert len(wallets) == 0, "User should have no wallets after deletion" + + user = await get_user_from_account(account) + + assert user is not None + assert ( + len(user.wallets) == 1 + ), "A new wallet should be created for the user if none exist after deletion"