Unicode i slugs: «Grønt er skjønt» → grønt-er-skjønt
Bokstaver og tall i alle skriftsystemer beholdes, alt annet blir bindestrek. NFC-normalisering gir samme slug uansett om ø/å kommer prekomponert eller som base + kombinerende tegn (macOS). URL-er i feed.xml percent-encodes siden RSS-lesere krever ASCII. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JcEy43fNYpwg6K6oTKakWR
This commit is contained in:
parent
9eb375e339
commit
1218c5d650
4 changed files with 26 additions and 20 deletions
|
|
@ -1,4 +1,5 @@
|
|||
import re
|
||||
from urllib.parse import unquote
|
||||
|
||||
from soapbox.app import create_app
|
||||
from soapbox.config import load_config
|
||||
|
|
@ -50,31 +51,31 @@ def test_full_flow_owner(client, cfg):
|
|||
f"/admin/edit/{post_id}",
|
||||
data={"csrf": token, "title": "Grønt er skjønt", "body": body, "action": "publish"},
|
||||
)
|
||||
assert r.headers["Location"].endswith("/admin/edit/_owner/groent-er-skjoent")
|
||||
assert (cfg.content_dir / "posts/groent-er-skjoent/index.md").exists()
|
||||
assert (cfg.content_dir / "posts/groent-er-skjoent/mitt-bilde.png").exists()
|
||||
assert unquote(r.headers["Location"]).endswith("/admin/edit/_owner/grønt-er-skjønt")
|
||||
assert (cfg.content_dir / "posts/grønt-er-skjønt/index.md").exists()
|
||||
assert (cfg.content_dir / "posts/grønt-er-skjønt/mitt-bilde.png").exists()
|
||||
|
||||
# Statisk output
|
||||
r = client.get("/groent-er-skjoent")
|
||||
assert r.status_code == 301 and r.headers["Location"].endswith("/groent-er-skjoent/")
|
||||
html = client.get("/groent-er-skjoent/").text
|
||||
r = client.get("/grønt-er-skjønt")
|
||||
assert r.status_code == 301 and unquote(r.headers["Location"]).endswith("/grønt-er-skjønt/")
|
||||
html = client.get("/grønt-er-skjønt/").text
|
||||
assert "<strong>verden</strong>" in html
|
||||
assert 'href="../theme/style.css"' in html
|
||||
assert 'href="../theme/favicon.svg"' in html
|
||||
assert 'href="../"' in html # intern lenke omskrevet til relativ
|
||||
assert client.get("/groent-er-skjoent/mitt-bilde.png").status_code == 200
|
||||
assert client.get("/grønt-er-skjønt/mitt-bilde.png").status_code == 200
|
||||
front = client.get("/").text
|
||||
assert "Grønt er skjønt" in front
|
||||
assert 'href="https://kode.naiv.no/olemd/soapbox"' in front # AGPL: lenke til kilden
|
||||
feed = client.get("/feed.xml").text
|
||||
assert "https://blog.example.no/groent-er-skjoent/" in feed
|
||||
assert "https://blog.example.no/gr%C3%B8nt-er-skj%C3%B8nt/" in feed
|
||||
|
||||
# Etter publisering fryses slug selv om tittelen endres
|
||||
r = client.post(
|
||||
"/admin/edit/_owner/groent-er-skjoent",
|
||||
"/admin/edit/_owner/grønt-er-skjønt",
|
||||
data={"csrf": token, "title": "Ny tittel", "body": body, "action": "save"},
|
||||
)
|
||||
assert r.headers["Location"].endswith("/admin/edit/_owner/groent-er-skjoent")
|
||||
assert unquote(r.headers["Location"]).endswith("/admin/edit/_owner/grønt-er-skjønt")
|
||||
|
||||
# Git-historikk
|
||||
from soapbox.gitstore import log
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue