From: Chris Fulljames Date: Sat, 26 Apr 2025 18:11:36 +0000 (-0400) Subject: Fix jam/event deletion X-Git-Url: https://littlesong.place/gitweb/?a=commitdiff_plain;h=d986720299f164a9f76854aff33c9b9b10a641d0;p=littlesongplace.git Fix jam/event deletion --- diff --git a/src/littlesongplace/jams.py b/src/littlesongplace/jams.py index e4af380..0708154 100644 --- a/src/littlesongplace/jams.py +++ b/src/littlesongplace/jams.py @@ -111,6 +111,12 @@ def update(jamid): @jam_owner_only def delete(jamid): # Delete a jam, redirect to the jams list + + # First delete all events + events = db.query("SELECT * FROM jam_events WHERE jamid = ?", [jamid]) + for event in events: + events_delete(jamid, event["eventid"]) + row = db.query( "DELETE FROM jams WHERE jamid = ? RETURNING *", [jamid], expect_one=True) @@ -181,12 +187,14 @@ def events_update(jamid, eventid): @jam_owner_only def events_delete(jamid, eventid): # Delete an event, redirect to list of all events + db.query("UPDATE songs SET eventid = NULL WHERE eventid = ?", [eventid]) db.query( """ DELETE FROM jam_events WHERE eventid = ? AND jamid = ? RETURNING * """, [eventid, jamid], expect_one=True) + db.commit() return redirect(url_for("jams.jam", jamid=jamid)) diff --git a/src/littlesongplace/templates/jam-event.html b/src/littlesongplace/templates/jam-event.html index 0d3cad9..44a3f95 100644 --- a/src/littlesongplace/templates/jam-event.html +++ b/src/littlesongplace/templates/jam-event.html @@ -28,7 +28,7 @@ {% if session["userid"] == jam.ownerid -%}
- +
{%- endif %} diff --git a/test/test_jams.py b/test/test_jams.py index edf1b2b..77a7b9a 100644 --- a/test/test_jams.py +++ b/test/test_jams.py @@ -66,6 +66,18 @@ def test_delete_jam(client, user, jam): response = client.get(f"/jams/{jam}") assert response.status_code == 404 +def test_delete_jam_with_event_and_song(client, user, jam, event): + client.post( + f"/jams/{jam}/events/{event}/update", + data=_get_event_data(startdate=yesterday, enddate=tomorrow)) + upload_song(client, b"Success", eventid=event) + + response = client.get(f"/jams/{jam}/delete", follow_redirects=True) + assert response.request.path == f"/jams" + assert b"New Jam" not in response.data + assert b"Event Title" not in response.data + assert b"[Upcoming Event]" not in response.data + def test_delete_jam_not_logged_in(client): response = client.get("/jams/1/delete", follow_redirects=True) assert response.request.path == "/login" @@ -173,6 +185,18 @@ def test_delete_event(client, user, jam, event): response = client.get(f"/jams/{jam}/events/{event}/delete", follow_redirects=True) assert response.request.path == f"/jams/{jam}" assert b"Event Title" not in response.data + assert b"[Upcoming Event]" not in response.data + +def test_delete_event_with_song(client, user, jam, event): + client.post( + f"/jams/{jam}/events/{event}/update", + data=_get_event_data(startdate=yesterday, enddate=tomorrow)) + upload_song(client, b"Success", eventid=event) + + response = client.get(f"/jams/{jam}/events/{event}/delete", follow_redirects=True) + assert response.request.path == f"/jams/{jam}" + assert b"Event Title" not in response.data + assert b"[Upcoming Event]" not in response.data def test_delete_event_not_logged_in(client, user, jam, event): client.get("/logout")