wiregui/tests/e2e/test_magic_link_page.py
Stefano Bertelli 06b5a3dc12
Some checks failed
Dev / test (push) Failing after 3m14s
Dev / docker (push) Has been skipped
feat: comprehensive test suite + SAML auth fixes + mock SAML IdP
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)
2026-03-31 16:52:29 -05:00

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)