Brukersider: /brukere/ og /brukere/<brukernavn>/ med beskrivelse
Alle brukere kan skrive en valgfri beskrivelse (Markdown, uten rå HTML) under Profil. /brukere/ lister hovedbruker øverst og gjester alfabetisk etter visningsnavn; brukersiden viser navn, beskrivelse, e-post og innlegg. Signaturen under innlegg lenker til brukersiden. «brukere» er reservert. Siden bygges nå også når brukere opprettes/slettes. Retter også ugyldig pattern-regex for brukernavn i admin. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JcEy43fNYpwg6K6oTKakWR
This commit is contained in:
parent
f0fcb875c5
commit
5263d3011d
13 changed files with 191 additions and 20 deletions
|
|
@ -323,7 +323,9 @@ def test_signature_from_profile(client, cfg):
|
|||
f"/admin/edit/{post_id}",
|
||||
data={"csrf": token, "title": "Sign", "body": "x", "action": "publish"},
|
||||
)
|
||||
assert "– Ole" in client.get("/sign/").text # visningsnavn fra brukertabellen
|
||||
assert re.search(
|
||||
r"– <a[^>]*>Ole</a>", client.get("/sign/").text
|
||||
) # visningsnavn fra brukertabellen
|
||||
assert (cfg.content_dir / "posts/sign/index.md").read_text().count('author: "eier"') == 1
|
||||
|
||||
r = client.post(
|
||||
|
|
@ -331,7 +333,7 @@ def test_signature_from_profile(client, cfg):
|
|||
)
|
||||
assert r.status_code == 302
|
||||
html = client.get("/sign/").text
|
||||
assert "– Ole M." in html and 'href="mailto:ole@example.no"' in html
|
||||
assert ">Ole M.</a>" in html and 'href="mailto:ole@example.no"' in html
|
||||
assert "<dc:creator>Ole M.</dc:creator>" in client.get("/feed.xml").text
|
||||
assert (
|
||||
client.post(
|
||||
|
|
@ -362,7 +364,12 @@ def test_tags(client, cfg):
|
|||
|
||||
assert 'href="../tag/friluftsliv/"' in client.get("/en/").text
|
||||
page = client.get("/tag/friluftsliv/").text
|
||||
assert "tagg: friluftsliv" in page.lower() and ">En<" in page and ">To<" in page and ">Tre<" not in page
|
||||
assert (
|
||||
"tagg: friluftsliv" in page.lower()
|
||||
and ">En<" in page
|
||||
and ">To<" in page
|
||||
and ">Tre<" not in page
|
||||
)
|
||||
assert client.get("/tag/skog/").status_code == 200
|
||||
assert client.get("/tag/").status_code == 200 and "(2)" in client.get("/tag/").text
|
||||
assert "<category>skog</category>" in client.get("/feed.xml").text
|
||||
|
|
@ -370,3 +377,54 @@ def test_tags(client, cfg):
|
|||
# "tag" er reservert som slug
|
||||
publish("tag", "")
|
||||
assert not (cfg.content_dir / "posts/tag").exists()
|
||||
|
||||
|
||||
def test_user_pages(client, cfg):
|
||||
login(client)
|
||||
token = csrf(client)
|
||||
client.post(
|
||||
"/admin/profile",
|
||||
data={
|
||||
"csrf": token,
|
||||
"display_name": "Ole",
|
||||
"email": "",
|
||||
"bio": "Skriver om **skog**.\n\n<b>x</b>",
|
||||
},
|
||||
)
|
||||
r = client.post("/admin/new", data={"csrf": token})
|
||||
pid = r.headers["Location"].split("/admin/edit/")[1]
|
||||
client.post(
|
||||
f"/admin/edit/{pid}",
|
||||
data={"csrf": token, "title": "Mitt", "body": "x", "action": "publish"},
|
||||
)
|
||||
client.post(
|
||||
"/admin/users",
|
||||
data={
|
||||
"csrf": token,
|
||||
"action": "create",
|
||||
"username": "aa",
|
||||
"display_name": "Åse",
|
||||
"password": "passord123",
|
||||
},
|
||||
)
|
||||
|
||||
lst = client.get("/brukere/").text
|
||||
order = [n for n in ("Ole", "Gjest En", "Åse") if n in lst]
|
||||
assert [lst.index(n) for n in order] == sorted(
|
||||
lst.index(n) for n in order
|
||||
) # eier, så Gjest En, Åse
|
||||
assert lst.index("Ole") < lst.index("Gjest En") < lst.index("Åse")
|
||||
page = client.get("/brukere/eier/").text
|
||||
assert "<strong>skog</strong>" in page and "<b>" in page # markdown, ikke rå HTML
|
||||
assert ">Mitt<" in page and "Hovedbruker" in page
|
||||
assert "Ingen innlegg ennå" in client.get("/brukere/gjest1/").text
|
||||
assert 'href="../brukere/eier/"' in client.get("/mitt/").text # signatur lenker til brukersiden
|
||||
assert "https://blog.example.no/brukere/eier/" in client.get("/sitemap.xml").text
|
||||
# "brukere" er reservert som slug
|
||||
r = client.post("/admin/new", data={"csrf": token})
|
||||
pid = r.headers["Location"].split("/admin/edit/")[1]
|
||||
client.post(
|
||||
f"/admin/edit/{pid}",
|
||||
data={"csrf": token, "title": "brukere", "body": "x", "action": "publish"},
|
||||
)
|
||||
assert not (cfg.content_dir / "posts/brukere").exists()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue