Files
NODEDC_MISSION_CORE/tests/test_frontend_assets.py
T
DCCONSTRUCTIONS 0ca7316a24 wip(k1): checkpoint connection recovery rewrite
Capture the current unreleased K1 connection, recovery, lifecycle, viewer, and test work as a single known-bad baseline for subsequent fixes.
2026-08-14 14:57:50 +03:00

61 lines
1.8 KiB
Python

from __future__ import annotations
from pathlib import Path
from fastapi import FastAPI
from fastapi.testclient import TestClient
from k1link.web.frontend_assets import (
HASHED_ASSET_IMMUTABLE,
HTML_NO_STORE,
ControlStationStaticFiles,
frontend_build_id,
)
def _frontend(tmp_path: Path) -> Path:
frontend = tmp_path / "dist"
assets = frontend / "assets"
assets.mkdir(parents=True)
(frontend / "index.html").write_text(
"""<!doctype html><html><body>
<script type="module" crossorigin src="/assets/index-dT7dN-y4.js"></script>
</body></html>""",
encoding="utf-8",
)
(assets / "index-dT7dN-y4.js").write_text("export {};", encoding="utf-8")
(assets / "runtime.js").write_text("export {};", encoding="utf-8")
return frontend
def test_frontend_build_id_is_exact_hashed_entry_module(tmp_path: Path) -> None:
frontend = _frontend(tmp_path)
assert frontend_build_id(frontend) == "/assets/index-dT7dN-y4.js"
(frontend / "index.html").write_text(
'<script type="module" src="/assets/runtime.js"></script>',
encoding="utf-8",
)
assert frontend_build_id(frontend) is None
def test_spa_shell_is_no_store_and_only_hashed_assets_are_immutable(
tmp_path: Path,
) -> None:
frontend = _frontend(tmp_path)
app = FastAPI()
app.mount("/", ControlStationStaticFiles(directory=frontend, html=True))
client = TestClient(app)
shell = client.get("/")
hashed = client.get("/assets/index-dT7dN-y4.js")
unhashed = client.get("/assets/runtime.js")
assert shell.status_code == 200
assert shell.headers["cache-control"] == HTML_NO_STORE
assert hashed.status_code == 200
assert hashed.headers["cache-control"] == HASHED_ASSET_IMMUTABLE
assert unhashed.status_code == 200
assert "immutable" not in unhashed.headers.get("cache-control", "")