Files
stemdeckapp--stemdeck/tests/test_mobile_routing.py
T
wehub-resource-sync 8f10353f0c
CI / lint (push) Has been cancelled
CI / js-syntax (push) Successful in 10m24s
CI / deps-audit (push) Has been cancelled
CI / test (push) Failing after 24m55s
CI / sast-bandit (push) Failing after 11m13s
CI / trivy (push) Failing after 9m32s
Docker Publish / build-and-push (push) Failing after 34m3s
chore: import upstream snapshot with attribution
2026-07-13 12:32:09 +08:00

67 lines
2.1 KiB
Python

from __future__ import annotations
import pytest
from fastapi.testclient import TestClient
from app.main import _is_mobile_ua, app
IPHONE_UA = (
"Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) "
"AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1"
)
ANDROID_UA = (
"Mozilla/5.0 (Linux; Android 14; Pixel 8) AppleWebKit/537.36 "
"(KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36"
)
DESKTOP_UA = (
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
"(KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
)
# Modern iPadOS Safari reports a Mac desktop UA — tablets fall through to the DAW.
IPAD_UA = (
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 "
"(KHTML, like Gecko) Version/17.0 Safari/605.1.15"
)
@pytest.mark.parametrize("ua", [IPHONE_UA, ANDROID_UA])
def test_is_mobile_ua_true_for_phones(ua: str):
assert _is_mobile_ua(ua) is True
@pytest.mark.parametrize("ua", [DESKTOP_UA, IPAD_UA, "", "curl/8.0"])
def test_is_mobile_ua_false_for_non_phones(ua: str):
assert _is_mobile_ua(ua) is False
def test_root_serves_mobile_shell_to_phones():
with TestClient(app) as c:
resp = c.get("/", headers={"user-agent": IPHONE_UA})
assert resp.status_code == 200
assert "/mobile/app.js" in resp.text
def test_root_serves_daw_to_desktop():
with TestClient(app) as c:
resp = c.get("/", headers={"user-agent": DESKTOP_UA})
assert resp.status_code == 200
assert "/css/daw.css" in resp.text
def test_ui_query_override_forces_mobile_on_desktop():
with TestClient(app) as c:
resp = c.get("/", params={"ui": "mobile"}, headers={"user-agent": DESKTOP_UA})
assert "/mobile/app.js" in resp.text
def test_ui_query_override_forces_desktop_on_phone():
with TestClient(app) as c:
resp = c.get("/", params={"ui": "desktop"}, headers={"user-agent": IPHONE_UA})
assert "/css/daw.css" in resp.text
def test_mobile_assets_are_served():
with TestClient(app) as c:
assert c.get("/mobile/app.js").status_code == 200
assert c.get("/mobile/styles.css").status_code == 200