Files
ragflow/test/playwright/auth/test_validation_presence.py

64 lines
2.2 KiB
Python

import pytest
from playwright.sync_api import expect
from test.playwright.helpers.auth_selectors import EMAIL_INPUT, SUBMIT_BUTTON
from test.playwright.helpers.flow_steps import flow_params, require
def step_01_open_login(flow_page, flow_state, login_url, active_auth_context, step, snap, auth_click):
page = flow_page
with step("open login page"):
page.goto(login_url, wait_until="domcontentloaded")
flow_state["login_opened"] = True
snap("open")
def step_02_submit_empty(flow_page, flow_state, login_url, active_auth_context, step, snap, auth_click):
require(flow_state, "login_opened")
form, _ = active_auth_context()
expect(form.locator(EMAIL_INPUT)).to_have_count(1)
with step("submit empty login form"):
submit_button = form.locator(SUBMIT_BUTTON)
expect(submit_button).to_have_count(1)
auth_click(submit_button, "submit_validation")
flow_state["submitted_empty"] = True
snap("submitted_empty")
def step_03_assert_validation(flow_page, flow_state, login_url, active_auth_context, step, snap, auth_click):
require(flow_state, "login_opened", "submitted_empty")
form, _ = active_auth_context()
invalid_inputs = form.locator("input[aria-invalid='true']")
error_messages = form.locator("p[id$='-form-item-message']")
try:
expect(invalid_inputs).not_to_have_count(0, timeout=2000)
snap("validation_visible")
return
except AssertionError:
pass
try:
expect(error_messages).not_to_have_count(0, timeout=1000)
snap("validation_visible")
return
except AssertionError:
pass
raise AssertionError("No validation feedback detected after submitting an empty login form. Expected aria-invalid inputs or visible error containers. See artifacts for DOM evidence.")
STEPS = [
("01_open_login", step_01_open_login),
("02_submit_empty", step_02_submit_empty),
("03_assert_validation", step_03_assert_validation),
]
@pytest.mark.p1
@pytest.mark.auth
@pytest.mark.parametrize("step_fn", flow_params(STEPS))
def test_validation_presence_flow(step_fn, flow_page, flow_state, login_url, active_auth_context, step, snap, auth_click):
step_fn(flow_page, flow_state, login_url, active_auth_context, step, snap, auth_click)