Files
ragflow/test/playwright/helpers/_auth_helpers.py

73 lines
2.4 KiB
Python

import os
import pytest
from playwright.sync_api import expect
RESULT_TIMEOUT_MS = 15000
def _wait_for_login_complete(page, timeout_ms: int = RESULT_TIMEOUT_MS) -> None:
wait_js = """
() => {
const path = window.location.pathname || '';
if (path.includes('/login')) return false;
const token = localStorage.getItem('Token');
const auth = localStorage.getItem('Authorization');
return Boolean((token && token.length) || (auth && auth.length));
}
"""
page.wait_for_function(wait_js, timeout=timeout_ms)
def ensure_authed(
page,
login_url: str,
active_auth_context,
auth_click,
seeded_user_credentials=None,
timeout_ms: int = RESULT_TIMEOUT_MS,
) -> None:
if seeded_user_credentials:
email, password = seeded_user_credentials
else:
email = os.getenv("SEEDED_USER_EMAIL") or os.getenv("E2E_ADMIN_EMAIL")
password = os.getenv("SEEDED_USER_PASSWORD") or os.getenv("E2E_ADMIN_PASSWORD")
if not email or not password:
pytest.skip("SEEDED_USER_EMAIL/SEEDED_USER_PASSWORD not set.")
token_wait_js = """
() => {
const token = localStorage.getItem('Token');
const auth = localStorage.getItem('Authorization');
return Boolean((token && token.length) || (auth && auth.length));
}
"""
try:
if "/login" not in page.url:
page.wait_for_function(token_wait_js, timeout=2000)
return
except Exception:
pass
page.goto(login_url, wait_until="domcontentloaded")
if "/login" not in page.url:
return
form, _ = active_auth_context()
email_input = form.locator("input[data-testid='auth-email'], [data-testid='auth-email'] input")
password_input = form.locator("input[data-testid='auth-password'], [data-testid='auth-password'] input")
expect(email_input).to_have_count(1)
expect(password_input).to_have_count(1)
email_input.fill(email)
password_input.fill(password)
password_input.blur()
submit_button = form.locator("button[data-testid='auth-submit'], [data-testid='auth-submit'] button, [data-testid='auth-submit']")
expect(submit_button).to_have_count(1)
auth_click(submit_button, "submit_login")
_wait_for_login_complete(page, timeout_ms=timeout_ms)
expect(page.locator("form[data-testid='auth-form'][data-active='true']")).to_have_count(0, timeout=timeout_ms)