update
This commit is contained in:
@@ -19,7 +19,7 @@ os.environ["HOST_SCHLUESSEL"] = "test-host-schluessel"
|
||||
import pytest # noqa: E402
|
||||
from fastapi.testclient import TestClient # noqa: E402
|
||||
|
||||
from app import clips, db, features, main, suggestions, users, watched, wishlist # noqa: E402
|
||||
from app import clips, db, features, main, spenden, suggestions, users, watched, wishlist # noqa: E402
|
||||
|
||||
# Zählt, ob der Startup doch einen Sync anstoßen wollte
|
||||
_SYNC_AUFRUFE = []
|
||||
@@ -50,7 +50,7 @@ def sync_aufrufe():
|
||||
def frische_db(app_start):
|
||||
"""Jeder Test beginnt mit leeren Tabellen und ohne laufende Ziehung."""
|
||||
db.DB_PATH.unlink(missing_ok=True)
|
||||
for modul in (db, users, suggestions, watched, clips, wishlist, features):
|
||||
for modul in (db, users, suggestions, watched, clips, wishlist, features, spenden):
|
||||
modul.init()
|
||||
main.letzter_dreh.update(ergebnis=None, start=0.0)
|
||||
|
||||
|
||||
@@ -151,13 +151,25 @@ def test_host_darf_jeden_film_nachschlagen(client, zuschauer, film, hostmodus):
|
||||
assert zuschauer.get(f"/api/users/{anna}/schutz").json()["film"]["title"] == "Alien"
|
||||
|
||||
|
||||
def test_ohne_schluessel_kein_hostmodus(zuschauer):
|
||||
"""Die Tastenkombination allein reicht nicht mehr."""
|
||||
def hostfilm_setzen(client, hostmodus, movie_id):
|
||||
"""Ein Host setzt den Host-Film und gibt die Rechte wieder ab."""
|
||||
hostmodus(client)
|
||||
client.post("/api/host/film", json={"movie_id": movie_id})
|
||||
client.post("/api/host", json={"an": False})
|
||||
|
||||
|
||||
def test_ohne_hostfilm_reicht_die_tastenkombination(zuschauer):
|
||||
assert zuschauer.post("/api/host", json={"an": True}).json()["host"] is True
|
||||
|
||||
|
||||
def test_mit_hostfilm_kein_hostmodus_ohne_film(zuschauer, hostmodus, film):
|
||||
hostfilm_setzen(zuschauer, hostmodus, film(1))
|
||||
assert zuschauer.post("/api/host", json={"an": True}).status_code == 403
|
||||
assert zuschauer.get("/api/host").json()["host"] is False
|
||||
|
||||
|
||||
def test_falscher_schluessel_kein_hostmodus(zuschauer):
|
||||
def test_falscher_schluessel_kein_hostmodus(zuschauer, hostmodus, film):
|
||||
hostfilm_setzen(zuschauer, hostmodus, film(1))
|
||||
antwort = zuschauer.post(
|
||||
"/api/host", json={"an": True, "schluessel": "geraten"}
|
||||
)
|
||||
@@ -173,7 +185,8 @@ def test_schluessel_schaltet_frei_und_bleibt(zuschauer, hostmodus):
|
||||
assert zuschauer.get("/api/host").json()["host"] is True
|
||||
|
||||
|
||||
def test_ausschalten_geht_ohne_schluessel(zuschauer, hostmodus):
|
||||
def test_ausschalten_geht_ohne_schluessel(zuschauer, hostmodus, film):
|
||||
hostfilm_setzen(zuschauer, hostmodus, film(1))
|
||||
hostmodus(zuschauer)
|
||||
assert zuschauer.post("/api/host", json={"an": False}).json()["host"] is False
|
||||
# Jetzt ist die Sitzung wieder gewöhnlich
|
||||
@@ -189,9 +202,12 @@ def test_hostfilm_oeffnet_den_hostmodus(zuschauer, client, hostmodus, film):
|
||||
# Nur der Host darf den Host-Film setzen oder sehen
|
||||
assert client.post("/api/host/film", json={"movie_id": film(1)}).status_code == 403
|
||||
assert client.get("/api/host/film").status_code == 403
|
||||
# Ob es einen gibt, sieht jeder — welcher, nicht
|
||||
assert client.get("/api/host").json() == {"host": False, "film": False}
|
||||
hostmodus(zuschauer)
|
||||
assert zuschauer.post("/api/host/film", json={"movie_id": film(1)}).json()["gesetzt"] is True
|
||||
assert zuschauer.get("/api/host/film").json()["film"]["id"] == film(1)
|
||||
assert client.get("/api/host").json() == {"host": False, "film": True}
|
||||
|
||||
# Falscher Film: nichts; richtiger Film: Host
|
||||
assert client.post("/api/host", json={"an": True, "movie_id": film(2)}).status_code == 403
|
||||
@@ -199,8 +215,8 @@ def test_hostfilm_oeffnet_den_hostmodus(zuschauer, client, hostmodus, film):
|
||||
assert client.post("/api/host", json={"an": True, "movie_id": film(1)}).json()["host"] is True
|
||||
assert client.get("/api/host").json()["host"] is True
|
||||
|
||||
# Aufheben: der Film öffnet nichts mehr
|
||||
# Aufheben: ohne Host-Film reicht die Tastenkombination
|
||||
zuschauer.post("/api/host/film", json={"movie_id": None})
|
||||
assert zuschauer.get("/api/host/film").json()["film"] is None
|
||||
client.post("/api/host", json={"an": False})
|
||||
assert client.post("/api/host", json={"an": True, "movie_id": film(1)}).status_code == 403
|
||||
assert client.post("/api/host", json={"an": True}).json()["host"] is True
|
||||
|
||||
27
backend/tests/test_spenden.py
Normal file
27
backend/tests/test_spenden.py
Normal file
@@ -0,0 +1,27 @@
|
||||
"""Der Spendenbaum: ein Blatt je Person, nur der Host pflegt ihn."""
|
||||
|
||||
|
||||
def test_ein_blatt_je_person_nur_vom_host(client, zuschauer, hostmodus, anmelden):
|
||||
anmelden(client, "Anna")
|
||||
anna = client.get("/api/users").json()["mine"]["id"]
|
||||
assert client.get("/api/spenden").json() == []
|
||||
assert client.post("/api/spenden", json={"user_id": anna}).status_code == 403
|
||||
|
||||
hostmodus(zuschauer)
|
||||
blaetter = zuschauer.post("/api/spenden", json={"user_id": anna}).json()
|
||||
assert [b["name"] for b in blaetter] == ["Anna"]
|
||||
# Ein zweites Mal: immer noch ein Blatt
|
||||
assert len(zuschauer.post("/api/spenden", json={"user_id": anna}).json()) == 1
|
||||
assert client.get("/api/spenden").json()[0]["name"] == "Anna"
|
||||
|
||||
assert client.delete(f"/api/spenden/{anna}").status_code == 403
|
||||
assert zuschauer.delete(f"/api/spenden/{anna}").json() == []
|
||||
|
||||
|
||||
def test_kontostand_setzt_nur_der_host(client, zuschauer, hostmodus):
|
||||
assert client.get("/api/kontostand").json() == {"betrag": None}
|
||||
assert client.put("/api/kontostand", json={"betrag": 12.5}).status_code == 403
|
||||
hostmodus(zuschauer)
|
||||
assert zuschauer.put("/api/kontostand", json={"betrag": 12.5}).json() == {"betrag": 12.5}
|
||||
assert client.get("/api/kontostand").json() == {"betrag": 12.5}
|
||||
assert zuschauer.put("/api/kontostand", json={"betrag": None}).json() == {"betrag": None}
|
||||
Reference in New Issue
Block a user