Replace subprocess calls to wg genkey/pubkey with cryptography library's X25519PrivateKey. This eliminates the wg CLI dependency for key generation, fixes device creation on machines without wireguard-tools, and removes the event loop blocking that caused WebSocket disconnects during device creation. Also fix E2E test teardown to use a fresh engine for cleanup, avoiding cross-event-loop issues with asyncpg connection pools.
45 lines
1.5 KiB
Python
45 lines
1.5 KiB
Python
"""End-to-end tests for device management UI using NiceGUI's User fixture."""
|
|
|
|
import pytest
|
|
from nicegui.testing import User
|
|
|
|
from wiregui.models.user import User as UserModel
|
|
from tests.e2e.conftest import TEST_EMAIL, TEST_PASSWORD
|
|
|
|
|
|
async def _login(user: User):
|
|
"""Helper to log in via the UI."""
|
|
await user.open("/login")
|
|
user.find("Email").type(TEST_EMAIL)
|
|
user.find("Password").type(TEST_PASSWORD)
|
|
user.find("Sign in").click()
|
|
await user.should_see("My Devices")
|
|
|
|
|
|
@pytest.mark.parametrize("user", [{"storage": {}}], indirect=True)
|
|
async def test_add_device_via_ui(user: User, test_user: UserModel):
|
|
"""Test the full flow: login → devices → add device → see it in table."""
|
|
await _login(user)
|
|
|
|
# Open create dialog
|
|
user.find("Add Device").click()
|
|
await user.should_see("New Device")
|
|
|
|
# Fill device name and submit
|
|
user.find("Device Name").type("Test Laptop")
|
|
user.find("Create").click()
|
|
|
|
# Should see config dialog with the device config
|
|
await user.should_see("Test Laptop")
|
|
|
|
|
|
@pytest.mark.parametrize("user", [{"storage": {}}], indirect=True)
|
|
async def test_add_device_requires_name(user: User, test_user: UserModel):
|
|
"""Test that creating a device without a name shows an error."""
|
|
await _login(user)
|
|
|
|
# Open create dialog and submit without name
|
|
user.find("Add Device").click()
|
|
await user.should_see("New Device")
|
|
user.find("Create").click()
|
|
await user.should_see("Device name is required")
|