"""Wertungen: Sterne, Text, Schnitt.""" from app.watched import MAX_TEXT def gesehen(client, film, movie_id=1): """Film anlegen und als gesehen eintragen. Gibt die watched-id zurück.""" film(movie_id) return client.post("/api/watched", json={"movie_id": movie_id}).json()["id"] def test_wertung_mit_text(client, film): wid = gesehen(client, film) antwort = client.post(f"/api/watched/{wid}/rating", json={"stars": 4, "text": "Gruselig"}) assert antwort.json() == {"watched_id": wid, "stars": 4, "text": "Gruselig"} [eintrag] = client.get("/api/watched").json() assert eintrag["average"] == 4.0 assert eintrag["count"] == 1 assert eintrag["mine"] == 4 assert eintrag["mine_text"] == "Gruselig" assert eintrag["ratings"][0]["mine"] is True def test_text_none_behaelt_leer_loescht(client, film): wid = gesehen(client, film) client.post(f"/api/watched/{wid}/rating", json={"stars": 4, "text": "Gruselig"}) # Nur die Sterne nachjustiert: der Satz bleibt, es bleibt eine Stimme client.post(f"/api/watched/{wid}/rating", json={"stars": 3}) [eintrag] = client.get("/api/watched").json() assert eintrag["mine"] == 3 assert eintrag["mine_text"] == "Gruselig" assert eintrag["count"] == 1 client.post(f"/api/watched/{wid}/rating", json={"stars": 3, "text": ""}) [eintrag] = client.get("/api/watched").json() assert eintrag["mine_text"] is None def test_text_wird_gekuerzt(client, film): wid = gesehen(client, film) client.post(f"/api/watched/{wid}/rating", json={"stars": 5, "text": "x" * (MAX_TEXT + 100)}) [eintrag] = client.get("/api/watched").json() assert len(eintrag["mine_text"]) == MAX_TEXT def test_fremde_wertung_ist_nicht_meine(client, client2, film): wid = gesehen(client, film) client.post(f"/api/watched/{wid}/rating", json={"stars": 4}) [eintrag] = client2.get("/api/watched").json() assert eintrag["mine"] is None assert eintrag["count"] == 1 assert eintrag["ratings"][0]["mine"] is False client2.post(f"/api/watched/{wid}/rating", json={"stars": 2}) [eintrag] = client2.get("/api/watched").json() assert eintrag["average"] == 3.0 assert eintrag["count"] == 2 assert eintrag["mine"] == 2