update
This commit is contained in:
@@ -9,8 +9,7 @@ def abend(client, film, movie_id=1):
|
||||
|
||||
def wertung(client, watched_id, stars=4):
|
||||
client.post(f"/api/watched/{watched_id}/rating", json={"stars": stars})
|
||||
film = next(f for f in client.get("/api/watched").json() if f["id"] == watched_id)
|
||||
return next(r for r in film["ratings"] if r["mine"])
|
||||
return next(f for f in client.get("/api/watched").json() if f["id"] == watched_id)
|
||||
|
||||
|
||||
def film_von(client, watched_id):
|
||||
@@ -103,8 +102,9 @@ def test_wertungen_und_kommentare_sind_unabhaengig(client, film):
|
||||
wertung(client, watched_id, 5)
|
||||
kommentar(client, watched_id, "Diskussion.")
|
||||
f = film_von(client, watched_id)
|
||||
assert f["ratings"][0]["stars"] == 5
|
||||
assert "text" not in f["ratings"][0]
|
||||
assert f["average"] == 5.0 and f["mine"] == 5
|
||||
# Die Namen an den Wertungen sieht nur der Host
|
||||
assert f["ratings"] == []
|
||||
assert [n["text"] for n in f["notes"]] == ["Diskussion."]
|
||||
|
||||
|
||||
|
||||
106
backend/tests/test_punkte.py
Normal file
106
backend/tests/test_punkte.py
Normal file
@@ -0,0 +1,106 @@
|
||||
"""Erfahrung und Level: berechnet aus dem Bestand, nicht gebucht."""
|
||||
|
||||
from app import punkte
|
||||
|
||||
|
||||
def abend(client, film, movie_id=1):
|
||||
return client.post("/api/watched", json={"movie_id": film(movie_id)}).json()["id"]
|
||||
|
||||
|
||||
def stand(client, name):
|
||||
return next(u for u in client.get("/api/users").json()["items"] if u["name"] == name)
|
||||
|
||||
|
||||
def test_level_nach_dreieckszahlen():
|
||||
assert punkte.level(0) == 1
|
||||
assert punkte.level(1) == 2
|
||||
assert punkte.level(2) == 2
|
||||
assert punkte.level(3) == 3
|
||||
assert punkte.level(20) == 6
|
||||
assert punkte.level(21) == 7
|
||||
assert punkte.level(1081) == 47
|
||||
assert punkte.stand(21) == {"punkte": 21, "level": 7, "von": 21, "bis": 28}
|
||||
|
||||
|
||||
def test_punkte_kommen_und_gehen_mit_dem_bestand(client, client2, film):
|
||||
watched_id = abend(client, film)
|
||||
assert stand(client, "Anna")["punkte"] == 0
|
||||
|
||||
client.post(f"/api/watched/{watched_id}/rating", json={"stars": 4})
|
||||
assert stand(client, "Anna")["punkte"] == punkte.BEWERTEN
|
||||
|
||||
oben = client.post(f"/api/watched/{watched_id}/notes", json={"text": "gut"}).json()["id"]
|
||||
client.post(f"/api/watched/{watched_id}/notes", json={"text": "nochmal"})
|
||||
# Zwei Kommentare, einer zählt
|
||||
assert stand(client, "Anna")["punkte"] == punkte.BEWERTEN + punkte.KOMMENTAR
|
||||
|
||||
client2.post(f"/api/watched/{watched_id}/notes", json={"text": "finde ich nicht", "parent_id": oben})
|
||||
client2.post("/api/watched/hearts", json={"note_id": oben})
|
||||
assert stand(client2, "Ben")["punkte"] == punkte.ANTWORT + punkte.HERZ
|
||||
|
||||
# Wertung weg, Punkte weg — nichts wird gebucht
|
||||
client.post(f"/api/watched/{watched_id}/rating", json={"stars": 4})
|
||||
assert stand(client, "Anna")["level"] == punkte.level(punkte.BEWERTEN + punkte.KOMMENTAR)
|
||||
client.delete(f"/api/watched/{watched_id}")
|
||||
assert stand(client, "Anna")["punkte"] == 0
|
||||
assert stand(client2, "Ben")["punkte"] == 0
|
||||
|
||||
|
||||
def test_anwesenheit_kommt_vom_rad(client, client2, zuschauer, hostmodus, film):
|
||||
"""Wer vorschlägt oder sich einträgt, war dabei — sobald der Host den
|
||||
gezogenen Film einträgt."""
|
||||
from app import main
|
||||
|
||||
client.post("/api/suggestions", json={"movie_id": film(1)})
|
||||
assert client2.post("/api/dabei").json()["dabei"] is True
|
||||
liste = client2.get("/api/suggestions").json()
|
||||
assert liste["dabei"] == ["Ben"] and liste["dabei_mine"] is True
|
||||
|
||||
hostmodus(zuschauer)
|
||||
assert zuschauer.post("/api/spin").json()["started"] is True
|
||||
main.letzter_dreh["start"] = 0.0 # Animation vorbei
|
||||
watched_id = zuschauer.post("/api/watched", json={"movie_id": film(1)}).json()["id"]
|
||||
|
||||
f = next(x for x in client.get("/api/watched").json() if x["id"] == watched_id)
|
||||
assert sorted(d["name"] for d in f["dabei"]) == ["Anna", "Ben"]
|
||||
assert stand(client, "Anna")["punkte"] == punkte.SCHAUEN
|
||||
assert stand(client, "Ben")["level"] == punkte.level(punkte.SCHAUEN)
|
||||
|
||||
# Der Host berichtigt: Ben kam doch nicht
|
||||
anna = stand(client, "Anna")["id"]
|
||||
zuschauer.post(f"/api/watched/{watched_id}/dabei", json={"user_ids": [anna]})
|
||||
f = next(x for x in client.get("/api/watched").json() if x["id"] == watched_id)
|
||||
assert [d["name"] for d in f["dabei"]] == ["Anna"]
|
||||
|
||||
# Reset leert auch die Eingetragenen
|
||||
zuschauer.delete("/api/suggestions/alle")
|
||||
assert client2.get("/api/suggestions").json()["dabei"] == []
|
||||
assert client2.post("/api/dabei").json()["dabei"] is True
|
||||
assert client2.post("/api/dabei").json()["dabei"] is False
|
||||
|
||||
|
||||
def test_wertungen_und_herzen_sieht_nur_der_host(client, client2, zuschauer, hostmodus, film):
|
||||
watched_id = abend(client, film)
|
||||
client.post(f"/api/watched/{watched_id}/rating", json={"stars": 5})
|
||||
note_id = client.post(f"/api/watched/{watched_id}/notes", json={"text": "x"}).json()["id"]
|
||||
client2.post("/api/watched/hearts", json={"note_id": note_id})
|
||||
|
||||
def film_von(c):
|
||||
return next(x for x in c.get("/api/watched").json() if x["id"] == watched_id)
|
||||
|
||||
# Ben sieht Schnitt und Herzzahl, aber keine Namen
|
||||
f = film_von(client2)
|
||||
assert f["ratings"] == [] and f["average"] == 5.0 and f["count"] == 1
|
||||
assert f["notes"][0]["hearts"] == 1 and f["notes"][0]["hearted"] is True
|
||||
assert f["notes"][0]["hearted_by"] == []
|
||||
# Anna sieht ihre eigenen Sterne trotzdem
|
||||
assert film_von(client)["mine"] == 5
|
||||
# Der Host sieht alles
|
||||
hostmodus(zuschauer)
|
||||
f = film_von(zuschauer)
|
||||
assert f["ratings"][0]["name"] == "Anna"
|
||||
assert f["notes"][0]["hearted_by"] == ["Ben"]
|
||||
# Herz zurück, Zähler runter; Zuschauer ohne Namen darf kein Herz geben
|
||||
assert client2.post("/api/watched/hearts", json={"note_id": note_id}).json()["hearted"] is False
|
||||
assert film_von(client)["notes"][0]["hearts"] == 0
|
||||
assert client.post("/api/watched/hearts", json={"note_id": 999}).status_code == 404
|
||||
@@ -16,7 +16,8 @@ def test_wertung_ist_nur_sterne(client, film):
|
||||
assert eintrag["mine"] == 4
|
||||
assert eintrag["average"] == 4.0
|
||||
assert eintrag["count"] == 1
|
||||
assert "text" not in eintrag["ratings"][0]
|
||||
# Wer wie gewertet hat, sieht nur der Host
|
||||
assert eintrag["ratings"] == []
|
||||
assert "mine_text" not in eintrag
|
||||
|
||||
|
||||
@@ -58,7 +59,8 @@ def test_fremde_wertung_ist_nicht_meine(client, client2, film):
|
||||
[eintrag] = client2.get("/api/watched").json()
|
||||
assert eintrag["mine"] is None
|
||||
assert eintrag["count"] == 1
|
||||
assert eintrag["ratings"][0]["mine"] is False
|
||||
assert eintrag["ratings"] == []
|
||||
assert eintrag["count"] == 1
|
||||
|
||||
client2.post(f"/api/watched/{wid}/rating", json={"stars": 2})
|
||||
[eintrag] = client2.get("/api/watched").json()
|
||||
|
||||
Reference in New Issue
Block a user