Files
horror/backend/tests/test_zuschauer.py
2026-09-17 12:14:40 +02:00

75 lines
3.0 KiB
Python

"""Der Zuschauer: kein Name gewählt, also nur mitlesen.
Gedacht für alle, die noch nicht in der Runde stehen. Sie sollen den
Katalog, das Rad und die Wertungen der anderen sehen, aber nichts
eintragen — sonst hinge ihr Kram allein am Cookie.
"""
import pytest
# Jede Zeile: wie die Anfrage aussieht, wenn ein Zuschauer sie stellt
SCHREIBEN = [
("post", "/api/suggestions", {"movie_id": 1}),
("delete", "/api/suggestions", None),
("post", "/api/wishlist", {"movie_id": 1}),
("delete", "/api/wishlist/1", None),
("post", "/api/features", {"text": "Dunkles Design"}),
]
@pytest.mark.parametrize("methode,pfad,daten", SCHREIBEN)
def test_zuschauer_darf_nicht_schreiben(zuschauer, film, methode, pfad, daten):
film(1)
# DELETE nimmt bei TestClient keinen json-Parameter
anfrage = getattr(zuschauer, methode)
antwort = anfrage(pfad, json=daten) if daten is not None else anfrage(pfad)
assert antwort.status_code == 403
def test_zuschauer_darf_nicht_bewerten(zuschauer, client, film):
eintrag = client.post("/api/watched", json={"movie_id": film(1)}).json()
antwort = zuschauer.post(
f"/api/watched/{eintrag['id']}/rating", json={"stars": 5, "text": "stark"}
)
assert antwort.status_code == 403
assert zuschauer.get("/api/watched").json()[0]["count"] == 0
def test_zuschauer_darf_nicht_abstimmen_oder_ergaenzen(zuschauer, client):
wunsch = client.post("/api/features", json={"text": "Dunkles Design"}).json()[0]
assert zuschauer.post(f"/api/features/{wunsch['id']}/vote").status_code == 403
assert (
zuschauer.post(
f"/api/features/{wunsch['id']}/notes", json={"text": "dazu"}
).status_code
== 403
)
assert zuschauer.get("/api/features").json()[0]["votes"] == 0
def test_zuschauer_darf_alles_lesen(zuschauer, client, film):
client.post("/api/suggestions", json={"movie_id": film(1)})
client.post("/api/wishlist", json={"movie_id": film(2)})
client.post("/api/features", json={"text": "Dunkles Design"})
client.post("/api/watched", json={"movie_id": film(3)})
for pfad in ("/api/movies", "/api/suggestions", "/api/wishlist",
"/api/features", "/api/watched", "/api/users", "/api/spin"):
assert zuschauer.get(pfad).status_code == 200
# Fremdes gehört ihm nicht
assert zuschauer.get("/api/suggestions").json()["mine"] is None
assert zuschauer.get("/api/wishlist").json()[0]["mine"] is False
assert zuschauer.get("/api/features").json()[0]["mine"] is False
def test_host_kommt_ohne_namen_an_seine_knoepfe(zuschauer, client, film):
"""Den Hostmodus kennt nur der Browser — seine Routen bleiben offen."""
client.post("/api/suggestions", json={"movie_id": film(1)})
eintrag = zuschauer.post("/api/watched", json={"movie_id": film(2)}).json()
assert zuschauer.patch(
f"/api/watched/{eintrag['id']}", json={"hidden": True}
).status_code == 200
assert zuschauer.post("/api/spin").json()["started"] is True
assert zuschauer.delete("/api/suggestions/alle").status_code == 200