Cache-busting: immutable bare på versjonerte URL-er, streng asset()
Fra code review av ea07f34:
- /theme/* fikk max-age=1 år + immutable også uten ?v=; url("favicon.svg")
inne i CSS ville da sittet fast etter en temaendring. Nå bare med hash.
- asset() feiler ved bygging på ukjent temafil i stedet for å gi en
uversjonert URL i stillhet.
- rel() defineres én gang og gjenbrukes av asset(); dødt is_dir-guard
fjernet; docstring peker på asset() for temafiler.
- Tester: uversjonert forespørsel skal ikke være immutable; hash-format
sjekkes på nestede sider; ukjent asset gir feil.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JcEy43fNYpwg6K6oTKakWR
This commit is contained in:
parent
ea07f346a9
commit
42b296ca06
3 changed files with 38 additions and 21 deletions
|
|
@ -65,6 +65,8 @@ def test_full_flow_owner(client, cfg):
|
|||
assert re.search(r'href="\.\./theme/favicon\.svg\?v=[0-9a-f]{8}"', html)
|
||||
r = client.get(f"/theme/style.css?v={m.group(1)}")
|
||||
assert r.status_code == 200 and "immutable" in r.headers["Cache-Control"]
|
||||
# uten hash (f.eks. url("favicon.svg") fra CSS) skal cachen være kort
|
||||
assert "immutable" not in client.get("/theme/favicon.svg").headers["Cache-Control"]
|
||||
assert 'href="../"' in html # intern lenke omskrevet til relativ
|
||||
assert client.get("/grønt-er-skjønt/mitt-bilde.png").status_code == 200
|
||||
front = client.get("/").text
|
||||
|
|
@ -108,7 +110,7 @@ def test_guest_flow_and_isolation(client, cfg):
|
|||
assert (cfg.content_dir / "guests/gjest1/post-1/index.md").exists()
|
||||
|
||||
html = client.get("/gjest1/post-1/").text
|
||||
assert re.search(r'href="\.\./\.\./theme/style\.css\?v=', html)
|
||||
assert re.search(r'href="\.\./\.\./theme/style\.css\?v=[0-9a-f]{8}"', html)
|
||||
assert "Gjest En" in html
|
||||
assert "Post 1" in client.get("/gjest1/").text
|
||||
assert "Post 1" in client.get("/").text # gjesteinnlegg vises også på forsiden
|
||||
|
|
@ -149,7 +151,7 @@ def test_subpath_mount(tmp_path):
|
|||
r = client.post("/blog/admin/new", data={"csrf": csrf(client, "/blog")})
|
||||
assert r.headers["Location"].startswith("/blog/admin/edit/")
|
||||
html = client.get("/blog/").text
|
||||
assert re.search(r'href="theme/style\.css\?v=', html)
|
||||
assert re.search(r'href="theme/style\.css\?v=[0-9a-f]{8}"', html)
|
||||
assert re.search(r'href="admin/"', html)
|
||||
assert client.get("/blog/theme/style.css").status_code == 200
|
||||
|
||||
|
|
@ -443,3 +445,14 @@ def test_asset_hash_changes_with_content(client, cfg):
|
|||
client.post("/admin/settings", data={"csrf": token, "title": "T", "theme": "green2"})
|
||||
after = re.search(r"style\.css\?v=([0-9a-f]{8})", client.get("/").text).group(1)
|
||||
assert before != after
|
||||
|
||||
|
||||
def test_asset_unknown_file_fails_build(client, cfg):
|
||||
theme = cfg.content_dir / "themes" / "feil" / "templates"
|
||||
theme.mkdir(parents=True)
|
||||
(theme / "index.html").write_text("{{ asset('theme/finnes-ikke.css') }}")
|
||||
login(client)
|
||||
import pytest
|
||||
|
||||
with pytest.raises(ValueError, match="finnes-ikke"):
|
||||
client.post("/admin/settings", data={"csrf": csrf(client), "title": "T", "theme": "feil"})
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue