feat(podcast): del med ukendte, gæstelinks med navn og udløb der kan trækkes tilbage
CI / check (push) Successful in 1m1s
CD / deploy (push) Successful in 1m31s

Claude-Session: https://claude.ai/code/session_01JmhJG6JnhXfzNiKv8f2vHu
This commit is contained in:
agw
2026-11-05 21:31:00 +01:00
parent 04958419ae
commit 86ab8f2a19
5 changed files with 207 additions and 9 deletions
+51
View File
@@ -0,0 +1,51 @@
# Røgtest af "Del med ukendte" (gæstelinks) med FastAPI TestClient, uden OIDC.
# Kør i CT151: PORTAL_DATA=/tmp/pg-test/data + env fra /etc/portal.env. Rører ikke prod-data.
import json, time
from fastapi.testclient import TestClient
import main, podcast
d = podcast.ROOT / "test"
(d / "episodes").mkdir(parents=True, exist_ok=True)
(d / "show.json").write_text(json.dumps({"titel": "Testshow", "beskrivelse": "b"}))
for slug, kladde in (("e1", False), ("e2", True)):
(d / "episodes" / f"{slug}.mp3").write_bytes(b"\xff\xfb" + b"\0" * 2000)
(d / "episodes" / f"{slug}.json").write_text(json.dumps({"titel": slug, "nr": 1, "kladde": kladde}))
c = TestClient(main.app, base_url="https://weircon.dk")
admin = {"username": "agw", "name": "Asger", "groups": [main.config.ADMIN_GROUP, "Familie"]}
main.current_user = lambda request: admin
r = c.post("/admin/podcast/gaest", data={"handling": "ny", "navn": "Jobsamtale X", "dage": "14"}, follow_redirects=False)
assert r.status_code == 303, r.text
g = podcast.alle_gaester()[0]; key = g["key"]
assert 13.9 * 86400 < g["udloeber"] - time.time() < 14.1 * 86400
r = c.get("/admin/podcast"); assert r.status_code == 200 and "Jobsamtale X" in r.text and key in r.text
main.current_user = lambda request: None
r = c.get(f"/podcast/f/{key}/"); assert r.status_code == 200 and "delt med dig personligt" in r.text, r.status_code
assert "familiens fælles" not in r.text and "e2.mp3" not in r.text
assert c.get(f"/podcast/f/{key}/test.xml").status_code == 200
assert c.get(f"/podcast/f/{key}/test/e1.mp3").status_code == 200
assert c.get(f"/podcast/f/{key}/test/e2.mp3").status_code == 404, "kladde må ikke kunne hentes"
assert podcast.gaester()[key]["hentninger"] == 3
assert not podcast.faelles().get("key"), "gæstelinket må ikke røre familielinket"
# udløbet
gg = podcast.gaester(); gg[key]["udloeber"] = int(time.time()) - 1; podcast._skriv(podcast.GAEST, gg)
assert c.get(f"/podcast/f/{key}/").status_code == 404
gg[key]["udloeber"] = int(time.time()) + 3600; podcast._skriv(podcast.GAEST, gg)
assert c.get(f"/podcast/f/{key}/").status_code == 200
# trukket tilbage, slettet
main.current_user = lambda request: admin
assert c.post("/admin/podcast/gaest", data={"handling": "tilbagekald", "key": key}, follow_redirects=False).status_code == 303
assert c.get(f"/podcast/f/{key}/test/e1.mp3").status_code == 404
assert c.post("/admin/podcast/gaest", data={"handling": "slet", "key": key}, follow_redirects=False).status_code == 303
assert key not in podcast.gaester()
# "aldrig" + familielinket virker stadig ved siden af
c.post("/admin/podcast/gaest", data={"handling": "ny", "navn": "Uden udløb", "dage": "0"})
assert podcast.alle_gaester()[0]["udloeber"] is None
fk = podcast.faelles_skift()
r = c.get(f"/podcast/f/{fk}/"); assert r.status_code == 200 and "familiens fælles" in r.text
print("OK")