Tests (198 unit + 70 e2e = 268 total): - Add test_api_deps.py: Bearer token auth, get_current_api_user, require_admin - Add test_wireguard_extended.py: ensure_interface, set_private_key, set_listen_port - Add test_firewall_extended.py: _nft/_nft_batch errors, jump rules, policies - Add test_mfa_login.py: MFA redirect, TOTP verify, invalid code, cancel - Add test_magic_link_page.py: page render, submit, empty email, back to login - Add test_admin_devices.py: list, filter, create, edit, delete, config dialog - Add test_admin_rules.py: list, create, edit, delete (all DB-verified) - Add test_admin_settings.py: defaults, security, OIDC/SAML providers - Add test_saml_login.py: button visible, redirect, metadata, full login flow Bug fixes: - Fix SAML callback to use /auth/complete bridge (same fix as OIDC) - Fix missing get_settings import in admin settings page - Add SAML provider buttons to login page - Make SAML strict mode configurable per-provider Infrastructure: - Add mock SimpleSAMLphp IdP to compose.yml with SP config - Add mock-saml service to CI workflows (release + dev)
41 lines
No EOL
2 KiB
Python
41 lines
No EOL
2 KiB
Python
"""E2E tests for magic link request page."""
|
|
|
|
from playwright.async_api import Page, expect
|
|
|
|
from tests.e2e.conftest import TEST_APP_BASE, TEST_EMAIL
|
|
from wiregui.models.user import User
|
|
|
|
|
|
async def test_magic_link_page_renders(page: Page, test_user: User):
|
|
"""Magic link request page renders with email input and submit button."""
|
|
await page.goto(f"{TEST_APP_BASE}/auth/magic-link")
|
|
await page.wait_for_load_state("networkidle")
|
|
await expect(page.get_by_text("Sign in with magic link")).to_be_visible(timeout=10_000)
|
|
await expect(page.locator("input[aria-label='Email']")).to_be_visible()
|
|
await expect(page.get_by_role("button", name="Send Magic Link")).to_be_visible()
|
|
await expect(page.get_by_role("button", name="Back to login")).to_be_visible()
|
|
|
|
|
|
async def test_magic_link_shows_success_on_submit(page: Page, test_user: User):
|
|
"""Submitting an email shows success message (regardless of whether account exists)."""
|
|
await page.goto(f"{TEST_APP_BASE}/auth/magic-link")
|
|
await page.wait_for_load_state("networkidle")
|
|
await page.locator("input[aria-label='Email']").fill(TEST_EMAIL)
|
|
await page.get_by_role("button", name="Send Magic Link").click()
|
|
await expect(page.get_by_text("a sign-in link has been sent")).to_be_visible(timeout=5_000)
|
|
|
|
|
|
async def test_magic_link_empty_email_shows_error(page: Page, test_user: User):
|
|
"""Submitting without email shows error."""
|
|
await page.goto(f"{TEST_APP_BASE}/auth/magic-link")
|
|
await page.wait_for_load_state("networkidle")
|
|
await page.get_by_role("button", name="Send Magic Link").click()
|
|
await expect(page.get_by_text("Enter your email")).to_be_visible(timeout=5_000)
|
|
|
|
|
|
async def test_magic_link_back_to_login(page: Page, test_user: User):
|
|
"""Back to login button navigates to login page."""
|
|
await page.goto(f"{TEST_APP_BASE}/auth/magic-link")
|
|
await page.wait_for_load_state("networkidle")
|
|
await page.get_by_role("button", name="Back to login").click()
|
|
await expect(page.get_by_role("button", name="Sign in", exact=True)).to_be_visible(timeout=10_000) |