update
This commit is contained in:
74
backend/tests/test_zuschauer.py
Normal file
74
backend/tests/test_zuschauer.py
Normal file
@@ -0,0 +1,74 @@
|
||||
"""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
|
||||
Reference in New Issue
Block a user