Access Gate

Test source at commit 5274a75a ยท v0.2.44

Automated browser test for the access gate workflow.

View source on GitHub โ€” tests/qa/v030/p1__access_gate/test__access_gate.py


Test Methods

Method Description Screenshots
upload_accessible_with_token Providing the correct access token grants access to the upload zone. 1
wrong_token_shows_error Providing a wrong access token shows an error. 0
upload_zone_visible_without_gate If no gate is configured, upload zone is immediately visible. 1

Screenshots

02 After Token

After entering access token

02 After Token

03 Wrong Token

Wrong token response

03 Wrong Token

02 After Token

After entering access token

02 After Token

02 After Token

After entering access token

02 After Token

02 After Token

After entering access token

02 After Token

02 After Token

After entering access token

02 After Token

02 After Token

After entering access token

02 After Token

01 Landing

Landing page (may show gate or upload zone)

01 Landing

Deterministic view (non-dynamic areas only) ![01 Landing โ€” masked](screenshots/01_landing__deterministic.png)

04 No Gate

Upload zone without gate

04 No Gate

Deterministic view (non-dynamic areas only) ![04 No Gate โ€” masked](screenshots/04_no_gate__deterministic.png)

View test source โ€” tests/qa/v030/p1__access_gate/test__access_gate.py ```python """UC-10: Access token gate โ€” browser tests (P1). Test flow: - Navigate to /en-gb/ (upload page) - If access gate is active, verify token entry UI appears - Enter the valid access token โ†’ verify upload zone becomes visible - Verify wrong token shows an error API-level tests (token counter) live in via__httpx/test__access_gate.py. v0.3.1 notes: - CR-001: Use body[data-ready] instead of networkidle. - CR-002: Use data-testid selectors for access gate elements: [data-testid="access-gate-input"] (was #access-token-input) [data-testid="access-gate-submit"] (was #access-token-submit) [data-testid="access-gate-error"] (was generic text search) ID selectors (#access-token-input) are preserved for backward compatibility and still work, but data-testid is the preferred stable selector. """ import pytest pytestmark = pytest.mark.p1 class TestAccessGate: """Verify the access token gate on the upload page.""" def _load_upload_page(self, page, ui_url): """Navigate to the upload page and wait for it to be ready.""" page.goto(f"{ui_url}/en-gb/", wait_until="commit") page.wait_for_selector("body[data-ready]", timeout=10_000) def test_upload_accessible_with_token(self, page, ui_url, send_server, screenshots): """Providing the correct access token grants access to the upload zone.""" self._load_upload_page(page, ui_url) screenshots.capture(page, "01_landing", "Landing page (may show gate or upload zone)") # CR-002: prefer data-testid; fall back to ID for older UI versions gate_input = page.locator('[data-testid="access-gate-input"], #access-token-input').first if gate_input.is_visible(timeout=3_000): gate_input.fill(send_server.access_token) page.locator('[data-testid="access-gate-submit"], #access-token-submit').first.click() page.wait_for_selector("body[data-ready]", timeout=10_000) page.wait_for_timeout(800) # Verify no unexpected UI is overlaying the page (e.g. language dropdown) page_text = page.text_content("body") or "" unexpected_dropdown = any(lang in page_text for lang in [ "Deutsch", "Italiano", "Polski", ]) assert not unexpected_dropdown, \ "Language dropdown is open โ€” see bugs/test__bug__generic_button_opens_language_dropdown.py" screenshots.capture(page, "02_after_token", "After entering access token") # Upload zone should now be visible file_input = page.locator("#file-input, [data-testid='file-input']").first page_text = page.text_content("body") or "" has_upload = file_input.count() > 0 has_keyword = any(kw in page_text.lower() for kw in [ "upload", "drop", "browse", "choose" ]) assert has_upload or has_keyword, \ "Upload zone not visible after providing valid access token" def test_wrong_token_shows_error(self, page, ui_url, send_server, screenshots): """Providing a wrong access token shows an error.""" self._load_upload_page(page, ui_url) gate_input = page.locator('[data-testid="access-gate-input"], #access-token-input').first if gate_input.is_visible(timeout=3_000): gate_input.fill("wrong-token-12345-xxxxx") page.locator('[data-testid="access-gate-submit"], #access-token-submit').first.click() page.wait_for_timeout(1_000) screenshots.capture(page, "03_wrong_token", "Wrong token response") # CR-002: data-testid="access-gate-error" is the error element error_el = page.locator('[data-testid="access-gate-error"]').first if error_el.is_visible(timeout=2_000): error_text = error_el.text_content() or "" assert error_text.strip(), "access-gate-error element is visible but empty" else: # Fallback: check body text or that gate is still visible page_text = page.text_content("body") or "" assert any(kw in page_text.lower() for kw in [ "error", "invalid", "wrong", "incorrect", "denied" ]) or gate_input.is_visible(), \ "No error shown for wrong access token" def test_upload_zone_visible_without_gate(self, page, ui_url, send_server, screenshots): """If no gate is configured, upload zone is immediately visible.""" self._load_upload_page(page, ui_url) gate_input = page.locator('[data-testid="access-gate-input"], #access-token-input').first if gate_input.is_visible(timeout=2_000): pytest.skip("Access gate is active; testing gated flow in other tests") # No gate โ€” upload zone should be directly visible file_input = page.locator("#file-input, [data-testid='file-input']").first screenshots.capture(page, "04_no_gate", "Upload zone without gate") page_text = page.text_content("body") or "" assert file_input.count() > 0 or any(kw in page_text.lower() for kw in [ "upload", "drop", "browse" ]), "Upload zone not visible (and no gate present)" ```