update
This commit is contained in:
110
backend/tests/test_wishlist.py
Normal file
110
backend/tests/test_wishlist.py
Normal file
@@ -0,0 +1,110 @@
|
||||
"""Die Sammlungen.
|
||||
|
||||
Alle sehen alle, ändern darf jeder nur die eigene. Die Karten im
|
||||
Sammlungen-Reiter zeigen dieselben Daten wie im Katalog — die holt die
|
||||
Liste per Join nach.
|
||||
"""
|
||||
|
||||
from app import db
|
||||
|
||||
|
||||
def katalogfilm(movie_id, **felder):
|
||||
"""Film mit allem, was die Detailkarte zeigt."""
|
||||
with db.connect() as conn:
|
||||
db.upsert(
|
||||
conn,
|
||||
{
|
||||
"id": movie_id,
|
||||
"title": "Alien",
|
||||
"year": 1979,
|
||||
"teaser": "Im Weltall hört dich niemand schreien.",
|
||||
"overview": "Die Nostromo fängt ein Signal auf.",
|
||||
"runtime": 117,
|
||||
"vote_average": 8.2,
|
||||
"vote_count": 14000,
|
||||
"genres": ["Horror", "Science Fiction"],
|
||||
"images": ["/a.jpg", "/b.jpg"],
|
||||
**felder,
|
||||
},
|
||||
)
|
||||
return movie_id
|
||||
|
||||
|
||||
def test_karte_bekommt_die_katalogdaten(client):
|
||||
client.post("/api/wishlist", json={"movie_id": katalogfilm(42)})
|
||||
eintrag = client.get("/api/wishlist").json()[0]
|
||||
|
||||
assert eintrag["teaser"].startswith("Im Weltall")
|
||||
assert eintrag["runtime"] == 117
|
||||
assert eintrag["vote_average"] == 8.2
|
||||
assert eintrag["vote_count"] == 14000
|
||||
assert eintrag["genres"] == ["Horror", "Science Fiction"]
|
||||
assert eintrag["images"] == ["/a.jpg", "/b.jpg"]
|
||||
|
||||
|
||||
def test_film_ausserhalb_des_katalogs_bleibt_spaerlich(client, film):
|
||||
"""Titel und Poster stehen in der Sammlung selbst, der Rest fehlt."""
|
||||
client.post("/api/wishlist", json={"movie_id": film(7, "Irgendwas")})
|
||||
eintrag = client.get("/api/wishlist").json()[0]
|
||||
|
||||
assert eintrag["title"] == "Irgendwas"
|
||||
assert eintrag["teaser"] is None
|
||||
assert eintrag["genres"] == []
|
||||
assert eintrag["images"] == []
|
||||
|
||||
|
||||
def test_merken_und_wieder_vergessen(client):
|
||||
movie_id = katalogfilm(42)
|
||||
client.post("/api/wishlist", json={"movie_id": movie_id})
|
||||
assert len(client.get("/api/wishlist").json()) == 1
|
||||
|
||||
assert client.delete(f"/api/wishlist/{movie_id}").json()["removed"] == 1
|
||||
assert client.get("/api/wishlist").json() == []
|
||||
|
||||
|
||||
def test_zweimal_merken_legt_nur_einen_an(client):
|
||||
movie_id = katalogfilm(42)
|
||||
client.post("/api/wishlist", json={"movie_id": movie_id})
|
||||
client.post("/api/wishlist", json={"movie_id": movie_id})
|
||||
assert len(client.get("/api/wishlist").json()) == 1
|
||||
|
||||
|
||||
def test_fremde_sammlung_sieht_man_aber_raeumt_sie_nicht(client, client2):
|
||||
movie_id = katalogfilm(42)
|
||||
client.post("/api/wishlist", json={"movie_id": movie_id})
|
||||
|
||||
# Ben sieht Annas Eintrag, aber er gehört ihm nicht
|
||||
eintrag = client2.get("/api/wishlist").json()[0]
|
||||
assert eintrag["name"] == "Anna"
|
||||
assert eintrag["mine"] is False
|
||||
|
||||
# Sein Löschversuch trifft nur die eigene Sammlung, also nichts
|
||||
assert client2.delete(f"/api/wishlist/{movie_id}").json()["removed"] == 0
|
||||
assert len(client.get("/api/wishlist").json()) == 1
|
||||
|
||||
|
||||
def test_jeder_hat_seine_eigene_sammlung(client, client2):
|
||||
movie_id = katalogfilm(42)
|
||||
client.post("/api/wishlist", json={"movie_id": movie_id})
|
||||
client2.post("/api/wishlist", json={"movie_id": movie_id})
|
||||
|
||||
eintraege = client.get("/api/wishlist").json()
|
||||
assert len(eintraege) == 2
|
||||
assert sorted(e["name"] for e in eintraege) == ["Anna", "Ben"]
|
||||
|
||||
|
||||
def test_sync_verschont_was_jemand_gemerkt_hat(client):
|
||||
"""Der Katalog kennt nur Netflix und den Kanon. Gemerkte Filme müssen
|
||||
trotzdem drinbleiben — sonst verlieren ihre Karten alle Daten."""
|
||||
gemerkt = katalogfilm(42)
|
||||
egal = katalogfilm(99, title="Niemandsfilm")
|
||||
client.post("/api/wishlist", json={"movie_id": gemerkt})
|
||||
|
||||
with db.connect() as conn:
|
||||
# Der Sync behält nur, was er gerade geholt hat — hier gar nichts
|
||||
weg = db.drop_missing(conn, [])
|
||||
uebrig = {r["id"] for r in conn.execute("SELECT id FROM movies")}
|
||||
|
||||
assert weg == 1
|
||||
assert uebrig == {gemerkt}
|
||||
assert egal not in uebrig
|
||||
Reference in New Issue
Block a user