75 lines
3.0 KiB
Python
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
|