"""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