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
67 lines
2.1 KiB
Python
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
|