HomeDashboard/.venv/lib/python3.12/site-packages/nicegui/testing/user_plugin.py
2026-01-03 14:54:18 +01:00

45 lines
1.5 KiB
Python

from collections.abc import AsyncGenerator
from typing import Callable
import httpx
import pytest
from nicegui import core, ui
from nicegui.functions.download import download
from nicegui.functions.navigate import Navigate
from nicegui.functions.notify import notify
from .general_fixtures import ( # noqa: F401 # pylint: disable=unused-import
get_path_to_main_file,
pytest_addoption,
pytest_configure,
)
from .user import User
from .user_simulation import prepare_simulation, user_simulation
# pylint: disable=redefined-outer-name
@pytest.fixture
async def user(caplog: pytest.LogCaptureFixture, request: pytest.FixtureRequest) -> AsyncGenerator[User, None]:
"""Create a new user fixture."""
async with user_simulation(main_file=get_path_to_main_file(request)) as user:
yield user
logs = [record for record in caplog.get_records('call') if record.levelname == 'ERROR']
if logs:
pytest.fail('There were unexpected ERROR logs.', pytrace=False)
@pytest.fixture
async def create_user(user: User) -> AsyncGenerator[Callable[[], User], None]: # pylint: disable=unused-argument
"""Create a fixture for building new users."""
prepare_simulation()
try:
async with core.app.router.lifespan_context(core.app):
yield lambda: User(httpx.AsyncClient(transport=httpx.ASGITransport(core.app), base_url='http://test'))
finally:
ui.navigate = Navigate()
ui.notify = notify
ui.download = download