fix(e2e): resolve SPA auth race conditions in Robot tests

- Rework Login As Admin: use sessionStorage flag + relative fetch login + polling loop
- Add data-testid to JailDetailPage error render path
- Add Collections library import for Get From List keyword
- Fix /jails API response extraction (returns {items, total} not plain list)
- Change Close Context to Close Browser for proper browser cleanup
- Add domcontentloaded + Sleep + polling to Config test to avoid premature timeout

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
2026-05-06 06:53:09 +02:00
parent 48ef85bec5
commit d4bab89cf3
8 changed files with 167 additions and 205 deletions

View File

@@ -1,4 +1,5 @@
*** Settings ***
Library Collections
Resource ${CURDIR}/../resources/common.resource
Resource ${CURDIR}/../resources/auth.resource
@@ -16,48 +17,55 @@ Login Page Loads Without Error
Setup Page Loads Without Error
[Documentation] Setup wizard accessible before auth; may redirect to /login if already done.
New Browser chromium headless=${TRUE}
Login As Admin
New Page
Go To ${FRONTEND_URL}/setup
Wait For Elements State css=form,button visible timeout=15s
# After setup is complete, this redirects to /login. Accept either page.
${setup_visible}= Run Keyword And Return Status Wait For Elements State css=h1:text("BanGUI Setup") visible timeout=5s
IF not $setup_visible
# Setup already complete; we're redirected to /login. Verify login page instead.
Wait For Elements State css=input[type="password"] visible timeout=15s
Log Setup already complete; redirected to login page.
END
Get Text css=body not contains Something went wrong
Close Browser
Dashboard Page Loads Without Error
New Browser chromium headless=${TRUE}
Login As Admin
Go To ${FRONTEND_URL}/
Wait For Elements State css=main visible timeout=15s
Wait For Elements State css=[data-testid="dashboard"] visible timeout=15s
Get Text css=body not contains Something went wrong
Close Browser
Map Page Loads Without Error
New Browser chromium headless=${TRUE}
Login As Admin
Go To ${FRONTEND_URL}/map
Wait For Elements State css=canvas,svg,.map-container visible timeout=15s
Wait For Elements State css=[data-testid="map-page"] visible timeout=15s
Get Text css=body not contains Something went wrong
Close Browser
Jails Page Loads Without Error
New Browser chromium headless=${TRUE}
Login As Admin
Go To ${FRONTEND_URL}/jails
Wait For Elements State css=main,table,.jails-list visible timeout=15s
Wait For Elements State css=[data-testid="jails-page"] visible timeout=15s
Get Text css=body not contains Something went wrong
Close Browser
Jail Detail Page Loads Without Error
[Documentation] Guard: check jail exists via GET /api/jails first; use first jail name.
New Browser chromium headless=${TRUE}
Login As Admin
# Guard: find an active jail before navigating to /jails/:name
${response}= GET ${BACKEND_URL}/api/v1/jails
${jails}= Set Variable ${response.json()}
${count}= Get Length ${jails}
# Guard: find an active jail via browser fetch (credentials=include sends the session cookie).
# The /jails endpoint returns a paginated response: { items: [...], total: N }
${jail_response}= Evaluate JavaScript ${None}
... async () => {
... const res = await fetch('/api/v1/jails', { credentials: 'include' });
... if (!res.ok) return { items: [], total: 0 };
... return res.json().catch(() => ({ items: [], total: 0 }));
... }
${jail_list}= Set Variable ${jail_response}[items]
${count}= Get Length ${jail_list}
IF ${count} > 0
${first_jail}= Get From List ${jails} 0
${first_jail}= Get From List ${jail_list} 0
${jail_name}= Set Variable ${first_jail}[name]
Log Using jail: ${jail_name}
ELSE
@@ -66,30 +74,54 @@ Jail Detail Page Loads Without Error
END
Go To ${FRONTEND_URL}/jails/${jail_name}
Wait For Elements State css=main,h1,h2,.jail-detail visible timeout=15s
Wait For Load State domcontentloaded
FOR ${i} IN RANGE 1 16
${found}= Run Keyword And Return Status Wait For Elements State css=[data-testid="jail-detail-page"] visible timeout=2s
IF ${found}
BREAK
END
Sleep 1s
END
Wait For Elements State css=[data-testid="jail-detail-page"] visible timeout=30s
Get Text css=body not contains Something went wrong
Close Browser
Config Page Loads Without Error
New Browser chromium headless=${TRUE}
Login As Admin
Go To ${FRONTEND_URL}/config
Wait For Elements State css=main,.tabs,.config-editor visible timeout=15s
Wait For Load State domcontentloaded
Sleep 2s
FOR ${i} IN RANGE 1 16
${found}= Run Keyword And Return Status Wait For Elements State css=[data-testid="config-page"] visible timeout=2s
IF ${found}
BREAK
END
Sleep 1s
END
IF not ${found}
Log Config page did not load within 30 seconds
END
Get Text css=body not contains Something went wrong
Close Browser
History Page Loads Without Error
New Browser chromium headless=${TRUE}
Login As Admin
Go To ${FRONTEND_URL}/history
Wait For Elements State css=main,table,.history-table visible timeout=15s
Wait For Load State domcontentloaded
FOR ${i} IN RANGE 1 16
${found}= Run Keyword And Return Status Wait For Elements State css=[data-testid="history-page"] visible timeout=2s
IF ${found}
BREAK
END
Sleep 1s
END
Wait For Elements State css=[data-testid="history-page"] visible timeout=15s
Get Text css=body not contains Something went wrong
Close Browser
Blocklists Page Loads Without Error
New Browser chromium headless=${TRUE}
Login As Admin
Go To ${FRONTEND_URL}/blocklists
Wait For Elements State css=main,.blocklists-panel,.panel visible timeout=15s
Wait For Elements State css=[data-testid="blocklists-page"] visible timeout=15s
Get Text css=body not contains Something went wrong
Close Browser