75 lines
2.7 KiB
Python
75 lines
2.7 KiB
Python
"""Wünsche: Stimmen, Abhaken, Anmerkungen."""
|
|
|
|
from app import db
|
|
|
|
|
|
def wunsch(client, text="Dunkles Design"):
|
|
liste = client.post("/api/features", json={"text": text}).json()
|
|
return next(w for w in liste if w["text"] == text)
|
|
|
|
|
|
def test_leerer_wunsch_wird_abgelehnt(client):
|
|
assert client.post("/api/features", json={"text": " "}).status_code == 400
|
|
|
|
|
|
def test_stimme_toggelt(client):
|
|
w = wunsch(client)
|
|
assert w["mine"] is True
|
|
assert w["votes"] == 0
|
|
assert w["voted"] is False
|
|
|
|
assert client.post(f"/api/features/{w['id']}/vote").json() == {"voted": True}
|
|
[w] = client.get("/api/features").json()
|
|
assert w["votes"] == 1
|
|
assert w["voted"] is True
|
|
|
|
assert client.post(f"/api/features/{w['id']}/vote").json() == {"voted": False}
|
|
[w] = client.get("/api/features").json()
|
|
assert w["votes"] == 0
|
|
assert w["voted"] is False
|
|
|
|
|
|
def test_erledigt_rutscht_ans_ende(client):
|
|
erster = wunsch(client, "A")
|
|
wunsch(client, "B")
|
|
# Mit Stimme steht A vorn
|
|
client.post(f"/api/features/{erster['id']}/vote")
|
|
assert [w["text"] for w in client.get("/api/features").json()] == ["A", "B"]
|
|
|
|
antwort = client.patch(f"/api/features/{erster['id']}/done", json={"done": True})
|
|
assert antwort.json() == {"ok": True}
|
|
liste = client.get("/api/features").json()
|
|
assert [w["text"] for w in liste] == ["B", "A"]
|
|
assert liste[1]["done_at"] is not None
|
|
|
|
client.patch(f"/api/features/{erster['id']}/done", json={"done": False})
|
|
assert [w["text"] for w in client.get("/api/features").json()] == ["A", "B"]
|
|
|
|
|
|
def test_anmerkungen_anlegen_und_loeschen(client, client2):
|
|
w = wunsch(client)
|
|
antwort = client.post(f"/api/features/{w['id']}/notes", json={"text": "Mit Kontrast"})
|
|
assert antwort.json() == {"ok": True}
|
|
|
|
[w] = client.get("/api/features").json()
|
|
[notiz] = w["notes"]
|
|
assert notiz["text"] == "Mit Kontrast"
|
|
assert notiz["mine"] is True
|
|
[fremd] = client2.get("/api/features").json()
|
|
assert fremd["notes"][0]["mine"] is False
|
|
|
|
assert client.delete(f"/api/feature-notes/{notiz['id']}").json() == {"removed": 1}
|
|
assert client.get("/api/features").json()[0]["notes"] == []
|
|
|
|
|
|
def test_loeschen_raeumt_stimmen_und_anmerkungen_mit(client):
|
|
w = wunsch(client)
|
|
client.post(f"/api/features/{w['id']}/vote")
|
|
client.post(f"/api/features/{w['id']}/notes", json={"text": "Anmerkung"})
|
|
|
|
assert client.delete(f"/api/features/{w['id']}").json() == {"removed": 1}
|
|
assert client.get("/api/features").json() == []
|
|
with db.connect() as conn:
|
|
for tabelle in ("feature_votes", "feature_notes"):
|
|
assert conn.execute(f"SELECT COUNT(*) FROM {tabelle}").fetchone()[0] == 0
|