dd2f7daaf8
apiAuth in app.html: - Pre-checks JWT exp client-side BEFORE making request - On expired: clears localStorage + redirects /login?reason=expired - On 401 from server: clears + redirects /login?reason=unauthorized - Single-flight redirect via window.__pgz_redirecting flag login.html: - Toast for ?reason=expired (red) / ?reason=unauthorized (orange) app.html mobile: - Hamburger button injected into topbar (.tb) - Mobile CSS: sidebar slide-in -280→0, backdrop overlay, full-width drill-down - toggleMobileSidebar() global function - @media (max-width:768px) display:inline-flex, sidebar fixed pos scripts/playwright_e2e.py: - Desktop test (1280x800): login, JWT persist, profile, logo, logout - Mobile test (375x812 iPhone X): viewport, login flow, hamburger, no h-scroll - Output: _audit/playwright_<TS>/results.json + screenshots/*.png Reproducible: TS=YYYYmmdd_HHMM python3 scripts/playwright_e2e.py
66 lines
1.7 KiB
JSON
66 lines
1.7 KiB
JSON
{
|
|
"tests": [
|
|
{
|
|
"name": "Login page loads",
|
|
"status": "PASS"
|
|
},
|
|
{
|
|
"name": "Login persists JWT",
|
|
"status": "PASS",
|
|
"url": "https://sport.rinet.one/app",
|
|
"token_len": 519
|
|
},
|
|
{
|
|
"name": "Profile section accessible",
|
|
"status": "PASS"
|
|
},
|
|
{
|
|
"name": "PGŽ logo clickable",
|
|
"status": "PASS",
|
|
"href": "/"
|
|
},
|
|
{
|
|
"name": "Logout button",
|
|
"status": "FAIL",
|
|
"msg": "no logout button found"
|
|
},
|
|
{
|
|
"name": "Mobile login renders",
|
|
"status": "PASS",
|
|
"viewport": "width=device-width,initial-scale=1"
|
|
},
|
|
{
|
|
"name": "Mobile login → app",
|
|
"status": "PASS"
|
|
},
|
|
{
|
|
"name": "Mobile hamburger button",
|
|
"status": "PASS",
|
|
"visible": true
|
|
},
|
|
{
|
|
"name": "Mobile sidebar opens",
|
|
"status": "PASS"
|
|
},
|
|
{
|
|
"name": "Mobile homepage no horizontal scroll",
|
|
"status": "PASS",
|
|
"body_w": 375,
|
|
"viewport": 375
|
|
}
|
|
],
|
|
"screenshots": [
|
|
"/opt/pgz-sport/_audit/playwright_20260505_0921/01_login_page.png",
|
|
"/opt/pgz-sport/_audit/playwright_20260505_0921/02_post_login.png",
|
|
"/opt/pgz-sport/_audit/playwright_20260505_0921/03_app_dashboard.png",
|
|
"/opt/pgz-sport/_audit/playwright_20260505_0921/04_profile_view.png",
|
|
"/opt/pgz-sport/_audit/playwright_20260505_0921/m01_mobile_login.png",
|
|
"/opt/pgz-sport/_audit/playwright_20260505_0921/m02_mobile_app.png",
|
|
"/opt/pgz-sport/_audit/playwright_20260505_0921/m03_mobile_sidebar_open.png",
|
|
"/opt/pgz-sport/_audit/playwright_20260505_0921/m04_mobile_sport2_homepage.png"
|
|
],
|
|
"summary": {
|
|
"passed": 9,
|
|
"failed": 1
|
|
}
|
|
} |